From 22d35b2718bfa2fc2f260c534ee00077e82d7a66 Mon Sep 17 00:00:00 2001 From: Filipinos Date: Thu, 19 Jun 2025 04:02:44 +0200 Subject: [PATCH] Subida SOLO de DRMPlayer --- _locales/en/messages.json | 334 +++++ _locales/es/messages.json | 334 +++++ atresplayer_handler.js | 189 +++ background.js | 115 ++ bartv_handler.js | 234 ++++ channel_ui.js | 368 ++++++ css/base.css | 37 + css/channel_card.css | 80 ++ css/channel_grid.css | 18 + css/components.css | 36 + css/editor.css | 121 ++ css/epg_modal.css | 33 + css/generic_modals.css | 8 + css/header.css | 39 + css/layout.css | 55 + css/modals_general.css | 9 + css/movistar_vod_modal.css | 25 + css/player_modal.css | 363 ++++++ css/responsive.css | 71 + css/settings_modal.css | 64 + css/sidebar.css | 8 + css/xtream_modal.css | 74 ++ dazn_handler.js | 372 ++++++ db_manager.js | 383 ++++++ draggable_modals.js | 76 ++ editor_handler.js | 634 +++++++++ epg.js | 1035 +++++++++++++++ icons/icon128.png | Bin 0 -> 29303 bytes icons/icon16.png | Bin 0 -> 24804 bytes icons/icon48.png | Bin 0 -> 26382 bytes libs/Sortable.min.js | 2 + libs/bootstrap.bundle.min.js | 7 + libs/bootstrap.min.css | 6 + libs/controls.css | 54 + libs/fontawesome/css/all.min.css | 9 + libs/jquery-3.7.0.min.js | 2 + libs/particles.min.js | 8 + libs/shaka-player.compiled.js | 1738 +++++++++++++++++++++++++ libs/shaka-player.ui.js | 2072 ++++++++++++++++++++++++++++++ m3u_operations.js | 319 +++++ m3u_sender.js | 45 + m3u_utils.js | 286 +++++ manifest.json | 91 ++ movistar_handler.js | 648 ++++++++++ movistar_vod_ui.js | 532 ++++++++ orange_tv_client.js | 675 ++++++++++ php_handler.js | 212 +++ player.html | 1267 ++++++++++++++++++ player.js | 1458 +++++++++++++++++++++ player_interaction.js | 324 +++++ settings_manager.js | 455 +++++++ shaka_handler.js | 380 ++++++ ui_actions.js | 101 ++ user_session.js | 178 +++ xcodec_handler.js | 819 ++++++++++++ xtream_handler.js | 569 ++++++++ 56 files changed, 17372 insertions(+) create mode 100644 _locales/en/messages.json create mode 100644 _locales/es/messages.json create mode 100644 atresplayer_handler.js create mode 100644 background.js create mode 100644 bartv_handler.js create mode 100644 channel_ui.js create mode 100644 css/base.css create mode 100644 css/channel_card.css create mode 100644 css/channel_grid.css create mode 100644 css/components.css create mode 100644 css/editor.css create mode 100644 css/epg_modal.css create mode 100644 css/generic_modals.css create mode 100644 css/header.css create mode 100644 css/layout.css create mode 100644 css/modals_general.css create mode 100644 css/movistar_vod_modal.css create mode 100644 css/player_modal.css create mode 100644 css/responsive.css create mode 100644 css/settings_modal.css create mode 100644 css/sidebar.css create mode 100644 css/xtream_modal.css create mode 100644 dazn_handler.js create mode 100644 db_manager.js create mode 100644 draggable_modals.js create mode 100644 editor_handler.js create mode 100644 epg.js create mode 100644 icons/icon128.png create mode 100644 icons/icon16.png create mode 100644 icons/icon48.png create mode 100644 libs/Sortable.min.js create mode 100644 libs/bootstrap.bundle.min.js create mode 100644 libs/bootstrap.min.css create mode 100644 libs/controls.css create mode 100644 libs/fontawesome/css/all.min.css create mode 100644 libs/jquery-3.7.0.min.js create mode 100644 libs/particles.min.js create mode 100644 libs/shaka-player.compiled.js create mode 100644 libs/shaka-player.ui.js create mode 100644 m3u_operations.js create mode 100644 m3u_sender.js create mode 100644 m3u_utils.js create mode 100644 manifest.json create mode 100644 movistar_handler.js create mode 100644 movistar_vod_ui.js create mode 100644 orange_tv_client.js create mode 100644 php_handler.js create mode 100644 player.html create mode 100644 player.js create mode 100644 player_interaction.js create mode 100644 settings_manager.js create mode 100644 shaka_handler.js create mode 100644 ui_actions.js create mode 100644 user_session.js create mode 100644 xcodec_handler.js create mode 100644 xtream_handler.js diff --git a/_locales/en/messages.json b/_locales/en/messages.json new file mode 100644 index 0000000..4e14902 --- /dev/null +++ b/_locales/en/messages.json @@ -0,0 +1,334 @@ +{ + "pageTitle": { "message": "DRM Player | Advanced Player" }, + "appName": { "message": "DRM Player" }, + "filterGroupsLabel": { "message": "Filter Groups" }, + "allGroupsOption": { "message": "📂 All groups" }, + "groupsLabel": { "message": "Groups" }, + "allGroupsListItem": { "message": "All Groups" }, + "searchPlaceholder": { "message": "Search channels..." }, + "advancedEditorButton": { "message": "Editor" }, + "providersButton": { "message": "Providers" }, + "listManagementButton": { "message": "Lists" }, + "loadListsButton": { "message": "Load Lists" }, + "saveListsButton": { "message": "Save Lists" }, + "downloadM3UButton": { "message": "Download M3U" }, + "epgButton": { "message": "EPG" }, + "settingsButton": { "message": "Settings" }, + "loadUrlButton": { "message": "Load URL" }, + "loadFileInputTitle": { "message": "Select local M3U file" }, + "allChannelsTab": { "message": "All" }, + "favoritesTab": { "message": "Favorites" }, + "historyTab": { "message": "History" }, + "backButton": { "message": "Back" }, + "availableChannelsTitle": { "message": "Available Channels" }, + "paginationPrev": { "message": "Prev" }, + "paginationNext": { "message": "Next" }, + "playerTitle": { "message": "Player" }, + "minimizeButton": { "message": "Minimize" }, + "closeButton": { "message": "Close" }, + "nowLabel": { "message": "Now:" }, + "nextLabel": { "message": "Next:" }, + "channelListTitle": { "message": "Channel List" }, + "advancedEditorTitle": { "message": "Advanced M3U Editor" }, + "noFileLoaded": { "message": "No file loaded" }, + "searchInListPlaceholder": { "message": "Search in list..." }, + "allGroups": { "message": "All Groups" }, + "deleteSelected": { "message": "Delete Sel." }, + "clearSelection": { "message": "Clear Sel." }, + "multiEdit": { "message": "Multi-Edit" }, + "logoHeader": { "message": "Logo" }, + "nameHeader": { "message": "Name" }, + "urlHeader": { "message": "URL" }, + "epgIdHeader": { "message": "EPG ID" }, + "channelNumHeader": { "message": "Num" }, + "actionsHeader": { "message": "Actions" }, + "editorPlaceholder": { "message": "Select a channel to edit its details." }, + "channelEditorTitle": { "message": "Channel Editor" }, + "logoPreviewAlt": { "message": "Logo preview" }, + "channelNameLabel": { "message": "Channel Name" }, + "epgIdLabel": { "message": "EPG ID (tvg-id)" }, + "channelNumLabel": { "message": "Ch. Number (ch-number)" }, + "logoLabel": { "message": "Logo (tvg-logo)" }, + "streamUrlLabel": { "message": "Stream URL" }, + "groupLabel": { "message": "Group (group-title)" }, + "favoriteLabel": { "message": "Favorite" }, + "hideChannelLabel": { "message": "Hide channel" }, + "advancedSettingsDRM": { "message": "Advanced Settings / DRM" }, + "licenseTypeLabel": { "message": "DRM License Type (license_type)" }, + "licenseKeyLabel": { "message": "DRM License Key/URL (license_key)" }, + "streamHeadersLabel": { "message": "DRM Stream Headers (stream_headers)" }, + "vlcUserAgentLabel": { "message": "VLC User-Agent (#EXTVLCOPT:http-user-agent)" }, + "testButton": { "message": "Test" }, + "deleteButton": { "message": "Delete" }, + "saveButton": { "message": "Save" }, + "closeEditorButton": { "message": "Close Editor" }, + "applyChangesAndCloseButton": { "message": "Apply Changes & Close" }, + "multiEditTitle": { "message": "Multiple Channel Edit" }, + "multiEditDescription": { "message": "Apply changes to all {count} selected channels. Only enabled fields will be modified." }, + "changeGroupLabel": { "message": "Change Group" }, + "newGroupNamePlaceholder": { "message": "New group name..." }, + "modifyFavoriteLabel": { "message": "Modify Favorite" }, + "addToFavoritesOption": { "message": "Add to Favorites" }, + "removeFromFavoritesOption": { "message": "Remove from Favorites" }, + "modifyVisibilityLabel": { "message": "Modify Visibility" }, + "hideChannelsOption": { "message": "Hide Channels" }, + "showChannelsOption": { "message": "Show Channels" }, + "headersAndDRM": { "message": "Headers & DRM" }, + "setUserAgentLabel": { "message": "Set User-Agent (VLC)" }, + "userAgentPlaceholder": { "message": "User-Agent for #EXTVLCOPT..." }, + "setStreamHeadersLabel": { "message": "Add/Overwrite Stream Headers (Kodi)" }, + "streamHeadersPlaceholder": { "message": "key1=value1|key2=value2..." }, + "appendHeadersOption": { "message": "Append/Update Headers" }, + "replaceHeadersOption": { "message": "Replace All Headers" }, + "applyChangesButton": { "message": "Apply Changes" }, + "saveM3UModalTitle": { "message": "Save Current M3U List" }, + "saveM3UModalDescription": { "message": "Enter a name to save the currently loaded M3U list to the extension's local database." }, + "listNameLabel": { "message": "List Name:" }, + "listNamePlaceholder": { "message": "E.g.: MyFavoriteTV_List" }, + "saveListButton": { "message": "Save List" }, + "daznTokenModalTitle": { "message": "DAZN Authentication Token Required" }, + "daznTokenModalDescription": { "message": "To update DAZN channels, please enter your full DAZN Bearer Token." }, + "daznTokenModalHint": { "message": "This token can be obtained from your browser's developer tools by inspecting network requests while DAZN is active and logged in." }, + "daznTokenLabel": { "message": "DAZN Token (Bearer):" }, + "daznTokenPlaceholder": { "message": "Paste your full Bearer token here..." }, + "rememberTokenLabel": { "message": "Remember this token (will be saved locally in settings)" }, + "submitTokenButton": { "message": "Submit Token" }, + "loadFromDBModalTitle": { "message": "Saved Lists" }, + "loadingLists": { "message": "Loading lists..." }, + "loadButton": { "message": "Load" }, + "epgModalTitle": { "message": "Program Guide (EPG)" }, + "epgUrlPlaceholder": { "message": "📅 XMLTV EPG file URL" }, + "loadEpgButton": { "message": "Load/Update EPG" }, + "movistarVODModalTitle": { "message": "Movistar+ VOD/Catchup" }, + "selectDateLabel": { "message": "Select Date:" }, + "loadEpgDayButton": { "message": "Load Day's EPG" }, + "searchProgramPlaceholder": { "message": "Search program..." }, + "allChannelsOption": { "message": "All channels" }, + "allGenresOption": { "message": "All genres" }, + "noProgramsFound": { "message": "No programs found for the selected date/filters." }, + "pageInfo": { "message": "Page {currentPage} of {totalPages} ({totalItems} results)" }, + "previousButton": { "message": "Previous" }, + "nextButton": { "message": "Next" }, + "programDetailsTitle": { "message": "Program Details" }, + "playProgramButton": { "message": "Play" }, + "addToListButton": { "message": "Add to M3U List" }, + "xtreamModalTitle": { "message": "Xtream Codes Server Connection" }, + "xtreamModalDescription": { "message": "Enter your Xtream server details. The M3U URL will be generated automatically." }, + "xtreamServerNameLabel": { "message": "Name for Saving (Optional):" }, + "xtreamHostLabel": { "message": "Server Host (e.g., http://domain.com:port):" }, + "xtreamUserLabel": { "message": "User:" }, + "xtreamPasswordLabel": { "message": "Password:" }, + "xtreamOutputTypeLabel": { "message": "Preferred Output Type:" }, + "xtreamM3uPlusOption": { "message": "M3U Plus (Recommended)" }, + "xtreamTsOption": { "message": "TS" }, + "xtreamHlsOption": { "message": "HLS (m3u8)" }, + "xtreamOutputHint": { "message": "Affects the format of the stream URLs." }, + "xtreamContentToLoadLabel": { "message": "Content to Load:" }, + "xtreamLiveChannels": { "message": "Live Channels" }, + "xtreamVod": { "message": "VOD (Movies)" }, + "xtreamSeries": { "message": "Series" }, + "xtreamFetchEpgLabel": { "message": "Try to fetch EPG from server" }, + "xtreamForceGroupSelectionLabel": { "message": "Force group selection" }, + "xtreamForceGroupSelectionHint": { "message": "Check this if you want to change your group selection for this server." }, + "xtreamSavedServersLabel": { "message": "Saved Servers" }, + "xtreamNoSavedServers": { "message": "No saved servers." }, + "xtreamSaveConnectionButton": { "message": "Save Current Connection" }, + "xtreamConnectButton": { "message": "Connect and Load" }, + "xtreamGroupSelectionTitle": { "message": "Select Xtream Groups" }, + "xtreamGroupSelectionDescription": { "message": "Select the groups from each category you want to load into the list." }, + "xtreamLiveGroupsLabel": { "message": "Live Groups" }, + "xtreamVodGroupsLabel": { "message": "VOD Groups" }, + "xtreamSeriesGroupsLabel": { "message": "Series Groups" }, + "selectAll": { "message": "All" }, + "deselectAll": { "message": "None" }, + "loading": { "message": "Loading..." }, + "loadSelectedButton": { "message": "Load Selected" }, + "xcodecPanelsTitle": { "message": "XCodec Panel Management" }, + "xcodecPanelFormLabel": { "message": "Panel Form" }, + "xcodecPanelNameLabel": { "message": "Panel Name (Optional):" }, + "xcodecServerUrlLabel": { "message": "X-UI/XC Server URL:" }, + "xcodecApiTokenLabel": { "message": "API Token (if required):" }, + "xcodecSavePanelButton": { "message": "Save Panel" }, + "xcodecClearFormButton": { "message": "Clear" }, + "xcodecSavedPanelsLabel": { "message": "Saved Panels" }, + "xcodecImportPresetButton": { "message": "Import Preset Panels" }, + "xcodecNoSavedPanels": { "message": "No saved panels." }, + "xcodecProcessAllButton": { "message": "Process All" }, + "xcodecProcessFormButton": { "message": "Process Panel (Form)" }, + "xcodecPreviewTitle": { "message": "XCodec Panel Preview" }, + "xcodecPreviewStatsLoading": { "message": "Loading stats..." }, + "xcodecPanelGroupsLabel": { "message": "Panel Groups" }, + "xcodecSelectAllGroupsButton": { "message": "Select/Deselect All Groups" }, + "xcodecChannelsInGroupLabel": { "message": "Channels in Selected Group" }, + "xcodecSelectGroupHint": { "message": "Select a group to see its channels." }, + "xcodecSelectAllInGroupButton": { "message": "Select/Deselect All in Group" }, + "xcodecAddSelectedButton": { "message": "Add Selected" }, + "xcodecAddAllValidButton": { "message": "Add All Valid" }, + "settingsTitle": { "message": "Player Settings" }, + "settingsGeneralUITab": { "message": "General & UI" }, + "settingsPlayerTab": { "message": "Player" }, + "settingsNetworkTab": { "message": "Network (Shaka)" }, + "settingsEpgTab": { "message": "EPG" }, + "settingsXCodecTab": { "message": "XCodec" }, + "settingsBarTvTab": { "message": "BarTV" }, + "settingsOrangeTvTab": { "message": "OrangeTV" }, + "settingsGlobalNetworkTab": { "message": "Global Network" }, + "settingsDaznTab": { "message": "DAZN" }, + "settingsMovistarTab": { "message": "Movistar+" }, + "settingsSendM3uTab": { "message": "Send M3U" }, + "settingsDataManagementTab": { "message": "Data Management" }, + "settingsUIAppearanceTitle": { "message": "User Interface & Appearance" }, + "languageLabel": { "message": "Language:" }, + "themeLabel": { "message": "Color Theme:" }, + "greenTheme": { "message": "Green (Default)" }, + "blueTheme": { "message": "Blue" }, + "purpleTheme": { "message": "Purple" }, + "orangeTheme": { "message": "Orange" }, + "fontLabel": { "message": "Main Font:" }, + "systemFont": { "message": "System (Default)" }, + "sansSerifFont": { "message": "Generic Sans-Serif" }, + "serifFont": { "message": "Generic Serif" }, + "monospaceFont": { "message": "Generic Monospace" }, + "cardSizeLabel": { "message": "Channel Card Size:" }, + "channelsPerPageLabel": { "message": "Channels per Page:" }, + "storeLastM3ULabel": { "message": "Store Last M3U List (<4MB)" }, + "backgroundAnimationLabel": { "message": "Background Animation (Particles)" }, + "particleOpacityLabel": { "message": "Particle Opacity:" }, + "cardDisplaySettingsTitle": { "message": "Channel Card Display" }, + "logoAspectRatioLabel": { "message": "Logo Aspect Ratio:" }, + "aspectRatio169": { "message": "16:9 (Widescreen)" }, + "aspectRatio43": { "message": "4:3 (Standard)" }, + "aspectRatio11": { "message": "1:1 (Square)" }, + "aspectRatio21": { "message": "2:1 (Cinematic)" }, + "aspectRatioAuto": { "message": "Automatic (Container's Original)" }, + "showChannelNumberLabel": { "message": "Show Channel Number" }, + "showChannelGroupLabel": { "message": "Show Channel Group" }, + "showEpgInfoLabel": { "message": "Show EPG Info (Now/Next)" }, + "showFavButtonLabel": { "message": "Show Favorite Button" }, + "compactCardViewLabel": { "message": "Compact card view" }, + "enableHoverPreviewLabel": { "message": "Enable preview on hover" }, + "shakaPlayerSettingsTitle": { "message": "Shaka Player Configuration" }, + "persistentControlsLabel": { "message": "Player Controls Always Visible" }, + "persistFiltersLabel": { "message": "Remember Filters between sessions" }, + "playerWindowOpacityLabel": { "message": "Player Window Opacity:" }, + "playerBufferLabel": { "message": "Player buffer (seconds):" }, + "maxVideoHeightLabel": { "message": "Preferred Max Video Height (ABR):" }, + "noRestrictionOption": { "message": "Automatic (No restriction)" }, + "preferredAudioLabel": { "message": "Preferred Audio:" }, + "preferredSubtitlesLabel": { "message": "Preferred Subtitles:" }, + "lowLatencyModeLabel": { "message": "Low Latency Mode (Live Streaming)" }, + "liveCatchUpModeLabel": { "message": "Aggressive Live Sync (Live Catch-up)" }, + "enableAbrLabel": { "message": "Enable ABR (Adaptive Bitrate)" }, + "abrInitialBandwidthLabel": { "message": "ABR initial bandwidth (Kbps):" }, + "jumpLargeGapsLabel": { "message": "Jump Large Gaps in Stream (Live)" }, + "dashPresentationDelayLabel": { "message": "DASH Presentation Delay (seconds):" }, + "dashPresentationDelayHint": { "message": "For DASH streams. Defines how far behind the 'live' edge playback will begin." }, + "avSyncThresholdLabel": { "message": "A/V Sync Threshold (seconds):" }, + "avSyncThresholdHint": { "message": "Maximum allowed difference between audio and video before a correction is attempted." }, + "networkRetrySettingsTitle": { "message": "Network Retry Configuration (Shaka)" }, + "manifestMaxRetriesLabel": { "message": "Manifest Max Retries:" }, + "manifestTimeoutLabel": { "message": "Manifest Timeout (ms):" }, + "segmentMaxRetriesLabel": { "message": "Segment Max Retries:" }, + "segmentTimeoutLabel": { "message": "Segment Timeout (ms):" }, + "epgSettingsTitle": { "message": "Program Guide (EPG)" }, + "defaultEpgUrlLabel": { "message": "Default XMLTV EPG URL (EPG Modal):" }, + "enableEpgNameMatchingLabel": { "message": "Enable EPG Matching by Name (XMLTV)" }, + "epgNameMatchingHint": { "message": "If tvg-id fails, try matching by name (less accurate)." }, + "epgNameMatchThresholdLabel": { "message": "EPG Name Similarity Threshold (XMLTV):" }, + "epgDensityLabel": { "message": "EPG Visual Density:" }, + "epgDensityHint": { "message": "Pixels per hour on the timeline. Higher = wider, more detail. Lower = more compact." }, + "useMovistarVodAsEpgLabel": { "message": "Use Movistar+ VOD data as EPG (experimental)" }, + "useMovistarVodAsEpgHint": { "message": "Integrates the current day's EPG from Movistar VOD for the Movistar channels in your list." }, + "rematchEpgNowButton": { "message": "Rematch EPG Now" }, + "rematchEpgHint": { "message": "Requires a loaded M3U list and EPG." }, + "xcodecSettingsTitle": { "message": "XCodec Panel Configuration" }, + "corsProxyUrlLabel": { "message": "CORS Proxy URL (Optional):" }, + "corsProxyUrlHint": { "message": "Enter a CORS proxy URL if XCodec panels have CORS issues. The panel URL will be appended (e.g., `proxy.com/?url=http://panel.com`). Leave empty for direct calls." }, + "ignorePanelsOverStreamsLabel": { "message": "Ignore Panels with more than X Streams (0 to disable):" }, + "ignorePanelsOverStreamsHint": { "message": "If a panel has more streams than this value, it won't be processed when adding directly (does not affect preview)." }, + "batchSizeLabel": { "message": "Batch Size for Configs:" }, + "batchSizeHint": { "message": "Number of stream configurations to request simultaneously." }, + "apiTimeoutLabel": { "message": "API Request Timeout (ms):" }, + "apiTimeoutHint": { "message": "Maximum wait time for each call to the panel's API." }, + "barTvCredentialsTitle": { "message": "BarTV Credentials" }, + "emailLabel": { "message": "Email:" }, + "passwordLabel": { "message": "Password:" }, + "barTvCredentialsHint": { "message": "Enter your BarTV credentials to load the channels." }, + "orangeTvCredentialsTitle": { "message": "OrangeTV Credentials" }, + "userLabel": { "message": "User:" }, + "orangeTvGroupSelectionTitle": { "message": "OrangeTV Channel Group Selection" }, + "orangeTvGroupSelectionHint": { "message": "If no group is selected, all available groups will be included when loading OrangeTV channels." }, + "globalNetworkSettingsTitle": { "message": "Global Network Configuration" }, + "globalUserAgentLabel": { "message": "Global User-Agent (Optional):" }, + "globalUserAgentHint": { "message": "Applicable if the channel does not define its own via KODIPROP, EXTVLCOPT, or EXTHTTP." }, + "globalReferrerLabel": { "message": "Global Referrer (Optional):" }, + "globalReferrerHint": { "message": "Applicable if the channel does not define its own." }, + "additionalGlobalHeadersLabel": { "message": "Additional Global Headers (JSON):" }, + "additionalGlobalHeadersHint": { "message": "Will be merged with channel headers (channel takes precedence)." }, + "daznSettingsTitle": { "message": "DAZN Configuration" }, + "daznAuthTokenLabel": { "message": "DAZN Authentication Token:" }, + "daznAuthTokenHint": { "message": "This token will be used to fetch and update DAZN channels in your M3U list. It is stored securely." }, + "movistarManagementTitle": { "message": "Movistar+ Management" }, + "movistarManagementDescription": { "message": "This section allows managing authentication and tokens for Movistar+." }, + "movistarLoginTitle": { "message": "Login / Get Tokens" }, + "movistarLoginButton": { "message": "Login and Get Tokens" }, + "movistarSavedLongTokensTitle": { "message": "Saved Long-Session Tokens" }, + "movistarTokenIdHeader": { "message": "ID" }, + "movistarAccountHeader": { "message": "Account" }, + "movistarDeviceIdHeader": { "message": "Device ID" }, + "movistarExpiresHeader": { "message": "Expires" }, + "movistarStatusHeader": { "message": "Status" }, + "movistarActionHeader": { "message": "Action" }, + "movistarLoading": { "message": "Loading..." }, + "movistarValidateAllButton": { "message": "Validate All" }, + "movistarDeleteExpiredButton": { "message": "Del. Expired" }, + "movistarAddJwtLabel": { "message": "Add JWT:" }, + "movistarDeviceIdLabel": { "message": "Device ID:" }, + "movistarAddManualButton": { "message": "Add Manual Token" }, + "movistarDeviceManagementTitle": { "message": "Device Management for Token:" }, + "movistarLoadDevicesHint": { "message": "Load devices for the selected token above." }, + "movistarLoadDevicesButton": { "message": "Load Devices" }, + "movistarAssociateDeviceButton": { "message": "Associate Selected" }, + "movistarRegisterNewDeviceButton": { "message": "Register New" }, + "movistarCurrentCdnTokenTitle": { "message": "Current Short (CDN) Token" }, + "movistarCdnTokenLabel": { "message": "CDN Token (X-TCDN-Token):" }, + "movistarCdnExpiresLabel": { "message": "Expires:" }, + "movistarRefreshCdnButton": { "message": "Refresh CDN Token" }, + "movistarCopyCdnButton": { "message": "Copy CDN" }, + "movistarApplyToChannelsButton": { "message": "Apply to Channels" }, + "movistarVodCacheManagementTitle": { "message": "Movistar+ VOD Cache Management" }, + "movistarVodCacheSavedDaysLabel": { "message": "Saved VOD data days:" }, + "movistarVodCacheEstimatedSizeLabel": { "message": "Estimated cache size:" }, + "movistarVodCacheDaysToKeepLabel": { "message": "Days to keep in cache (1-90):" }, + "movistarClearVodCacheButton": { "message": "Clear Movistar+ VOD Cache Now" }, + "movistarLogLabel": { "message": "Action Log:" }, + "sendM3uToServerTitle": { "message": "Send M3U List to Server" }, + "phpServerUrlLabel": { "message": "PHP Server URL:" }, + "phpServerUrlHint": { "message": "Enter the full URL of the PHP script on your server that will receive the M3U file." }, + "sendM3uToServerButton": { "message": "Send Loaded M3U List Now" }, + "sendM3uToServerHint": { "message": "The currently loaded M3U list in the player will be sent to the specified server." }, + "phpScriptGeneratorTitle": { "message": "PHP Script Generator (receive_m3u.php)" }, + "phpScriptGeneratorHint": { "message": "Use this generator to create a custom PHP script for your server. Configure the options and then copy the generated code." }, + "securityOptions": { "message": "Security Options" }, + "requireSecretKeyLabel": { "message": "Require secret key" }, + "keyLabel": { "message": "Key" }, + "restrictToExtensionIdLabel": { "message": "Restrict to this Extension ID" }, + "fileOptions": { "message": "File Options" }, + "savePathLabel": { "message": "Save path on server" }, + "savePathHint": { "message": "Absolute path. If left empty, saves in the same directory as the script." }, + "filenameLabel": { "message": "Filename:" }, + "keepOriginalFilenameLabel": { "message": "Keep original filename (sanitized)" }, + "useFixedFilenameLabel": { "message": "Use fixed filename:" }, + "addTimestampLabel": { "message": "Add timestamp to filename" }, + "overwriteLabel": { "message": "Overwrite if file already exists" }, + "generatedScriptLabel": { "message": "Generated Script" }, + "generateScriptButton": { "message": "Generate Script" }, + "copyScriptButton": { "message": "Copy Script" }, + "dataManagementTitle": { "message": "Application Data Management" }, + "exportSettingsButton": { "message": "Export Settings" }, + "importSettingsButton": { "message": "Import Settings" }, + "clearCacheButton": { "message": "Clear Cache & Local Data" }, + "clearCacheHint": { "message": "This deletes: history, favorites, saved lists, Xtream servers, XCodec panels, EPG, DAZN token, and Movistar tokens. The page will reload." }, + "settingsSaveAndApply": { "message": "Save and Apply Settings" }, + "settingsCancel": { "message": "Cancel" } +} \ No newline at end of file diff --git a/_locales/es/messages.json b/_locales/es/messages.json new file mode 100644 index 0000000..dd19f2c --- /dev/null +++ b/_locales/es/messages.json @@ -0,0 +1,334 @@ +{ + "pageTitle": { "message": "DRM Player | Player Avanzado" }, + "appName": { "message": "DRM Player" }, + "filterGroupsLabel": { "message": "Filtrar Grupos" }, + "allGroupsOption": { "message": "📂 Todos los grupos" }, + "groupsLabel": { "message": "Grupos" }, + "allGroupsListItem": { "message": "Todos los Grupos" }, + "searchPlaceholder": { "message": "Buscar canales..." }, + "advancedEditorButton": { "message": "Editor" }, + "providersButton": { "message": "Proveedores" }, + "listManagementButton": { "message": "Listas" }, + "loadListsButton": { "message": "Cargar Listas" }, + "saveListsButton": { "message": "Guardar Listas" }, + "downloadM3UButton": { "message": "Descargar M3U" }, + "epgButton": { "message": "EPG" }, + "settingsButton": { "message": "Ajustes" }, + "loadUrlButton": { "message": "Cargar URL" }, + "loadFileInputTitle": { "message": "Seleccionar archivo M3U local" }, + "allChannelsTab": { "message": "Todos" }, + "favoritesTab": { "message": "Favoritos" }, + "historyTab": { "message": "Historial" }, + "backButton": { "message": "Volver" }, + "availableChannelsTitle": { "message": "Canales Disponibles" }, + "paginationPrev": { "message": "Ant." }, + "paginationNext": { "message": "Sig." }, + "playerTitle": { "message": "Reproductor" }, + "minimizeButton": { "message": "Minimizar" }, + "closeButton": { "message": "Cerrar" }, + "nowLabel": { "message": "Ahora:" }, + "nextLabel": { "message": "Siguiente:" }, + "channelListTitle": { "message": "Lista de Canales" }, + "advancedEditorTitle": { "message": "Editor Avanzado M3U" }, + "noFileLoaded": { "message": "Ningún archivo cargado" }, + "searchInListPlaceholder": { "message": "Buscar en la lista..." }, + "allGroups": { "message": "Todos los Grupos" }, + "deleteSelected": { "message": "Eliminar Sel." }, + "clearSelection": { "message": "Limpiar Sel." }, + "multiEdit": { "message": "Multi-Editar" }, + "logoHeader": { "message": "Logo" }, + "nameHeader": { "message": "Nombre" }, + "urlHeader": { "message": "URL" }, + "epgIdHeader": { "message": "EPG ID" }, + "channelNumHeader": { "message": "Num" }, + "actionsHeader": { "message": "Acciones" }, + "editorPlaceholder": { "message": "Selecciona un canal para editar sus detalles." }, + "channelEditorTitle": { "message": "Editor de Canal" }, + "logoPreviewAlt": { "message": "Vista previa del logo" }, + "channelNameLabel": { "message": "Nombre del Canal" }, + "epgIdLabel": { "message": "EPG ID (tvg-id)" }, + "channelNumLabel": { "message": "Núm. Canal (ch-number)" }, + "logoLabel": { "message": "Logo (tvg-logo)" }, + "streamUrlLabel": { "message": "URL del Stream" }, + "groupLabel": { "message": "Grupo (group-title)" }, + "favoriteLabel": { "message": "Favorito" }, + "hideChannelLabel": { "message": "Ocultar canal" }, + "advancedSettingsDRM": { "message": "Ajustes Avanzados / DRM" }, + "licenseTypeLabel": { "message": "Tipo Licencia DRM (license_type)" }, + "licenseKeyLabel": { "message": "Clave/URL Licencia DRM (license_key)" }, + "streamHeadersLabel": { "message": "Cabeceras Stream DRM (stream_headers)" }, + "vlcUserAgentLabel": { "message": "VLC User-Agent (#EXTVLCOPT:http-user-agent)" }, + "testButton": { "message": "Probar" }, + "deleteButton": { "message": "Eliminar" }, + "saveButton": { "message": "Guardar" }, + "closeEditorButton": { "message": "Cerrar Editor" }, + "applyChangesAndCloseButton": { "message": "Aplicar Cambios y Cerrar" }, + "multiEditTitle": { "message": "Edición Múltiple de Canales" }, + "multiEditDescription": { "message": "Aplica cambios a todos los {count} canales seleccionados. Solo los campos activados se modificarán." }, + "changeGroupLabel": { "message": "Cambiar Grupo" }, + "newGroupNamePlaceholder": { "message": "Nuevo nombre de grupo..." }, + "modifyFavoriteLabel": { "message": "Modificar Favorito" }, + "addToFavoritesOption": { "message": "Añadir a Favoritos" }, + "removeFromFavoritesOption": { "message": "Quitar de Favoritos" }, + "modifyVisibilityLabel": { "message": "Modificar Visibilidad" }, + "hideChannelsOption": { "message": "Ocultar Canales" }, + "showChannelsOption": { "message": "Mostrar Canales" }, + "headersAndDRM": { "message": "Cabeceras y DRM" }, + "setUserAgentLabel": { "message": "Establecer User-Agent (VLC)" }, + "userAgentPlaceholder": { "message": "User-Agent para #EXTVLCOPT..." }, + "setStreamHeadersLabel": { "message": "Añadir/Sobrescribir Cabeceras de Stream (Kodi)" }, + "streamHeadersPlaceholder": { "message": "key1=value1|key2=value2..." }, + "appendHeadersOption": { "message": "Añadir/Actualizar Cabeceras" }, + "replaceHeadersOption": { "message": "Reemplazar Todas las Cabeceras" }, + "applyChangesButton": { "message": "Aplicar Cambios" }, + "saveM3UModalTitle": { "message": "Guardar Lista M3U Actual" }, + "saveM3UModalDescription": { "message": "Introduce un nombre para guardar la lista M3U cargada actualmente en la base de datos local de la extensión." }, + "listNameLabel": { "message": "Nombre de la Lista:" }, + "listNamePlaceholder": { "message": "Ej: MiListaFavorita_TV" }, + "saveListButton": { "message": "Guardar Lista" }, + "daznTokenModalTitle": { "message": "Token de Autenticación DAZN Requerido" }, + "daznTokenModalDescription": { "message": "Para actualizar los canales de DAZN, por favor, introduce tu Bearer Token completo de DAZN." }, + "daznTokenModalHint": { "message": "Este token se puede obtener de las herramientas de desarrollador de tu navegador al inspeccionar las solicitudes de red mientras DAZN está activo y logueado." }, + "daznTokenLabel": { "message": "Token de DAZN (Bearer):" }, + "daznTokenPlaceholder": { "message": "Pega aquí tu Bearer token completo..." }, + "rememberTokenLabel": { "message": "Recordar este token (se guardará localmente en los ajustes)" }, + "submitTokenButton": { "message": "Enviar Token" }, + "loadFromDBModalTitle": { "message": "Listas Guardadas" }, + "loadingLists": { "message": "Cargando listas..." }, + "loadButton": { "message": "Cargar" }, + "epgModalTitle": { "message": "Guía de Programación (EPG)" }, + "epgUrlPlaceholder": { "message": "📅 URL del archivo XMLTV EPG" }, + "loadEpgButton": { "message": "Cargar/Actualizar EPG" }, + "movistarVODModalTitle": { "message": "Movistar+ VOD/Catchup" }, + "selectDateLabel": { "message": "Seleccionar Fecha:" }, + "loadEpgDayButton": { "message": "Cargar EPG Día" }, + "searchProgramPlaceholder": { "message": "Buscar programa..." }, + "allChannelsOption": { "message": "Todos los canales" }, + "allGenresOption": { "message": "Todos los géneros" }, + "noProgramsFound": { "message": "No se encontraron programas para la fecha/filtros seleccionados." }, + "pageInfo": { "message": "Página {currentPage} de {totalPages} ({totalItems} resultados)" }, + "previousButton": { "message": "Anterior" }, + "nextButton": { "message": "Siguiente" }, + "programDetailsTitle": { "message": "Detalles del Programa" }, + "playProgramButton": { "message": "Reproducir" }, + "addToListButton": { "message": "Añadir a Lista M3U" }, + "xtreamModalTitle": { "message": "Conexión a Servidor Xtream Codes" }, + "xtreamModalDescription": { "message": "Introduce los detalles de tu servidor Xtream. La URL M3U se generará automáticamente." }, + "xtreamServerNameLabel": { "message": "Nombre para Guardar (Opcional):" }, + "xtreamHostLabel": { "message": "Host del Servidor (ej: http://dominio.com:puerto):" }, + "xtreamUserLabel": { "message": "Usuario:" }, + "xtreamPasswordLabel": { "message": "Contraseña:" }, + "xtreamOutputTypeLabel": { "message": "Tipo de Salida Preferido:" }, + "xtreamM3uPlusOption": { "message": "M3U Plus (Recomendado)" }, + "xtreamTsOption": { "message": "TS" }, + "xtreamHlsOption": { "message": "HLS (m3u8)" }, + "xtreamOutputHint": { "message": "Afecta al formato de las URLs de los streams." }, + "xtreamContentToLoadLabel": { "message": "Contenido a Cargar:" }, + "xtreamLiveChannels": { "message": "Canales en Vivo" }, + "xtreamVod": { "message": "VOD (Películas)" }, + "xtreamSeries": { "message": "Series" }, + "xtreamFetchEpgLabel": { "message": "Intentar obtener EPG del servidor" }, + "xtreamForceGroupSelectionLabel": { "message": "Forzar selección de grupos" }, + "xtreamForceGroupSelectionHint": { "message": "Marca esto si quieres cambiar tu selección de grupos para este servidor." }, + "xtreamSavedServersLabel": { "message": "Servidores Guardados" }, + "xtreamNoSavedServers": { "message": "No hay servidores guardados." }, + "xtreamSaveConnectionButton": { "message": "Guardar Conexión Actual" }, + "xtreamConnectButton": { "message": "Conectar y Cargar" }, + "xtreamGroupSelectionTitle": { "message": "Seleccionar Grupos de Xtream" }, + "xtreamGroupSelectionDescription": { "message": "Selecciona los grupos de cada categoría que deseas cargar en la lista." }, + "xtreamLiveGroupsLabel": { "message": "Grupos en Vivo" }, + "xtreamVodGroupsLabel": { "message": "Grupos VOD" }, + "xtreamSeriesGroupsLabel": { "message": "Grupos Series" }, + "selectAll": { "message": "Todos" }, + "deselectAll": { "message": "Ninguno" }, + "loading": { "message": "Cargando..." }, + "loadSelectedButton": { "message": "Cargar Seleccionados" }, + "xcodecPanelsTitle": { "message": "Gestión de Paneles XCodec" }, + "xcodecPanelFormLabel": { "message": "Formulario del Panel" }, + "xcodecPanelNameLabel": { "message": "Nombre del Panel (Opcional):" }, + "xcodecServerUrlLabel": { "message": "URL del Servidor X-UI/XC:" }, + "xcodecApiTokenLabel": { "message": "Token API (si es requerido):" }, + "xcodecSavePanelButton": { "message": "Guardar Panel" }, + "xcodecClearFormButton": { "message": "Limpiar" }, + "xcodecSavedPanelsLabel": { "message": "Paneles Guardados" }, + "xcodecImportPresetButton": { "message": "Importar Paneles Predefinidos" }, + "xcodecNoSavedPanels": { "message": "No hay paneles guardados." }, + "xcodecProcessAllButton": { "message": "Procesar Todos" }, + "xcodecProcessFormButton": { "message": "Procesar Panel (Formulario)" }, + "xcodecPreviewTitle": { "message": "Previsualización Panel XCodec" }, + "xcodecPreviewStatsLoading": { "message": "Cargando estadísticas..." }, + "xcodecPanelGroupsLabel": { "message": "Grupos del Panel" }, + "xcodecSelectAllGroupsButton": { "message": "Seleccionar/Deseleccionar Todos los Grupos" }, + "xcodecChannelsInGroupLabel": { "message": "Canales en Grupo Seleccionado" }, + "xcodecSelectGroupHint": { "message": "Selecciona un grupo para ver los canales." }, + "xcodecSelectAllInGroupButton": { "message": "Seleccionar/Deseleccionar Todos en Grupo" }, + "xcodecAddSelectedButton": { "message": "Añadir Seleccionados" }, + "xcodecAddAllValidButton": { "message": "Añadir Todos los Válidos" }, + "settingsTitle": { "message": "Ajustes del Reproductor" }, + "settingsGeneralUITab": { "message": "General y UI" }, + "settingsPlayerTab": { "message": "Reproductor" }, + "settingsNetworkTab": { "message": "Red (Shaka)" }, + "settingsEpgTab": { "message": "EPG" }, + "settingsXCodecTab": { "message": "XCodec" }, + "settingsBarTvTab": { "message": "BarTV" }, + "settingsOrangeTvTab": { "message": "OrangeTV" }, + "settingsGlobalNetworkTab": { "message": "Red Global" }, + "settingsDaznTab": { "message": "DAZN" }, + "settingsMovistarTab": { "message": "Movistar+" }, + "settingsSendM3uTab": { "message": "Enviar M3U" }, + "settingsDataManagementTab": { "message": "Gestión de Datos" }, + "settingsUIAppearanceTitle": { "message": "Interfaz de Usuario y Apariencia" }, + "languageLabel": { "message": "Idioma (Language):" }, + "themeLabel": { "message": "Tema de Color:" }, + "greenTheme": { "message": "Verde (Predeterminado)" }, + "blueTheme": { "message": "Azul" }, + "purpleTheme": { "message": "Púrpura" }, + "orangeTheme": { "message": "Naranja" }, + "fontLabel": { "message": "Fuente Principal:" }, + "systemFont": { "message": "Sistema (Predeterminada)" }, + "sansSerifFont": { "message": "Sans-Serif Genérica" }, + "serifFont": { "message": "Serif Genérica" }, + "monospaceFont": { "message": "Monospace Genérica" }, + "cardSizeLabel": { "message": "Tamaño de Tarjetas de Canal:" }, + "channelsPerPageLabel": { "message": "Canales por Página:" }, + "storeLastM3ULabel": { "message": "Almacenar Última Lista M3U (<4MB)" }, + "backgroundAnimationLabel": { "message": "Animación de Fondo (Partículas)" }, + "particleOpacityLabel": { "message": "Opacidad de Partículas:" }, + "cardDisplaySettingsTitle": { "message": "Visualización en Tarjetas de Canal" }, + "logoAspectRatioLabel": { "message": "Ratio de Aspecto del Logo:" }, + "aspectRatio169": { "message": "16:9 (Panorámico)" }, + "aspectRatio43": { "message": "4:3 (Estándar)" }, + "aspectRatio11": { "message": "1:1 (Cuadrado)" }, + "aspectRatio21": { "message": "2:1 (Cinemático)" }, + "aspectRatioAuto": { "message": "Automático (Original del Contenedor)" }, + "showChannelNumberLabel": { "message": "Mostrar Número de Canal" }, + "showChannelGroupLabel": { "message": "Mostrar Grupo del Canal" }, + "showEpgInfoLabel": { "message": "Mostrar Información EPG (Ahora/Siguiente)" }, + "showFavButtonLabel": { "message": "Mostrar Botón de Favoritos" }, + "compactCardViewLabel": { "message": "Vista de tarjetas compacta" }, + "enableHoverPreviewLabel": { "message": "Habilitar previsualización al pasar el ratón" }, + "shakaPlayerSettingsTitle": { "message": "Configuración del Reproductor Shaka" }, + "persistentControlsLabel": { "message": "Controles del Reproductor Siempre Visibles" }, + "persistFiltersLabel": { "message": "Recordar Filtros entre sesiones" }, + "playerWindowOpacityLabel": { "message": "Transparencia de la Ventana del Reproductor:" }, + "playerBufferLabel": { "message": "Buffer del reproductor (segundos):" }, + "maxVideoHeightLabel": { "message": "Altura Máxima de Video Preferida (ABR):" }, + "noRestrictionOption": { "message": "Automático (Sin restricción)" }, + "preferredAudioLabel": { "message": "Audio Preferido:" }, + "preferredSubtitlesLabel": { "message": "Subtítulos Preferidos:" }, + "lowLatencyModeLabel": { "message": "Modo Baja Latencia (Streaming en Vivo)" }, + "liveCatchUpModeLabel": { "message": "Sincronización Agresiva en Vivo (Live Catch-up)" }, + "enableAbrLabel": { "message": "Habilitar ABR (Adaptación de Bitrate)" }, + "abrInitialBandwidthLabel": { "message": "Ancho de banda inicial ABR (Kbps):" }, + "jumpLargeGapsLabel": { "message": "Saltar Huecos Grandes en Stream (Live)" }, + "dashPresentationDelayLabel": { "message": "Retraso Presentación DASH (segundos):" }, + "dashPresentationDelayHint": { "message": "Para streams DASH. Define cuánto detrás del borde \"en vivo\" comenzará la reproducción." }, + "avSyncThresholdLabel": { "message": "Umbral Sincronización A/V (segundos):" }, + "avSyncThresholdHint": { "message": "Diferencia máxima permitida entre audio y video antes de intentar una corrección." }, + "networkRetrySettingsTitle": { "message": "Configuración de Reintentos de Red (Shaka)" }, + "manifestMaxRetriesLabel": { "message": "Máx. Reintentos Manifiesto:" }, + "manifestTimeoutLabel": { "message": "Timeout Manifiesto (ms):" }, + "segmentMaxRetriesLabel": { "message": "Máx. Reintentos Segmento:" }, + "segmentTimeoutLabel": { "message": "Timeout Segmento (ms):" }, + "epgSettingsTitle": { "message": "Guía de Programación (EPG)" }, + "defaultEpgUrlLabel": { "message": "URL EPG XMLTV por Defecto (Modal EPG):" }, + "enableEpgNameMatchingLabel": { "message": "Habilitar Coincidencia EPG (XMLTV) por Nombre" }, + "epgNameMatchingHint": { "message": "Si tvg-id falla, intenta por nombre (menos preciso)." }, + "epgNameMatchThresholdLabel": { "message": "Umbral Similitud Nombre EPG (XMLTV):" }, + "epgDensityLabel": { "message": "Densidad Visual de la Guía EPG:" }, + "epgDensityHint": { "message": "Píxeles por hora en la línea de tiempo. Más alto = más ancho, más detalle. Más bajo = más compacto." }, + "useMovistarVodAsEpgLabel": { "message": "Usar datos VOD de Movistar+ como EPG (experimental)" }, + "useMovistarVodAsEpgHint": { "message": "Integra la EPG del día actual de Movistar VOD para los canales de Movistar en tu lista." }, + "rematchEpgNowButton": { "message": "Re-emparejar EPG Ahora" }, + "rematchEpgHint": { "message": "Necesita una lista M3U y un EPG cargados." }, + "xcodecSettingsTitle": { "message": "Configuración de Paneles XCodec" }, + "corsProxyUrlLabel": { "message": "URL del Proxy CORS (Opcional):" }, + "corsProxyUrlHint": { "message": "Introduce la URL de un proxy CORS si los paneles XCodec tienen problemas de CORS. La URL del panel se añadirá al final (ej: `proxy.com/?url=http://panel.com`). Déjalo vacío para llamadas directas." }, + "ignorePanelsOverStreamsLabel": { "message": "Ignorar Paneles con más de X Streams (0 para deshabilitar):" }, + "ignorePanelsOverStreamsHint": { "message": "Si un panel tiene más streams que este valor, no se procesará al añadir directamente (no afecta a la previsualización)." }, + "batchSizeLabel": { "message": "Tamaño de Lote (Batch) para Configs:" }, + "batchSizeHint": { "message": "Número de configuraciones de stream a pedir simultáneamente." }, + "apiTimeoutLabel": { "message": "Timeout por Petición API (ms):" }, + "apiTimeoutHint": { "message": "Tiempo máximo de espera para cada llamada a la API del panel." }, + "barTvCredentialsTitle": { "message": "Credenciales de BarTV" }, + "emailLabel": { "message": "Email:" }, + "passwordLabel": { "message": "Contraseña:" }, + "barTvCredentialsHint": { "message": "Introduce tus credenciales de BarTV para poder cargar los canales." }, + "orangeTvCredentialsTitle": { "message": "Credenciales de OrangeTV" }, + "userLabel": { "message": "Usuario:" }, + "orangeTvGroupSelectionTitle": { "message": "Selección de Grupos de Canales OrangeTV" }, + "orangeTvGroupSelectionHint": { "message": "Si no se selecciona ningún grupo, se incluirán todos los grupos disponibles al cargar canales de OrangeTV." }, + "globalNetworkSettingsTitle": { "message": "Configuración Global de Red" }, + "globalUserAgentLabel": { "message": "User-Agent Global (Opcional):" }, + "globalUserAgentHint": { "message": "Aplicable si el canal no define uno propio vía KODIPROP, EXTVLCOPT o EXTHTTP." }, + "globalReferrerLabel": { "message": "Referrer Global (Opcional):" }, + "globalReferrerHint": { "message": "Aplicable si el canal no define uno propio." }, + "additionalGlobalHeadersLabel": { "message": "Cabeceras Adicionales Globales (JSON):" }, + "additionalGlobalHeadersHint": { "message": "Se fusionarán con cabeceras del canal (canal tiene precedencia)." }, + "daznSettingsTitle": { "message": "Configuración de DAZN" }, + "daznAuthTokenLabel": { "message": "Token de Autenticación DAZN:" }, + "daznAuthTokenHint": { "message": "Este token se usará para obtener y actualizar los canales de DAZN en tu lista M3U. Se guarda de forma segura." }, + "movistarManagementTitle": { "message": "Gestión de Movistar+" }, + "movistarManagementDescription": { "message": "Esta sección permite gestionar la autenticación y los tokens para Movistar+." }, + "movistarLoginTitle": { "message": "Iniciar Sesión / Obtener Tokens" }, + "movistarLoginButton": { "message": "Iniciar Sesión y Obtener Tokens" }, + "movistarSavedLongTokensTitle": { "message": "Tokens de Sesión Larga Guardados" }, + "movistarTokenIdHeader": { "message": "ID" }, + "movistarAccountHeader": { "message": "Cuenta" }, + "movistarDeviceIdHeader": { "message": "Device ID" }, + "movistarExpiresHeader": { "message": "Expira" }, + "movistarStatusHeader": { "message": "Estado" }, + "movistarActionHeader": { "message": "Acción" }, + "movistarLoading": { "message": "Cargando..." }, + "movistarValidateAllButton": { "message": "Validar Todos" }, + "movistarDeleteExpiredButton": { "message": "Elim. Expirados" }, + "movistarAddJwtLabel": { "message": "Añadir JWT:" }, + "movistarDeviceIdLabel": { "message": "Device ID:" }, + "movistarAddManualButton": { "message": "Añadir Token Manualmente" }, + "movistarDeviceManagementTitle": { "message": "Gestión de Dispositivos para Token:" }, + "movistarLoadDevicesHint": { "message": "Carga los dispositivos para el token seleccionado arriba." }, + "movistarLoadDevicesButton": { "message": "Cargar Dispositivos" }, + "movistarAssociateDeviceButton": { "message": "Asociar Seleccionado" }, + "movistarRegisterNewDeviceButton": { "message": "Registrar Nuevo" }, + "movistarCurrentCdnTokenTitle": { "message": "Token Corto (CDN) Actual" }, + "movistarCdnTokenLabel": { "message": "Token CDN (X-TCDN-Token):" }, + "movistarCdnExpiresLabel": { "message": "Expira:" }, + "movistarRefreshCdnButton": { "message": "Refrescar Token CDN" }, + "movistarCopyCdnButton": { "message": "Copiar CDN" }, + "movistarApplyToChannelsButton": { "message": "Aplicar a Canales" }, + "movistarVodCacheManagementTitle": { "message": "Gestión de Caché VOD Movistar+" }, + "movistarVodCacheSavedDaysLabel": { "message": "Días de datos VOD guardados:" }, + "movistarVodCacheEstimatedSizeLabel": { "message": "Tamaño estimado de la caché:" }, + "movistarVodCacheDaysToKeepLabel": { "message": "Días a mantener en caché (1-90):" }, + "movistarClearVodCacheButton": { "message": "Limpiar Caché VOD Movistar+ Ahora" }, + "movistarLogLabel": { "message": "Registro de Acciones:" }, + "sendM3uToServerTitle": { "message": "Enviar Lista M3U a Servidor" }, + "phpServerUrlLabel": { "message": "URL del Servidor PHP:" }, + "phpServerUrlHint": { "message": "Introduce la URL completa del script PHP en tu servidor que recibirá el archivo M3U." }, + "sendM3uToServerButton": { "message": "Enviar Lista M3U Cargada Ahora" }, + "sendM3uToServerHint": { "message": "La lista M3U actualmente cargada en el reproductor se enviará al servidor especificado." }, + "phpScriptGeneratorTitle": { "message": "Generador de Script PHP (receive_m3u.php)" }, + "phpScriptGeneratorHint": { "message": "Usa este generador para crear un script PHP personalizado para tu servidor. Configura las opciones y luego copia el código generado." }, + "securityOptions": { "message": "Opciones de Seguridad" }, + "requireSecretKeyLabel": { "message": "Requerir clave secreta" }, + "keyLabel": { "message": "Clave" }, + "restrictToExtensionIdLabel": { "message": "Restringir a esta ID de Extensión" }, + "fileOptions": { "message": "Opciones de Archivo" }, + "savePathLabel": { "message": "Ruta de guardado en servidor" }, + "savePathHint": { "message": "Ruta absoluta. Si se deja vacía, se guarda en el mismo directorio que el script." }, + "filenameLabel": { "message": "Nombre del archivo:" }, + "keepOriginalFilenameLabel": { "message": "Mantener nombre original (sanitizado)" }, + "useFixedFilenameLabel": { "message": "Usar nombre fijo:" }, + "addTimestampLabel": { "message": "Añadir fecha/hora al nombre del archivo" }, + "overwriteLabel": { "message": "Sobrescribir si el archivo ya existe" }, + "generatedScriptLabel": { "message": "Script Generado" }, + "generateScriptButton": { "message": "Generar Script" }, + "copyScriptButton": { "message": "Copiar Script" }, + "dataManagementTitle": { "message": "Gestión de Datos de la Aplicación" }, + "exportSettingsButton": { "message": "Exportar Ajustes" }, + "importSettingsButton": { "message": "Importar Ajustes" }, + "clearCacheButton": { "message": "Limpiar Caché y Datos Locales" }, + "clearCacheHint": { "message": "Esto borra: historial, favoritos, listas guardadas, servidores Xtream, paneles XCodec, EPG, token DAZN y tokens Movistar. La página se recargará." }, + "settingsSaveAndApply": { "message": "Guardar y Aplicar Ajustes" }, + "settingsCancel": { "message": "Cancelar" } +} \ No newline at end of file diff --git a/atresplayer_handler.js b/atresplayer_handler.js new file mode 100644 index 0000000..10da224 --- /dev/null +++ b/atresplayer_handler.js @@ -0,0 +1,189 @@ +const ATRESPLAYER_USER_AGENT = 'Mozilla/5.0 (SMART-TV; Linux; Tizen 4.0) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.1 Chrome/56.0.2924.0 TV Safari/537.36'; +const ATRESPLAYER_INITIAL_URL = "https://api.atresplayer.com/client/v1/row/live/5a6b32667ed1a834493ec03b"; +const ATRESPLAYER_API_HOST = "api.atresplayer.com"; + +async function setGlobalAtresplayerHeaders() { + if (!chrome.runtime?.id) return false; + const headersToSet = [{ header: 'User-Agent', value: ATRESPLAYER_USER_AGENT }]; + try { + await new Promise((resolve, reject) => { + chrome.runtime.sendMessage({ + cmd: "updateHeadersRules", + requestHeaders: headersToSet, + urlFilter: `*://${ATRESPLAYER_API_HOST}/*`, + initiatorDomain: chrome.runtime.id + }, (response) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError); + } else if (response && response.success) { + resolve(response); + } else { + reject(response ? response.error : 'Fallo al actualizar reglas DNR para Atresplayer.'); + } + }); + }); + await new Promise(resolve => setTimeout(resolve, 200)); + return true; + } catch (error) { + console.error("[Atresplayer] Error estableciendo cabeceras dinámicas globales:", error); + if (typeof showNotification === 'function') showNotification("Error configurando cabeceras de red para Atresplayer.", "error"); + return false; + } +} + +async function clearGlobalAtresplayerHeaders() { + if (!chrome.runtime?.id) return; + try { + await new Promise((resolve, reject) => { + chrome.runtime.sendMessage({ cmd: "clearAllDnrHeaders" }, (response) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError); + } else if (response && response.success) { + resolve(response); + } else { + reject(response ? response.error : 'Fallo al limpiar reglas DNR tras Atresplayer.'); + } + }); + }); + } catch (error) { + console.error("[Atresplayer] Error limpiando cabeceras dinámicas globales:", error); + } +} + +async function fetchAtresplayerJSON(url) { + try { + const response = await fetch(url, { + method: 'GET', + headers: { 'Accept': 'application/json' } + }); + if (!response.ok) { + let errorBody = ''; + try { errorBody = await response.text(); } catch (e) {} + console.error(`Error fetch Atresplayer JSON (${url}): ${response.status} ${response.statusText}`, errorBody.substring(0,200)); + throw new Error(`Error HTTP ${response.status} para ${url}. ${errorBody.substring(0,100)}`); + } + return await response.json(); + } catch (error) { + console.error(`Excepción fetch/parse Atresplayer JSON (${url}):`, error); + throw error; + } +} + +async function getChannelDetails(item) { + try { + const channelDetail = await fetchAtresplayerJSON(item.link.href); + if (channelDetail && channelDetail.urlVideo) { + const urlParts = item.link.url.split('/'); + const extractedChannelId = urlParts.length > 2 ? urlParts[urlParts.length - 2] : null; + let logoUrl = item.logoURL || ''; + if (!logoUrl && item.image && item.image.images) { + if (item.image.images.VERTICAL && item.image.images.VERTICAL.path) { + logoUrl = item.image.images.VERTICAL.path + "ws_275_403.png"; + } else if (item.image.images.HORIZONTAL && item.image.images.HORIZONTAL.path) { + logoUrl = item.image.images.HORIZONTAL.path + "ws_378_213.png"; + } + } + return { + title: item.title || 'Desconocido', + tvgId: item.mainChannel || item.contentId || (extractedChannelId ? `atres.${extractedChannelId}` : `atres.${item.title.replace(/\s+/g, '_').toLowerCase()}`), + logo: logoUrl, + description: item.description || '', + urlVideoPage: channelDetail.urlVideo, + channelKey: extractedChannelId || item.title.toLowerCase().replace(/[^a-z0-9]/g,'') + }; + } + } catch (e) { + console.warn(`Error obteniendo detalles para el canal "${item.title || 'Desconocido'}":`, e.message); + } + return null; +} + +async function getM3u8Source(channelInfo) { + if (!channelInfo || !channelInfo.urlVideoPage) return null; + try { + const videoSourceData = await fetchAtresplayerJSON(channelInfo.urlVideoPage); + if (videoSourceData && videoSourceData.sourcesLive && Array.isArray(videoSourceData.sourcesLive)) { + const hlsSource = videoSourceData.sourcesLive.find( + source => source.type === 'application/hls+legacy' && source.src + ); + if (hlsSource) { + return { ...channelInfo, m3u8Url: hlsSource.src }; + } + } + } catch (e) { + console.warn(`Error obteniendo fuente M3U8 para "${channelInfo.title}":`, e.message); + } + return null; +} + + +async function generateM3UAtresplayer() { + if (typeof showLoading === 'function') showLoading(true, "Cargando canales de Atresplayer..."); + const m3uLines = ["#EXTM3U"]; + let headersSetSuccessfully = false; + const atresSourceName = "Atresplayer"; + + try { + headersSetSuccessfully = await setGlobalAtresplayerHeaders(); + if (!headersSetSuccessfully) { + throw new Error("No se pudieron establecer las cabeceras globales para Atresplayer."); + } + + const initialData = await fetchAtresplayerJSON(ATRESPLAYER_INITIAL_URL); + if (!initialData || !initialData.itemRows || !Array.isArray(initialData.itemRows)) { + throw new Error("Respuesta inicial de Atresplayer inválida o vacía."); + } + + const liveChannelItems = initialData.itemRows.filter( + item => item.link && item.link.pageType === 'LIVE_CHANNEL' && item.link.href + ); + + if (liveChannelItems.length === 0) { + throw new Error("No se encontraron items de canal en vivo en la respuesta inicial."); + } + + if (typeof showLoading === 'function') showLoading(true, `Obteniendo detalles de ${liveChannelItems.length} canales...`); + + const channelDetailsPromises = liveChannelItems.map(item => getChannelDetails(item)); + const channelsWithDetails = (await Promise.all(channelDetailsPromises)).filter(Boolean); + + if (channelsWithDetails.length === 0) { + throw new Error("No se pudieron obtener detalles para ningún canal."); + } + if (typeof showLoading === 'function') showLoading(true, `Obteniendo URLs M3U8 para ${channelsWithDetails.length} canales...`); + + const m3u8SrcPromises = channelsWithDetails.map(channelInfo => getM3u8Source(channelInfo)); + const finalChannelData = (await Promise.all(m3u8SrcPromises)).filter(Boolean); + + if (finalChannelData.length === 0) { + throw new Error("No se pudieron obtener URLs M3U8 para ningún canal."); + } + + finalChannelData.forEach(ch => { + m3uLines.push(`#EXTINF:-1 tvg-id="${ch.tvgId}" tvg-logo="${ch.logo}" group-title="Atresplayer",${ch.title}`); + m3uLines.push(ch.m3u8Url); + }); + + const m3uString = m3uLines.join("\n") + "\n"; + + if (typeof removeChannelsBySourceOrigin === 'function') { + removeChannelsBySourceOrigin(atresSourceName); + } + + if (typeof appendM3UContent === 'function') { + appendM3UContent(m3uString, atresSourceName); + } else { + console.error("appendM3UContent no encontrada. Usando fallback processM3UContent."); + processM3UContent(m3uString, atresSourceName, true); + } + + } catch (error) { + console.error("Error generando M3U de Atresplayer:", error); + if (typeof showNotification === 'function') showNotification(`Error cargando Atresplayer: ${error.message}`, 'error'); + } finally { + if (headersSetSuccessfully) { + await clearGlobalAtresplayerHeaders(); + } + if (typeof showLoading === 'function') showLoading(false); + } +} \ No newline at end of file diff --git a/background.js b/background.js new file mode 100644 index 0000000..970b8f6 --- /dev/null +++ b/background.js @@ -0,0 +1,115 @@ +const DNR_RULE_ID_HEADERS = 1; + +async function clearDnrRules(ruleIdsToRemove) { + try { + const existingRules = await chrome.declarativeNetRequest.getDynamicRules(); + const existingRuleIds = existingRules.map(rule => rule.id); + const finalRuleIdsToRemove = ruleIdsToRemove.filter(id => existingRuleIds.includes(id)); + + if (finalRuleIdsToRemove.length > 0) { + await chrome.declarativeNetRequest.updateDynamicRules({ + removeRuleIds: finalRuleIdsToRemove + }); + } + } catch (e) { + if (e.message && !e.message.toLowerCase().includes("rule with id") && !e.message.toLowerCase().includes("not found")) { + console.warn("[DNR Background] Error al limpiar reglas DNR:", e.message); + } + } +} + +chrome.runtime.onStartup.addListener(async () => { + await clearDnrRules([DNR_RULE_ID_HEADERS]); +}); + +chrome.runtime.onInstalled.addListener(async (details) => { + await clearDnrRules([DNR_RULE_ID_HEADERS]); + if (details.reason === chrome.runtime.OnInstalledReason.INSTALL) { + const playerUrl = chrome.runtime.getURL("player.html"); + chrome.tabs.create({ url: playerUrl }); + } +}); + +chrome.action.onClicked.addListener((tab) => { + const playerUrl = chrome.runtime.getURL("player.html"); + chrome.tabs.query({ url: playerUrl }, (tabs) => { + if (tabs.length > 0) { + chrome.tabs.update(tabs[0].id, { active: true }); + if (tabs[0].windowId) { + chrome.windows.update(tabs[0].windowId, { focused: true }); + } + } else { + chrome.tabs.create({ url: playerUrl }); + } + }); +}); + +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + if (request.cmd === "updateHeadersRules") { + const headersToSet = request.requestHeaders || []; + let effectiveUrlFilter = "*://*/*"; + if (request.urlFilter) { + effectiveUrlFilter = request.urlFilter; + } + + let initiatorDomainsCondition = {}; + if (request.initiatorDomain) { + initiatorDomainsCondition.initiatorDomains = [request.initiatorDomain]; + } + + clearDnrRules([DNR_RULE_ID_HEADERS]).then(async () => { + if (headersToSet.length > 0) { + const newRequestHeadersDNR = headersToSet.map(h => ({ + header: h.header, + operation: chrome.declarativeNetRequest.HeaderOperation.SET, + value: String(h.value) + })); + + const newRuleCondition = { + urlFilter: effectiveUrlFilter, + resourceTypes: Object.values(chrome.declarativeNetRequest.ResourceType) + }; + + if (initiatorDomainsCondition.initiatorDomains && initiatorDomainsCondition.initiatorDomains.length > 0) { + newRuleCondition.initiatorDomains = initiatorDomainsCondition.initiatorDomains; + } + + const newRule = { + id: DNR_RULE_ID_HEADERS, + priority: 1, + action: { + type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS, + requestHeaders: newRequestHeadersDNR + }, + condition: newRuleCondition + }; + chrome.declarativeNetRequest.updateDynamicRules({ + addRules: [newRule] + }, async () => { + if (chrome.runtime.lastError) { + sendResponse({ success: false, error: chrome.runtime.lastError.message }); + } else { + sendResponse({ success: true }); + } + }); + } else { + sendResponse({ success: true, message: "No hay cabeceras para aplicar, solo se limpiaron reglas." }); + } + }).catch(error => { + sendResponse({ success: false, error: "Error al limpiar reglas previas: " + error.message }); + }); + return true; + } + + if (request.cmd === "clearAllDnrHeaders") { + clearDnrRules([DNR_RULE_ID_HEADERS]) + .then(async () => { + sendResponse({ success: true, message: "Reglas DNR limpiadas." }); + }) + .catch(error => { + sendResponse({ success: false, error: "Error limpiando reglas: " + error.message }); + }); + return true; + } + return false; +}); \ No newline at end of file diff --git a/bartv_handler.js b/bartv_handler.js new file mode 100644 index 0000000..b38d0d7 --- /dev/null +++ b/bartv_handler.js @@ -0,0 +1,234 @@ +const BARTV_API_HOST = "core.bartv.es"; +const BARTV_USER_AGENT = "Mozilla/5.0 (SMART-TV; Linux; Tizen 4.0) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.1 Chrome/56.0.2924.0 TV Safari/537.36"; +const BARTV_ORIGIN = "https://samsung.bartv.es"; +const BARTV_REFERER = "https://samsung.bartv.es/"; +const BARTV_LOGIN_URL = "https://core.bartv.es/v1/auth/login?partner=bares"; +const BARTV_MEDIA_URL_TEMPLATE = "https://core.bartv.es/v1/media/{mediaId}?drm=widevine&token={token}&device=tv&appv=311&ll=true&partner=bares"; + +const CHANNEL_NAMES_BARTV = { + "24h-live": {"nombre": "LaLiga TV BAR", "logo": "https://www.movistarplus.es/recorte/m-NEO/canal/LIGBAR.png"}, + "ppv-02": {"nombre": "LaLiga TV BAR 2", "logo": "https://www.movistarplus.es/recorte/m-NEO/canal/LIGBA1.png"}, + "ppv-03": {"nombre": "LaLiga TV BAR 3", "logo": "https://www.movistarplus.es/recorte/m-NEO/canal/LIGBA2.png"}, + "ppv-04": {"nombre": "LALIGA +", "logo": "https://ver.clictv.es/RTEFacade/images/attachments/LALIGA_PLUS_BARES.png"}, + "24h-live-golstadium": {"nombre": "GOLSTADIUM", "logo": "https://pbs.twimg.com/profile_images/1814029026840793088/GPf672XK_400x400.jpg"}, + "24h-live-gol": {"nombre": "GOLPLAY", "logo": "https://storage.googleapis.com/laligatvbar/assets/img/taquillas/bg-gol-black.jpg"}, + "smb-24h": {"nombre": "LALIGA TV HYPERMOTION", "logo": "https://estatico.emisiondof6.com/recorte/m-NEONEGR/canal/MLIGS"}, + "smb-02": {"nombre": "LALIGA TV HYPERMOTION 2", "logo": "https://estatico.emisiondof6.com/recorte/m-NEONEGR/canal/MLIGS2"}, + "smb-03": {"nombre": "LALIGA TV HYPERMOTION 3", "logo": "https://estatico.emisiondof6.com/recorte/m-NEONEGR/canal/MLIGS3"}, + "dazn-00": {"nombre": "DAZN F1", "logo": "https://ver.clictv.es/RTEFacade/images/attachments/DAZN F1.png"}, + "dazn-01": {"nombre": "DAZN 1", "logo": "https://ver.clictv.es/RTEFacade/images/attachments/DAZN1.png"}, + "dazn-02": {"nombre": "DAZN 2", "logo": "https://ver.clictv.es/RTEFacade/images/attachments/DAZN2.png"}, + "euro-01": {"nombre": "EUROSPORT 1", "logo": "https://storage.googleapis.com/laligatvbar/assets/img/taquillas/eurosport-1.jpg"}, + "euro-02": {"nombre": "EUROSPORT 2", "logo": "https://storage.googleapis.com/laligatvbar/assets/img/taquillas/eurosport-2.jpg"}, +}; + +async function setDynamicHeadersBarTv(specificHeadersArray) { + if (!chrome.runtime?.id) return false; + try { + await new Promise((resolve, reject) => { + chrome.runtime.sendMessage({ + cmd: "updateHeadersRules", + requestHeaders: specificHeadersArray, + urlFilter: `*://${BARTV_API_HOST}/*`, + initiatorDomain: chrome.runtime.id + }, (response) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError); + } else if (response && response.success) { + resolve(response); + } else { + reject(response ? response.error : 'Fallo al actualizar reglas DNR para BarTV.'); + } + }); + }); + await new Promise(resolve => setTimeout(resolve, 200)); + return true; + } catch (error) { + console.error("[BarTV] Error estableciendo cabeceras dinámicas globales:", error); + if (typeof showNotification === 'function') showNotification("Error configurando cabeceras de red para BarTV.", "error"); + return false; + } +} + +async function clearDynamicHeadersBarTv() { + if (!chrome.runtime?.id) return; + try { + await new Promise((resolve, reject) => { + chrome.runtime.sendMessage({ cmd: "clearAllDnrHeaders" }, (response) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError); + } else if (response && response.success) { + resolve(response); + } else { + reject(response ? response.error : 'Fallo al limpiar reglas DNR tras BarTV.'); + } + }); + }); + } catch (error) { + console.error("[BarTV] Error limpiando cabeceras dinámicas globales:", error); + } +} + +async function loginBarTv(email, password) { + const loginHeaders = { + "Content-Type": "application/json; charset=UTF-8", + "Host": BARTV_API_HOST, + "Origin": BARTV_ORIGIN, + "Referer": BARTV_REFERER, + "User-Agent": BARTV_USER_AGENT + }; + const dnrHeaders = Object.entries(loginHeaders).map(([key, value]) => ({ header: key, value: value })); + if (!await setDynamicHeadersBarTv(dnrHeaders)) { + throw new Error("No se pudieron establecer cabeceras para login BarTV."); + } + + try { + const response = await fetch(BARTV_LOGIN_URL, { + method: 'POST', + body: JSON.stringify({ email, password }) + }); + if (!response.ok) { + throw new Error(`HTTP error en login BarTV: ${response.status}`); + } + const data = await response.json(); + if (data && data.success && data.success.token) { + return data.success.token; + } else { + throw new Error("Login BarTV fallido o formato de respuesta inesperado."); + } + } finally { + } +} + +async function fetchBarTvChannelDetails(mediaId, token) { + const url = BARTV_MEDIA_URL_TEMPLATE.replace("{mediaId}", mediaId).replace("{token}", token); + const fetchHeaders = { + "Host": BARTV_API_HOST, + "Origin": BARTV_ORIGIN, + "Referer": BARTV_REFERER, + "User-Agent": BARTV_USER_AGENT + }; + const dnrHeaders = Object.entries(fetchHeaders).map(([key, value]) => ({ header: key, value: value })); + + if (!await setDynamicHeadersBarTv(dnrHeaders)) { + throw new Error(`No se pudieron establecer cabeceras para obtener detalles del canal ${mediaId}.`); + } + + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`HTTP error ${response.status} para ${mediaId}`); + } + const data = await response.json(); + if (data.manifestUrl && data.protData && data.protData.licenseUrl) { + return { + manifestUrl: data.manifestUrl, + licenseUrl: data.protData.licenseUrl + }; + } else { + throw new Error(`Datos incompletos para ${mediaId}`); + } + } finally { + } +} + + +async function generateM3uBarTv() { + if (typeof showLoading === 'function') showLoading(true, "Cargando canales de BarTV..."); + const barTvSourceName = "BarTV"; + let headersSetSuccessfully = false; + + try { + const email = userSettings.barTvEmail; + const password = userSettings.barTvPassword; + + if (!email || !password) { + if (typeof showNotification === 'function') showNotification("Credenciales de BarTV no configuradas en Ajustes.", "warning"); + throw new Error("Credenciales BarTV no configuradas."); + } + + const token = await loginBarTv(email, password); + headersSetSuccessfully = true; + if (typeof showNotification === 'function') showNotification("Login en BarTV exitoso.", "success"); + + const channelDetailsPromises = []; + for (const mediaId in CHANNEL_NAMES_BARTV) { + channelDetailsPromises.push( + fetchBarTvChannelDetails(mediaId, token) + .then(details => ({ ...details, mediaId, ...CHANNEL_NAMES_BARTV[mediaId] })) + .catch(e => { + console.warn(`Error obteniendo detalles para ${CHANNEL_NAMES_BARTV[mediaId].nombre}: ${e.message}`); + return null; + }) + ); + await new Promise(resolve => setTimeout(resolve, 300)); + } + + const allChannelData = (await Promise.all(channelDetailsPromises)).filter(Boolean); + + if (allChannelData.length === 0) { + throw new Error("No se pudieron obtener detalles para ningún canal de BarTV."); + } + if (typeof showNotification === 'function') showNotification(`Obtenidos ${allChannelData.length} canales de BarTV.`, "info"); + + + let globalLicenseJwt = null; + if (allChannelData.length > 0) { + try { + const lastLicenseUrl = allChannelData[allChannelData.length - 1].licenseUrl; + const parsedUrl = new URL(lastLicenseUrl); + globalLicenseJwt = parsedUrl.searchParams.get("license"); + } catch (e) { + console.warn("No se pudo extraer JWT global de la última licencia:", e); + } + } + + if (!globalLicenseJwt) { + console.warn("No se pudo obtener un JWT de licencia global. Las licencias podrían no funcionar."); + } + + + const m3uLines = ["#EXTM3U"]; + allChannelData.forEach(ch => { + m3uLines.push(`#EXTINF:-1 tvg-logo="${ch.logo}" group-title="BAR TV",${ch.nombre}`); + m3uLines.push(`#EXTVLCOPT:http-user-agent=${BARTV_USER_AGENT}`); + m3uLines.push("#KODIPROP:inputstream.adaptive.manifest_type=mpd"); + m3uLines.push("#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha"); + + let finalLicenseUrl = ch.licenseUrl; + if (globalLicenseJwt) { + try { + const parsedOriginalLicense = new URL(ch.licenseUrl); + parsedOriginalLicense.searchParams.set("license", globalLicenseJwt); + finalLicenseUrl = parsedOriginalLicense.toString(); + } catch (e) { + console.warn(`Error reemplazando JWT en licencia para ${ch.nombre}, usando original: ${e}`); + } + } + m3uLines.push(`#KODIPROP:inputstream.adaptive.license_key=${finalLicenseUrl}`); + m3uLines.push(ch.manifestUrl); + }); + + const m3uString = m3uLines.join("\n") + "\n\n"; + + if (typeof removeChannelsBySourceOrigin === 'function') { + removeChannelsBySourceOrigin(barTvSourceName); + } + + if (typeof appendM3UContent === 'function') { + appendM3UContent(m3uString, barTvSourceName); + } else { + console.error("appendM3UContent no encontrada. Usando fallback processM3UContent."); + processM3UContent(m3uString, barTvSourceName, true); + } + + } catch (error) { + console.error("Error generando M3U de BarTV:", error); + if (typeof showNotification === 'function') showNotification(`Error cargando BarTV: ${error.message}`, 'error'); + } finally { + if (headersSetSuccessfully) { + await clearDynamicHeadersBarTv(); + } + if (typeof showLoading === 'function') showLoading(false); + } +} \ No newline at end of file diff --git a/channel_ui.js b/channel_ui.js new file mode 100644 index 0000000..c05fa50 --- /dev/null +++ b/channel_ui.js @@ -0,0 +1,368 @@ +function switchFilter(filterType) { + if (currentFilter === filterType) return; + currentFilter = filterType; + currentPage = 1; + + $('#groupFilterSidebar').val("").trigger('change'); + + if (userSettings.persistFilters) { + userSettings.lastSelectedFilterTab = currentFilter; + localStorage.setItem('zenithUserSettings', JSON.stringify(userSettings)); + } + updateActiveFilterButton(); + filterAndRenderChannels(); +} + +function updateActiveFilterButton() { + $('.filter-tab-btn').removeClass('active'); + if (currentFilter === 'all') $('#showAllChannels').addClass('active'); + else if (currentFilter === 'favorites') $('#showFavorites').addClass('active'); + else if (currentFilter === 'history') $('#showHistory').addClass('active'); +} + +function getFilteredChannels() { + const search = $('#searchInput').val().toLowerCase().trim(); + const selectedGroup = $('#groupFilterSidebar').val() || ""; + + let baseChannels; + if (currentFilter === 'favorites') { + baseChannels = favorites.map(url => channels.find(c => c.url === url)).filter(Boolean); + } else if (currentFilter === 'history') { + baseChannels = appHistory.map(url => channels.find(c => c.url === url)).filter(Boolean); + } else { + baseChannels = channels; + } + + const filtered = baseChannels.filter(c => + c && typeof c.name === 'string' && typeof c.url === 'string' && + c.name.toLowerCase().includes(search) && + (selectedGroup === "" || c['group-title'] === selectedGroup) + ); + return filtered; +} + +function getPaginatedChannels() { + const filtered = getFilteredChannels(); + const totalItems = filtered.length; + const itemsPerPage = userSettings.channelsPerPage; + const totalPages = Math.max(1, Math.ceil(totalItems / itemsPerPage)); + currentPage = Math.min(Math.max(1, currentPage), totalPages === 0 ? 1 : totalPages); + + const startIndex = (currentPage - 1) * itemsPerPage; + const endIndex = Math.min(startIndex + itemsPerPage, totalItems); + const paginated = filtered.slice(startIndex, endIndex); + return paginated; +} + +function filterAndRenderChannels() { + renderChannels(); + updatePaginationControls(); + updateGroupSelectors(); + checkIfChannelsExist(); + if (typeof updateEPGProgressBarOnCards === 'function') { + updateEPGProgressBarOnCards(); + } +} + +function renderChannels() { + const grid = $('#channelGrid').empty(); + const channelsToShow = getPaginatedChannels(); + const noChannelsMessageEl = $('#noChannelsMessage'); + document.documentElement.style.setProperty('--card-logo-aspect-ratio', userSettings.cardLogoAspectRatio === 'auto' ? '16/9' : userSettings.cardLogoAspectRatio); + $('#channelGridTitle').text("Canales Disponibles"); + + if (channelsToShow.length > 0) { + noChannelsMessageEl.hide(); + grid.show(); + const fragment = document.createDocumentFragment(); + channelsToShow.forEach(channel => { + const isFavorite = favorites.includes(channel.url); + const card = document.createElement('div'); + card.className = 'channel-card'; + if (userSettings.compactCardView) { + card.classList.add('compact'); + } + card.dataset.url = channel.url; + + let logoSrc = ''; + const epgIdForLogo = channel.effectiveEpgId || (channel['tvg-id'] || '').toLowerCase().trim(); + + if (typeof getEpgChannelIcon === 'function' && getEpgChannelIcon(epgIdForLogo)) { + logoSrc = getEpgChannelIcon(epgIdForLogo); + } else if (channel['tvg-logo']) { + logoSrc = channel['tvg-logo']; + } + + let epgInfoHtml = ''; + let hasCurrentProgramForProgressBar = false; + + if (userSettings.cardShowEpg && channel.effectiveEpgId && typeof getEpgDataForChannel === 'function') { + const programsForChannel = getEpgDataForChannel(channel.effectiveEpgId); + const now = new Date(); + const currentProgram = programsForChannel.find(p => now >= p.startDt && now < p.stopDt); + const nextProgramIndex = currentProgram ? programsForChannel.indexOf(currentProgram) + 1 : programsForChannel.findIndex(p => p.startDt > now); + const nextProgram = (nextProgramIndex !== -1 && nextProgramIndex < programsForChannel.length) ? programsForChannel[nextProgramIndex] : null; + + if (currentProgram) { + hasCurrentProgramForProgressBar = true; + epgInfoHtml += `
${escapeHtml(currentProgram.title)}
`; + } + if (nextProgram && typeof formatEPGTime === 'function') { + epgInfoHtml += `
Sig: ${escapeHtml(nextProgram.title)} (${formatEPGTime(nextProgram.startDt)})
`; + } + } + + let progressBarHtml = ''; + if (userSettings.cardShowEpg && hasCurrentProgramForProgressBar) { + progressBarHtml = ` + `; + } + + const channelNumber = channel.attributes['ch-number']; + const channelNumberHtml = userSettings.cardShowChannelNumber && channelNumber ? + `${escapeHtml(channelNumber)}` : ''; + + card.innerHTML = ` +
+
+ ${logoSrc ? `` : ''} + + ${channelNumberHtml} +
+
+

${escapeHtml(channel.name)}

+ ${epgInfoHtml ? `
${epgInfoHtml}${progressBarHtml}
` : ''} + ${userSettings.cardShowGroup ? `

${escapeHtml(channel['group-title'] || 'Sin Grupo')}

` : ''} + ${userSettings.cardShowFavButton ? `` : ''} +
`; + fragment.appendChild(card); + }); + grid.append(fragment); + } else { + grid.hide(); + noChannelsMessageEl.show(); + } +} + +function renderXtreamContent(items, title) { + const grid = $('#channelGrid').empty(); + const noChannelsMessageEl = $('#noChannelsMessage'); + grid.show(); + noChannelsMessageEl.hide(); + $('#channelGridTitle').text(title); + + if (!items || items.length === 0) { + noChannelsMessageEl.text("No se encontraron elementos para mostrar.").show(); + grid.hide(); + return; + } + + const fragment = document.createDocumentFragment(); + items.forEach(item => { + const card = document.createElement('div'); + card.className = 'channel-card'; + + if (item.season_number !== undefined) { + card.dataset.seasonData = JSON.stringify(item); + } else { + card.dataset.episodeData = JSON.stringify(item); + } + + card.innerHTML = ` +
+ +
+
+

${escapeHtml(item.name)}

+

${escapeHtml(item['group-title'] || '')}

+
`; + fragment.appendChild(card); + }); + grid.append(fragment); + $('#paginationControls').hide(); + checkIfChannelsExist(); +} + +function updateGroupSelectors() { + const baseOrder = currentGroupOrder.filter(group => group && group.trim() !== ''); + + let relevantChannels; + if (currentFilter === 'favorites') { + relevantChannels = channels.filter(c => favorites.includes(c.url)); + } else if (currentFilter === 'history') { + relevantChannels = appHistory.map(url => channels.find(c => c.url === url)).filter(Boolean); + } else { + relevantChannels = channels; + } + + const groupCounts = {}; + relevantChannels.forEach(c => { + const group = c['group-title'] || ''; + groupCounts[group] = (groupCounts[group] || 0) + 1; + }); + + const availableGroupsRaw = relevantChannels.map(c => c['group-title'] || ''); + const uniqueSortedGroupsInView = getOrderedUniqueGroups(baseOrder, availableGroupsRaw); + + const currentSelectedGroup = $('#groupFilterSidebar').val(); + + populateGroupFilterDropdown('#groupFilterSidebar', uniqueSortedGroupsInView, '📂 Todos los grupos', groupCounts, currentSelectedGroup); + populateSidebarGroupList('#sidebarGroupList', uniqueSortedGroupsInView, groupCounts, currentSelectedGroup); +} + +function getOrderedUniqueGroups(preferredOrder, availableGroups) { + const availableSet = new Set(availableGroups); + const ordered = preferredOrder.filter(group => availableSet.has(group)); + const unordered = Array.from(availableSet) + .filter(group => !preferredOrder.includes(group)) + .sort((a, b) => { + const aNorm = a === '' ? 'Sin Grupo' : a; + const bNorm = b === '' ? 'Sin Grupo' : b; + return aNorm.localeCompare(bNorm, undefined, { sensitivity: 'base' }); + }); + return [...new Set([...ordered, ...unordered])]; +} + +function populateGroupFilterDropdown(selectorId, groups, defaultOptionText, groupCounts = {}, valueToSelect) { + const selector = $(selectorId); + selector.empty().append(``); + groups.forEach(group => { + const count = groupCounts[group] || 0; + const displayName = group === '' ? 'Sin Grupo' : group; + selector.append(``); + }); + + if (groups.includes(valueToSelect) || valueToSelect === "") { + selector.val(valueToSelect); + } else { + selector.val(""); + } +} + +function populateSidebarGroupList(listId, groups, groupCounts = {}, valueToSelect) { + const list = $(listId).empty(); + const fragment = document.createDocumentFragment(); + + const allGroupsItem = document.createElement('li'); + allGroupsItem.className = 'list-group-item'; + allGroupsItem.dataset.groupName = ""; + + let totalChannelsInView = 0; + if (currentFilter === 'favorites') { + totalChannelsInView = favorites.map(url => channels.find(c => c.url === url)).filter(Boolean).length; + } else if (currentFilter === 'history') { + totalChannelsInView = appHistory.map(url => channels.find(c => c.url === url)).filter(Boolean).length; + } else { + totalChannelsInView = channels.length; + } + if (Object.keys(groupCounts).length > 0 && (currentFilter === 'all' || currentFilter === '')) { + totalChannelsInView = Object.values(groupCounts).reduce((sum, count) => sum + count, 0); + } + + allGroupsItem.textContent = `Todos los Grupos (${totalChannelsInView})`; + if (valueToSelect === "") $(allGroupsItem).addClass('active'); + fragment.appendChild(allGroupsItem); + + groups.forEach(group => { + const item = document.createElement('li'); + item.className = 'list-group-item'; + item.dataset.groupName = group; + const count = groupCounts[group] || 0; + const displayName = group === '' ? 'Sin Grupo' : group; + item.textContent = `${escapeHtml(displayName)} (${count})`; + if (valueToSelect === group) $(item).addClass('active'); + fragment.appendChild(item); + }); + list.append(fragment); +} + +function updatePaginationControls() { + const filtered = getFilteredChannels(); + const totalItems = filtered.length; + const itemsPerPage = userSettings.channelsPerPage; + const totalPages = Math.max(1, Math.ceil(totalItems / itemsPerPage)); + currentPage = Math.min(Math.max(1, currentPage), totalPages === 0 ? 1 : totalPages); + + $('#pageInfo').text(`Pág ${currentPage} de ${totalPages} (${totalItems})`); + $('#prevPage').prop('disabled', currentPage <= 1); + $('#nextPage').prop('disabled', currentPage >= totalPages || totalPages === 0); + $('#paginationControls').toggle(totalItems > itemsPerPage); +} + +function changePage(newPage) { + const filtered = getFilteredChannels(); + const itemsPerPage = userSettings.channelsPerPage; + const totalPages = Math.max(1, Math.ceil(filtered.length / itemsPerPage)); + const targetPage = Math.min(Math.max(1, newPage), totalPages === 0 ? 1 : totalPages); + + if (targetPage !== currentPage) { + currentPage = targetPage; + renderChannels(); + updatePaginationControls(); + + const mainContentEl = $('#main-content'); + const channelGridEl = $('#channelGrid'); + + if (channelGridEl.length && mainContentEl.length && channelGridEl.is(":visible")) { + const gridRect = channelGridEl[0].getBoundingClientRect(); + const mainContentRect = mainContentEl[0].getBoundingClientRect(); + + let targetScrollPosition = mainContentEl.scrollTop() + gridRect.top - mainContentRect.top - (parseFloat(mainContentEl.css('padding-top')) || 0); + targetScrollPosition = Math.max(0, targetScrollPosition); + + if (currentPage > 1 && (Math.abs(mainContentEl.scrollTop() - targetScrollPosition) > 20 || mainContentEl.scrollTop() > targetScrollPosition) ) { + mainContentEl.animate({ scrollTop: targetScrollPosition }, 300); + } else if (currentPage === 1 && mainContentEl.scrollTop() > 0) { + mainContentEl.animate({ scrollTop: 0 }, 300); + } + } + } +} + +function checkIfChannelsExist() { + const hasAnyChannelLoaded = channels.length > 0; + const isMainView = currentView.type === 'main'; + const filteredChannelsCount = isMainView ? getFilteredChannels().length : currentView.data?.length || 0; + const noChannelsMsg = $('#noChannelsMessage'); + const paginationControls = $('#paginationControls'); + const channelGrid = $('#channelGrid'); + const channelGridTitleContainer = $('#channelGridTitle').parent(); + const filterTabs = $('.filter-tabs-container'); + const downloadBtn = $('#downloadM3UBtnHeader'); + + if (!hasAnyChannelLoaded) { + noChannelsMsg.text(currentM3UContent ? `No se encontraron canales válidos en "${escapeHtml(currentM3UName)}".` : 'Carga una lista M3U (URL o archivo)...').show(); + channelGrid.hide(); + paginationControls.hide(); + channelGridTitleContainer.hide(); + filterTabs.hide(); + downloadBtn.prop('disabled', true).parent().addClass('disabled'); + $('#groupFilterSidebar').prop('disabled', true).val(''); + $('#sidebarGroupList').empty().append('
  • Carga una lista M3U
  • '); + } else { + filterTabs.toggle(isMainView); + downloadBtn.prop('disabled', false).parent().removeClass('disabled'); + $('#groupFilterSidebar').prop('disabled', !isMainView); + + if (filteredChannelsCount === 0) { + let message = 'No hay canales que coincidan con los filtros/búsqueda.'; + if (isMainView) { + if (currentFilter === 'favorites' && favorites.length === 0) message = 'No tienes canales favoritos. Haz clic en ★ en una tarjeta para añadir.'; + if (currentFilter === 'history' && appHistory.length === 0) message = 'El historial de reproducción está vacío.'; + } else { + message = "No se encontraron episodios para esta serie."; + } + + noChannelsMsg.text(message).show(); + channelGrid.hide(); + paginationControls.hide(); + channelGridTitleContainer.show(); + } else { + noChannelsMsg.hide(); + channelGrid.show(); + channelGridTitleContainer.show(); + } + } +} \ No newline at end of file diff --git a/css/base.css b/css/base.css new file mode 100644 index 0000000..a8f8332 --- /dev/null +++ b/css/base.css @@ -0,0 +1,37 @@ +:root { + --bg-primary: #0D1117; --bg-secondary: #161B22; --bg-tertiary: #010409; --bg-hover: #1F242C; + --bg-element: #21262D; --bg-element-hover: #2D323A; --accent-primary: #10B981; + --accent-secondary: #059669; --accent-hover: #34D399; --accent-primary-transparent: rgba(16, 185, 129, 0.15); + --text-primary: #E6EDF3; --text-secondary: #8B949E; --text-tertiary: #6E7681; + --border-color: #30363D; --border-color-strong: #484F58; --shadow-color: rgba(0, 0, 0, 0.25); + --success: #28A745; --danger: #DC3545; --warning: #FFC107; --info: #17A2B8; + --orange-color: #FF7900; --radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; + --font-main: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --font-heading: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --transition-fast: all 0.15s cubic-bezier(0.4, 0, 0.2, 1); --transition-smooth: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + --sidebar-width: 260px; --header-height: 65px; --m3u-grid-minmax-size: 180px; + --taskbar-height: 40px; + --rgb-bg-tertiary: 1, 4, 9; + --rgb-accent-primary: 16, 185, 129; +} +body.theme-blue { --accent-primary: #0d6efd; --accent-secondary: #0a58ca; --accent-hover: #3c87fd; --accent-primary-transparent: rgba(13, 110, 253, 0.15); --rgb-accent-primary: 13, 110, 253;} +body.theme-purple { --accent-primary: #6f42c1; --accent-secondary: #59359a; --accent-hover: #8a63d2; --accent-primary-transparent: rgba(111, 66, 193, 0.15); --rgb-accent-primary: 111, 66, 193;} +body.theme-orange { --accent-primary: #fd7e14; --accent-secondary: #d3690f; --accent-hover: #fd933c; --accent-primary-transparent: rgba(253, 126, 20, 0.15); --rgb-accent-primary: 253, 126, 20;} +body.font-type-apple-system { --font-main: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; --font-heading: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";} +body.font-type-sans-serif { --font-main: "Segoe UI", "Helvetica Neue", Arial, sans-serif; --font-heading: "Segoe UI", "Helvetica Neue", Arial, sans-serif;} +body.font-type-serif { --font-main: Georgia, serif; --font-heading: Georgia, serif; } +body.font-type-monospace { --font-main: "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --font-heading: "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } + +html { scroll-behavior: smooth; } +* { scrollbar-width: thin; scrollbar-color: var(--accent-primary) var(--bg-secondary); } +::-webkit-scrollbar { width: 8px; height: 8px; } +::-webkit-scrollbar-track { background: var(--bg-secondary); } +::-webkit-scrollbar-thumb { background-color: var(--accent-primary); border-radius: var(--radius-sm); border: 2px solid var(--bg-secondary); } +::-webkit-scrollbar-thumb:hover { background-color: var(--accent-hover); } + +body { background-color: var(--bg-primary); color: var(--text-primary); font-family: var(--font-main); overflow-x: hidden; min-height: 100vh; line-height: 1.6; } + +#particles-js { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: -1; opacity: var(--particle-opacity, 0.02); pointer-events: none; transition: opacity 0.5s ease-in-out; } +#particles-js.disabled { opacity: 0 !important; } + +.d-none { display: none !important; } \ No newline at end of file diff --git a/css/channel_card.css b/css/channel_card.css new file mode 100644 index 0000000..a02e55a --- /dev/null +++ b/css/channel_card.css @@ -0,0 +1,80 @@ +.channel-card { background-color: var(--bg-element); border-radius: var(--radius-md); overflow: hidden; border: 1px solid var(--border-color); box-shadow: 0 4px 6px -1px var(--shadow-color), 0 2px 4px -2px var(--shadow-color); transition: transform var(--transition-smooth), box-shadow var(--transition-smooth), border-color var(--transition-smooth), background-color var(--transition-fast); cursor: pointer; position: relative; display: flex; flex-direction: column; will-change: transform, box-shadow; } +.channel-card:hover { transform: translateY(-6px) scale(1.05); box-shadow: 0 12px 22px -6px color-mix(in srgb, var(--accent-primary) 20%, var(--shadow-color)), 0 0 15px 1px color-mix(in srgb, var(--accent-primary) 30%, transparent); border-color: var(--accent-primary); background-color: var(--bg-element-hover); } +.channel-card:hover .channel-logo:not(.error) { transform: scale(1.05); } +.channel-card:active { transform: translateY(-2px) scale(1.01); box-shadow: 0 6px 12px -3px var(--shadow-color), 0 0 8px 0px color-mix(in srgb, var(--accent-primary) 20%, transparent); transition: transform 0.08s ease-out, box-shadow 0.08s ease-out; } +.channel-logo-container { width: 100%; aspect-ratio: var(--card-logo-aspect-ratio, 16/9); background-color: var(--bg-secondary); display: flex; align-items: center; justify-content: center; position: relative; overflow: hidden; } +.channel-logo { max-width: 75%; max-height: 75%; object-fit: contain; transition: var(--transition-smooth); z-index: 1; } +.channel-logo-container::before { content: '\1F4FA'; font-family: sans-serif; font-weight: normal; font-size: 2.5rem; color: var(--text-tertiary); position: absolute; opacity: 0.2; z-index: 0; transition: opacity 0.2s ease-in-out; } +.channel-logo-container:has(img.channel-logo[src]:not([src=""]):not(.error))::before { opacity: 0; } +.card-video-preview-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: #000; z-index: 2; display: none; } +.card-video-preview-container video.card-preview-video { width: 100%; height: 100%; object-fit: cover; } +.channel-card.is-playing-preview .channel-logo-container > img.channel-logo, +.channel-card.is-playing-preview .channel-logo-container > .epg-icon-placeholder, +.channel-card.is-playing-preview .channel-logo-container::before { display: none !important; opacity: 0 !important; } +.channel-card.is-playing-preview .card-video-preview-container { display: block; } + +.channel-info { padding: 0.75rem; flex-grow: 1; display: flex; flex-direction: column; } +.channel-name { font-size: 0.9rem; font-weight: 600; color: var(--text-primary); margin-bottom: 0.3rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.channel-number { font-size: 0.7rem; color: var(--text-tertiary); position: absolute; top: 0.5rem; left: 0.5rem; background-color: rgba(var(--rgb-bg-tertiary),0.7); padding: 0.1rem 0.4rem; border-radius: var(--radius-sm); z-index: 3; backdrop-filter: blur(3px); } +.channel-card:hover .channel-number { color: var(--accent-primary); } +.channel-group { font-size: 0.7rem; color: var(--text-tertiary); background: rgba(0, 0, 0, 0.2); padding: 0.2rem 0.4rem; border-radius: var(--radius-sm); display: inline-block; margin-top: auto; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.channel-epg-info { font-size: 0.7rem; color: var(--text-secondary); margin-top: 0.2rem; line-height: 1.3; } +.epg-current, .epg-next { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-bottom: 0.1rem; } +.epg-current { font-weight: 500; opacity: 0.9; display: flex; align-items: center; } +.epg-current::before { content: "▶"; font-size: 0.8em; color: var(--accent-primary); margin-right: 0.3em; opacity: 0.8; } +.epg-next { opacity: 0.7; } +.epg-progress-bar-container { height: 3px; background-color: var(--border-color); border-radius: 2px; margin-top: 4px; overflow: hidden; } +.epg-progress-bar { height: 100%; background-color: var(--accent-secondary); border-radius: 2px; width: 0%; transition: width 0.5s linear; } +.favorite-btn { position: absolute; top: 0.5rem; right: 0.5rem; background-color: rgba(30, 41, 59, 0.7); border: 1px solid var(--border-color); border-radius: 50%; width: 30px; height: 30px; font-size: 1rem; line-height: 1; color: var(--text-secondary); transition: var(--transition-fast); display: flex; align-items: center; justify-content: center; z-index: 3; backdrop-filter: blur(3px); } +.favorite-btn::before { content: "\2606"; font-family: sans-serif; } +.favorite-btn.favorite::before { content: "\2B50"; color: var(--accent-primary); } +.favorite-btn:hover { background-color: var(--accent-primary-transparent); color: var(--accent-primary); transform: scale(1.1); border-color: var(--accent-primary); } +.favorite-btn.favorite { color: var(--accent-primary); background-color: color-mix(in srgb, var(--accent-primary) 20%, transparent); border-color: color-mix(in srgb, var(--accent-primary) 50%, transparent); } +.favorite-btn.favorite:hover { color: var(--accent-hover); background-color: color-mix(in srgb, var(--accent-hover) 25%, transparent); border-color: var(--accent-hover); } + +.channel-card.compact { + flex-direction: row; + align-items: center; + gap: 0.75rem; + padding: 0.5rem; +} +.channel-card.compact .channel-logo-container { + width: 90px; + height: auto; + aspect-ratio: 16/9; + flex-shrink: 0; + border-radius: var(--radius-sm); +} +.channel-card.compact .channel-logo { + max-width: 80%; + max-height: 80%; +} +.channel-card.compact .channel-info { + padding: 0; + flex: 1; + min-width: 0; +} +.channel-card.compact .channel-name { + margin-bottom: 0.2rem; + font-size: 0.85rem; +} +.channel-card.compact .channel-epg-info { + font-size: 0.65rem; + line-height: 1.2; +} +.channel-card.compact .epg-current::before { + display: none; +} +.channel-card.compact .channel-group { + display: none; +} +.channel-card.compact .favorite-btn { + top: 0.3rem; + right: 0.3rem; + width: 26px; + height: 26px; + font-size: 0.9rem; +} +.channel-card.compact:hover { + transform: translateY(-4px) scale(1.03); +} \ No newline at end of file diff --git a/css/channel_grid.css b/css/channel_grid.css new file mode 100644 index 0000000..3d32335 --- /dev/null +++ b/css/channel_grid.css @@ -0,0 +1,18 @@ +.m3u-load-area { background: var(--bg-secondary); border-radius: var(--radius-lg); padding: 1.5rem; margin-bottom: 1.5rem; border: 1px solid var(--border-color); } +.m3u-load-area h5 { font-family: var(--font-heading); font-size: 1.3rem; color: var(--text-primary); margin-bottom: 1rem; } +.m3u-load-area .form-control, .m3u-load-area .form-select { font-size: 0.9rem; } +.m3u-load-area .btn-control { width: 100%; } /* Consider moving to buttons.css */ +.filter-tabs-container { display: flex; gap: 0.5rem; margin-bottom: 1.5rem; border-bottom: 1px solid var(--border-color); padding-bottom: 0.5rem; } +.filter-tab-btn { background: transparent; border: none; color: var(--text-secondary); padding: 0.6rem 1rem; font-size: 0.95rem; font-weight: 500; border-radius: var(--radius-sm) var(--radius-sm) 0 0; position: relative; transition: var(--transition-fast); } +.filter-tab-btn .icon-placeholder::before { margin-right: 0.5rem; font-family: sans-serif; } +#showAllChannels .icon-placeholder::before { content: "\1F4FA"; } +#showFavorites .icon-placeholder::before { content: "\2B50"; } +#showHistory .icon-placeholder::before { content: "\1F553"; } +.filter-tab-btn:hover { color: var(--text-primary); } +.filter-tab-btn.active { color: var(--accent-primary); } +.filter-tab-btn.active::after { content: ''; position: absolute; bottom: -1px; left: 0; width: 100%; height: 2px; background-color: var(--accent-primary); border-radius: 1px; } +.section-title-main { font-family: var(--font-heading); font-size: 1.8rem; font-weight: 700; color: var(--text-primary); margin-bottom: 1.5rem; display: none; } +.m3u-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(var(--m3u-grid-minmax-size), 1fr)); gap: 1.25rem; } +#noChannelsMessage { grid-column: 1 / -1; text-align: center; margin-top: 3rem; font-size: 1.1rem; color: var(--text-secondary); } +.pagination-controls { display: flex; justify-content: center; align-items: center; gap: 0.75rem; margin-top: 2rem; padding-bottom: 1rem; } +.pagination-controls span { color: var(--text-secondary); font-size: 0.9rem; } \ No newline at end of file diff --git a/css/components.css b/css/components.css new file mode 100644 index 0000000..1ae8b46 --- /dev/null +++ b/css/components.css @@ -0,0 +1,36 @@ +.form-control, .form-select { background-color: var(--bg-element); border: 1px solid var(--border-color); color: var(--text-primary); border-radius: var(--radius-md); padding: 0.6rem 1rem; } +.form-select option { background-color: var(--bg-element); color: var(--text-primary); } +.form-control::placeholder { color: var(--text-tertiary); opacity: 0.8; } +.form-control:focus, .form-select:focus { background-color: var(--bg-element-hover); border-color: var(--accent-primary); box-shadow: 0 0 0 3px var(--accent-primary-transparent); color: var(--text-primary); outline: none; } + +.btn-control { background-color: var(--bg-element); border: 1px solid var(--border-color); color: var(--text-primary); padding: 0.6rem 1.2rem; border-radius: var(--radius-md); font-weight: 500; transition: var(--transition-fast); display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; text-decoration: none; cursor: pointer; position: relative; overflow: hidden; } +.btn-control .icon-placeholder::before { font-family: sans-serif; } +#prevPage .icon-placeholder::before { content: "\2190"; } +#nextPage .icon-placeholder::before { content: "\2192"; } +#playEpgProgramBtn .icon-placeholder::before { content: "\25B6"; } +#saveSettingsBtn .icon-placeholder::before { content: "\1F4BE"; } +#forceEpgRematchBtn .icon-placeholder::before { content: "\21BB"; } +#exportSettingsBtn .icon-placeholder::before { content: "\1F4E4"; } +#clearCacheBtn .icon-placeholder::before { content: "\1F5D1"; } +#importSettingsInput + label .icon-placeholder::before { content: "\1F4E5"; } +#sendM3UToServerBtn .icon-placeholder::before { content: "\1F4E1"; } +.btn-control:hover:not(:disabled) { background-color: var(--bg-element-hover); border-color: var(--border-color-strong); transform: translateY(-1px); box-shadow: 0 2px 5px rgba(0,0,0,0.1); } +.btn-control:active:not(:disabled) { transform: translateY(0px) scale(0.98); box-shadow: 0 1px 2px rgba(0,0,0,0.05); } +.btn-control.primary { background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); color: white !important; border: none; } +.btn-control.primary:hover:not(:disabled) { background: linear-gradient(135deg, var(--accent-hover), var(--accent-primary)); transform: translateY(-1px); box-shadow: 0 3px 8px color-mix(in srgb, var(--accent-primary) 40%, transparent); } +.btn-control:disabled { opacity: 0.6; cursor: not-allowed; } +.btn-control.btn-sm { padding: 0.4rem 0.8rem; font-size: 0.85rem; border-radius: var(--radius-sm); } +.btn-control.btn-danger { background-color: var(--danger); border-color: var(--danger); color: white !important; } +.btn-control.btn-danger:hover:not(:disabled) { background-color: color-mix(in srgb, var(--danger) 85%, black); border-color: color-mix(in srgb, var(--danger) 85%, black); box-shadow: 0 3px 8px color-mix(in srgb, var(--danger) 40%, transparent); } + +#loading-overlay { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(var(--rgb-bg-tertiary), 0.8); backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); display: flex; align-items: center; justify-content: center; z-index: 2000; opacity: 0; transition: opacity 0.3s ease; pointer-events: none; } +#loading-overlay.show { opacity: 1; pointer-events: auto; } +.loader { width: 50px; height: 50px; border: 4px solid var(--accent-primary); border-top-color: transparent; border-radius: 50%; animation: spin 0.8s linear infinite; } +@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } + +#notification { position: fixed; bottom: 1.5rem; left: 50%; transform: translateX(-50%) translateY(120%); padding: 0.8rem 1.5rem; border-radius: var(--radius-md); box-shadow: 0 5px 15px var(--shadow-color); z-index: 2050; color: white; font-weight: 500; max-width: 90%; text-align: center; opacity: 0; transition: opacity 0.4s cubic-bezier(0.23, 1, 0.32, 1), transform 0.4s cubic-bezier(0.23, 1, 0.32, 1); pointer-events: none; backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); border: 1px solid transparent; font-size: 0.9rem; } +#notification.show { opacity: 1; transform: translateX(-50%) translateY(0); pointer-events: auto; } +#notification.success { background-color: rgba(var(--rgb-accent-primary), 0.85); border-color: var(--accent-primary); } +#notification.error { background-color: rgba(220, 53, 69, 0.85); border-color: var(--danger); } +#notification.info { background-color: rgba(23, 162, 184, 0.85); border-color: var(--info); } +#notification.warning { background-color: rgba(255, 193, 7, 0.85); border-color: var(--warning); color: #333; } \ No newline at end of file diff --git a/css/editor.css b/css/editor.css new file mode 100644 index 0000000..28aa6f4 --- /dev/null +++ b/css/editor.css @@ -0,0 +1,121 @@ +:root { + --editor-primary: var(--accent-primary); + --editor-primary-hover: var(--accent-hover); + --editor-primary-light: var(--accent-primary-transparent); + --editor-danger: var(--danger); + --editor-danger-hover: color-mix(in srgb, var(--danger) 85%, black); + --editor-danger-light: color-mix(in srgb, var(--danger) 15%, transparent); + --editor-success: var(--success); + --editor-success-hover: color-mix(in srgb, var(--success) 85%, black); + --editor-success-light: color-mix(in srgb, var(--success) 15%, transparent); + --editor-info: var(--info); + --editor-info-hover: color-mix(in srgb, var(--info) 85%, black); + --editor-info-light: color-mix(in srgb, var(--info) 15%, transparent); + --editor-warning: var(--warning); + --editor-warning-hover: color-mix(in srgb, var(--warning) 85%, black); + --editor-warning-light: color-mix(in srgb, var(--warning) 15%, transparent); + --editor-text-dark: var(--text-primary); + --editor-text-light: var(--text-secondary); + --editor-light: var(--bg-primary); + --editor-light-alt: var(--bg-secondary); + --editor-border-color: var(--border-color); + --editor-sidebar-bg: var(--bg-tertiary); + --editor-header-bg: var(--bg-tertiary); + --editor-header-text: var(--text-primary); + --editor-sidebar-collapsed-width: 65px; + --editor-sidebar-expanded-width: 240px; + --editor-content-padding: 20px; + --editor-border-radius: var(--radius-md); + --editor-shadow-soft: 0 2px 4px rgba(0, 0, 0, 0.1); + --editor-shadow-medium: 0 5px 15px rgba(0, 0, 0, 0.2); + --editor-shadow-large: 0 10px 30px rgba(0, 0, 0, 0.3); + --editor-transition-speed: 0.3s; + --editor-selected-bg: var(--accent-primary-transparent); +} +#editorModal .content-wrapper { flex-grow: 1; display: flex; overflow: hidden; background-color: var(--bg-primary); height: calc(100vh - 120px); } +#editorModal .list-panel { width: 100%; display: flex; flex-direction: column; border-right: none; overflow: hidden; transition: width var(--editor-transition-speed) ease; } +#editorModal.editor-visible .list-panel { width: 60%; border-right: 1px solid var(--editor-border-color); } +#editorModal .list-toolbar { padding: 10px 15px; border-bottom: 1px solid var(--editor-border-color); display: flex; flex-wrap: wrap; gap: 10px; align-items: center; flex-shrink: 0; background-color: var(--bg-secondary); } +#editorModal #file-name-display { font-size: 0.9rem; font-weight: 500; background-color: var(--bg-element); padding: 4px 10px; border-radius: var(--editor-border-radius); border: 1px solid var(--editor-border-color); color: var(--editor-text-light); margin-right: auto; } +#editorModal #file-name-display.loaded { color: var(--editor-text-dark); border-color: var(--editor-primary); background-color: var(--editor-primary-light); } +#editorModal .list-toolbar .btn, #editorModal .list-toolbar #group-filter { height: 32px; font-size: 0.8rem; padding: 0 12px; background-color: var(--bg-element); border-color: var(--border-color); color: var(--text-primary); border-radius: var(--radius-sm); } +#editorModal .table-container { flex-grow: 1; overflow-y: auto; background: transparent; } +#editorModal table { min-width: 550px; border-collapse: separate; border-spacing: 0; width: 100%; } +#editorModal th, #editorModal td { padding: 10px 12px; white-space: nowrap; font-size: 0.85rem; vertical-align: middle; } +#editorModal td { border-bottom: 1px solid var(--editor-border-color); } +#editorModal th { background-color: var(--bg-tertiary); font-weight: 600; position: sticky; top: 0; z-index: 10; border-bottom: 1px solid var(--border-color-strong); cursor: default; } +#editorModal th.sortable { cursor: pointer; } +#editorModal .handle-cell, #editorModal .checkbox-cell { width: 40px; text-align: center; } +#editorModal .logo-cell { width: 50px; text-align: center; } +#editorModal .name-cell { min-width: 180px; white-space: normal; font-weight: 500; } +#editorModal .url-cell { max-width: 250px; overflow: hidden; text-overflow: ellipsis; color: var(--editor-text-light); font-size: 0.8rem; } +#editorModal .epg-cell { width: 120px; overflow: hidden; text-overflow: ellipsis; } +#editorModal .ch-num-cell { width: 60px; text-align: right; color: var(--editor-text-light); } +#editorModal .actions-cell { width: 80px; text-align: center; } +#editorModal .drag-handle { cursor: move; color: var(--editor-text-light); padding: 0 8px 0 0; opacity: 0.6; } +#editorModal tr:hover .drag-handle { opacity: 1; } +#editorModal .logo-preview { max-width: 32px; max-height: 20px; vertical-align: middle; object-fit: contain; background-color: var(--bg-element); border-radius: 3px; } +#editorModal tr.channel-row { cursor: pointer; transition: background-color var(--editor-transition-speed); } +#editorModal tr.channel-row:hover { background-color: var(--bg-hover); } +#editorModal tr.channel-row.selected-row { background-color: var(--editor-selected-bg) !important; } +#editorModal tr.channel-row.selected-row td { border-bottom-color: var(--editor-primary); } +#editorModal .group-header-row { background-color: var(--bg-element); font-weight: 600; cursor: default; transition: background-color var(--editor-transition-speed); user-select: none; } +#editorModal .group-header-row:hover { background-color: var(--bg-element-hover); } +#editorModal .group-header-row td { padding: 8px 12px; border-bottom: 1px solid var(--border-color-strong); } +#editorModal .group-name-text { cursor: text; } +#editorModal .group-channel-count { font-size: 0.8em; color: var(--editor-text-light); margin-left: 8px; font-weight: 400; } +#editorModal .editor-panel { width: 0; padding: 0; border-left: none; display: flex; flex-direction: column; overflow: hidden; background-color: var(--bg-secondary); transition: width var(--editor-transition-speed) ease, padding var(--editor-transition-speed) ease, opacity var(--editor-transition-speed) ease, border-left var(--editor-transition-speed) ease; opacity: 0; flex-shrink: 0; user-select: none; } +#editorModal.editor-visible .editor-panel { width: 40%; opacity: 1; overflow-y: auto; padding: var(--editor-content-padding); border-left: 1px solid var(--editor-border-color); } +#editorModal .editor-panel-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; padding-bottom: 10px; border-bottom: 1px solid var(--editor-border-color); flex-shrink: 0; } +#editorModal .editor-panel-header h3 { margin: 0; font-size: 1.1rem; font-weight: 600; display: flex; align-items: center; } +#editorModal .editor-panel-header i { color: var(--editor-primary); margin-right: 8px; } +#editorModal .btn-close-editor { background: none; border: none; font-size: 1.5rem; color: var(--editor-text-light); cursor: pointer; padding: 0 5px; opacity: 0.7; transition: opacity 0.2s; line-height: 1; } +#editorModal .btn-close-editor:hover { opacity: 1; } +#editorModal .editor-panel-content { flex-grow: 1; } +#editorModal .editor-panel .form-group { margin-bottom: 20px; } +#editorModal .editor-panel label { display: block; font-weight: 500; margin-bottom: 8px; font-size: 0.85rem; color: var(--editor-text-dark); } +#editorModal .editor-panel input[type="text"], #editorModal .editor-panel input[type="url"], #editorModal .editor-panel input[type="number"], #editorModal .editor-panel textarea { width: 100%; height: 38px; padding: 0 12px; border: 1px solid var(--editor-border-color); border-radius: var(--editor-border-radius); font-size: 0.9rem; background-color: var(--bg-element); color: var(--text-primary); transition: border-color 0.2s, box-shadow 0.2s; line-height: 1.5; } +#editorModal .editor-panel textarea { height: auto; min-height: 76px; padding: 8px 12px; resize: vertical; } +#editorModal .editor-panel input:focus, #editorModal .editor-panel textarea:focus { border-color: var(--editor-primary); outline: none; box-shadow: 0 0 0 3px var(--editor-primary-light); } +#editorModal .editor-panel .input-group { display: flex; gap: 15px; } +#editorModal .editor-panel .input-group .form-group { flex: 1; margin-bottom: 0; } +#editorModal .editor-panel input[type="number"] { padding-left: 25px; } +#editorModal .editor-panel .ch-num-wrapper { position: relative; } +#editorModal .editor-panel .ch-num-wrapper::before { content: "#"; position: absolute; left: 10px; top: 50%; transform: translateY(-50%); color: var(--editor-text-light); font-size: 0.9rem; font-weight: 600; } +#editorModal .editor-logo-preview { max-width: 100px; max-height: 60px; object-fit: contain; margin-bottom: 10px; border: 1px dashed var(--editor-border-color); padding: 5px; display: block; border-radius: var(--editor-border-radius); background-color: var(--bg-primary); min-height: 30px; text-align: center; line-height: 30px; color: var(--editor-text-light); } +#editorModal .editor-logo-preview[src=''] { display: none; } +#editorModal .editor-panel .form-check-group { display: flex; gap: 15px; flex-wrap: wrap; margin-top: 8px; } +#editorModal .editor-panel .form-check { display: flex; align-items: center; gap: 6px; } +#editorModal .editor-panel .form-check input[type="checkbox"] { width: auto; height: auto; flex-shrink: 0; } +#editorModal .editor-panel .form-check label { margin-bottom: 0; font-weight: 400; font-size: 0.85rem; } +#editorModal .editor-panel h6 { font-weight: 600; margin: 25px 0 15px 0; padding-top: 15px; border-top: 1px solid var(--editor-border-color); font-size: 0.9rem; color: var(--editor-primary); } +#editorModal #editor-placeholder { display: flex; flex-direction: column; justify-content: center; align-items: center; height: 100%; color: var(--editor-text-light); text-align: center; padding: 20px; } +#editorModal #editor-placeholder i { font-size: 3em; margin-bottom: 15px; opacity: 0.5; } +#editorModal #editor-placeholder p { font-size: 1rem; } +#editorModal .hidden { display: none !important; } +#editorModal .modal-body { padding: 1rem; } +#editorModal .btn { display: inline-block; font-weight: 400; line-height: 1.5; text-align: center; text-decoration: none; vertical-align: middle; cursor: pointer; user-select: none; border: 1px solid transparent; padding: .375rem .75rem; font-size: 1rem; border-radius: .25rem; background-color: var(--bg-element); color: var(--text-primary); border-color: var(--border-color); } +#editorModal .btn:hover { background-color: var(--bg-element-hover); border-color: var(--border-color-strong); } +#editorModal .btn-sm { padding: .25rem .5rem; font-size: .875rem; border-radius: .2rem; } +#editorModal .btn-outline-danger { color: var(--danger); border-color: var(--danger); } +#editorModal .btn-outline-danger:hover { color: white; background-color: var(--danger); border-color: var(--danger); } +#editorModal .btn-outline-primary { color: var(--accent-primary); border-color: var(--accent-primary); } +#editorModal .btn-outline-primary:hover { color: white; background-color: var(--accent-primary); border-color: var(--accent-primary); } +#editorModal .btn-info { background-color: var(--editor-info); border-color: var(--editor-info); color: white; } +#editorModal .btn-info:hover { background-color: var(--editor-info-hover); border-color: var(--editor-info-hover); } +#editorModal .btn-success { background-color: var(--editor-success); border-color: var(--editor-success); color: white; } +#editorModal .btn-success:hover { background-color: var(--editor-success-hover); border-color: var(--editor-success-hover); } +#editorModal .editor-panel-footer { padding-top: 20px; margin-top: auto; border-top: 1px solid var(--editor-border-color); display: flex; justify-content: flex-end; gap: 10px; flex-shrink: 0; } +#editorModal .btn-action { background: none; border: none; color: var(--editor-text-light); opacity: 0.6; cursor: pointer; padding: 2px 4px; transition: opacity 0.2s, color 0.2s; } +#editorModal .btn-action:hover { opacity: 1; color: var(--editor-primary); } +#editorModal .btn-action.play:hover { color: var(--editor-success); } +#editorModal .btn-action i { pointer-events: none; } +#editorModal th i.fas { margin-left: 8px; color: var(--editor-text-light); } +#editorModal th:hover i.fas { color: var(--editor-text-dark); } +#editorModal th .fa-sort-up, #editorModal th .fa-sort-down { color: var(--editor-primary); } +#multiEditModal .multi-edit-field { background-color: var(--bg-element); padding: 15px; border-radius: var(--editor-border-radius); border: 1px solid var(--editor-border-color); margin-bottom: 15px; } +#multiEditModal .multi-edit-field .form-check { margin-bottom: 10px; } +#multiEditModal .multi-edit-field .form-control:disabled, #multiEditModal .multi-edit-field .form-select:disabled { background-color: var(--bg-secondary); opacity: 0.5; } +body.editor-is-dragging { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: grabbing; } +.sortable-ghost { opacity: 0.4; background-color: var(--accent-primary-transparent); } +.sortable-fallback { display: none; } \ No newline at end of file diff --git a/css/epg_modal.css b/css/epg_modal.css new file mode 100644 index 0000000..cdaa80f --- /dev/null +++ b/css/epg_modal.css @@ -0,0 +1,33 @@ +#epgModal .modal-content, #movistarVODModal .modal-content { background-color: var(--bg-primary); } +#epgModal .modal-body { padding: 1rem; height: calc(100vh - 120px); display: flex; flex-direction: column; overflow: hidden; } +#epgModal .input-group .form-control { background-color: var(--bg-element); border: 1px solid var(--border-color); color: var(--text-primary); } +.epg-timeline { display: flex; flex-direction: column; flex: 1; overflow: hidden; position: relative; background-color: var(--bg-secondary); border-radius: var(--radius-md); border: 1px solid var(--border-color); } +.epg-timeline-header { height: 50px; background-color: rgba(var(--rgb-bg-secondary, 22, 27, 34), 0.7); border-bottom: 1px solid var(--border-color); backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); z-index: 2; display: flex; overflow-x: auto; overflow-y: hidden; flex-shrink: 0; } +.epg-timebar { display: flex; height: 100%; position: relative; min-width: 100%; } +.epg-time-slot { min-width: 100px; text-align: center; line-height: 50px; font-size: 0.85rem; color: var(--text-secondary); border-right: 1px solid var(--border-color); flex-shrink: 0; padding: 0 10px; white-space: nowrap; font-weight: 500; } +.epg-timeline-body { display: flex; flex: 1; overflow: hidden; position: relative; } +.epg-channels { width: 230px; overflow-y: auto; overflow-x: hidden; background-color: rgba(var(--rgb-bg-tertiary), 0.5); flex-shrink: 0; border-right: 1px solid var(--border-color); } +.epg-channel-item { padding: 8px 12px; height: 60px; display: flex; align-items: center; border-bottom: 1px solid var(--border-color); cursor: pointer; transition: var(--transition-fast); font-size: 0.9rem; color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; position: relative; } +.epg-channel-item img { width: 40px; height: 40px; margin-right: 10px; object-fit: contain; flex-shrink: 0; background-color: rgba(255, 255, 255, 0.05); border-radius: var(--radius-sm); transition: transform 0.2s ease; } +.epg-channel-item .epg-icon-placeholder { width: 40px; height: 40px; margin-right: 10px; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; background-color: rgba(255, 255, 255, 0.03); border-radius: var(--radius-sm); color: var(--text-tertiary); font-size: 1.3rem; transition: transform 0.2s ease; } +.epg-channel-item .epg-icon-placeholder::before { content: "\1F4FA"; font-family: sans-serif; } +.epg-channel-item:hover { background-color: var(--bg-hover); } +.epg-channel-item:hover img, .epg-channel-item:hover .epg-icon-placeholder { transform: scale(1.08); } +.epg-channel-item.active { background-color: var(--accent-primary); color: #fff; } +.epg-channel-item .play-channel-epg-btn { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); color: white; border: none; border-radius: 50%; width: 32px; height: 32px; font-size: 1rem; line-height: 1; display: none; place-items: center; opacity: 0.9; transition: var(--transition-fast), transform 0.15s ease; box-shadow: 0 1px 3px var(--shadow-color); } +.play-channel-epg-btn::before { content: "\25B6"; font-family: sans-serif; } +.epg-channel-item:hover .play-channel-epg-btn { display: grid; } +.play-channel-epg-btn:hover { opacity: 1; transform: translateY(-50%) scale(1.1); box-shadow: 0 0 8px var(--accent-primary); } +.epg-programs-container { flex: 1; overflow: auto; position: relative; } +.epg-programs { position: relative; display: block; background-image: repeating-linear-gradient(to right, transparent, transparent calc(var(--pixelsPerHour, 220px) - 1px), var(--border-color) calc(var(--pixelsPerHour, 220px) - 1px), var(--border-color) var(--pixelsPerHour, 220px)), repeating-linear-gradient(to bottom, transparent, transparent 59px, var(--border-color) 59px, var(--border-color) 60px); background-size: var(--pixelsPerHour, 220px) 60px; } +.epg-program-row { height: 60px; position: relative; } +.epg-program-item { position: absolute; height: calc(100% - 6px); top: 3px; background-color: var(--bg-element); border: 1px solid var(--border-color); border-left: 4px solid var(--accent-secondary); border-radius: var(--radius-sm); padding: 6px 10px; cursor: pointer; transition: var(--transition-fast), transform 0.1s ease-out, box-shadow 0.15s ease-out; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: 0.8rem; color: var(--text-primary); z-index: 1; display: flex; align-items: center; will-change: transform, box-shadow; } +.epg-program-item:hover { background-color: var(--bg-element-hover); border-left-color: var(--accent-primary); z-index: 2; box-shadow: 0 3px 10px color-mix(in srgb, var(--accent-primary) 25%, transparent); transform: scale(1.02); } +.epg-program-item.current { background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); border-color: transparent; border-left: 4px solid #fff; color: #fff; font-weight: 600; box-shadow: 0 0 15px color-mix(in srgb, var(--accent-primary) 40%, transparent); z-index: 3; } +.epg-current-time-line { position: absolute; top: 0; height: 100%; width: 3px; background-color: var(--danger); box-shadow: 0 0 8px var(--danger); z-index: 4; pointer-events: none; transition: transform 1s linear; opacity: 1; } +.epg-program-modal .modal-content { background-color: var(--bg-element); } +.epg-program-modal .modal-body { padding: 1.5rem; } +.epg-program-modal img { max-width: 150px; border-radius: var(--radius-sm); margin-bottom: 1rem; float: left; margin-right: 1.5rem; border: 1px solid var(--border-color); background-color: var(--bg-secondary); } +.epg-program-modal h5 { font-family: var(--font-heading); color: var(--accent-primary); margin-bottom: 1rem; } +.epg-program-modal p { color: var(--text-secondary); margin-bottom: 0.5rem; font-size: 0.9rem; } +.epg-program-modal p strong { color: var(--text-primary); font-weight: 500; } \ No newline at end of file diff --git a/css/generic_modals.css b/css/generic_modals.css new file mode 100644 index 0000000..d93b971 --- /dev/null +++ b/css/generic_modals.css @@ -0,0 +1,8 @@ +#loadFromDBModal .list-group-item { background-color: var(--bg-element); border: 1px solid var(--border-color); color: var(--text-primary); margin-bottom: 0.5rem; border-radius: var(--radius-md); padding: 0.8rem 1.2rem; transition: background-color var(--transition-fast); } +#loadFromDBModal .list-group-item:hover { background-color: var(--bg-element-hover); } +.delete-file-btn { background: transparent !important; border: 1px solid var(--danger) !important; color: var(--danger) !important; opacity: 0.7; border-radius: 50% !important; width: 32px; height: 32px; font-size: 0.9rem !important; padding: 0 !important; transition: background-color 0.15s ease, opacity 0.15s ease, color 0.15s ease; } +.delete-file-btn::before { content: "\1F5D1"; font-family: sans-serif; } +.delete-file-btn:hover { background: rgba(220, 53, 69, 0.15) !important; opacity: 1; color: var(--danger) !important; } +#daznTokenModal.modal { +z-index: 2001; +} \ No newline at end of file diff --git a/css/header.css b/css/header.css new file mode 100644 index 0000000..20a7160 --- /dev/null +++ b/css/header.css @@ -0,0 +1,39 @@ +.sidebar-toggle-btn { background: none; border: none; color: var(--text-secondary); font-size: 1.5rem; margin-right: 1rem; padding: 0.5rem; cursor: pointer; } +.sidebar-toggle-btn::before { content: "\2630"; font-family: sans-serif; } +.sidebar-toggle-btn:hover { color: var(--text-primary); } +.header-search-bar { position: relative; max-width: 350px; flex-grow: 1; } +.header-search-input { width: 100%; padding: 0.6rem 1rem 0.6rem 2.8rem; border-radius: var(--radius-md); border: 1px solid var(--border-color); background-color: var(--bg-element); color: var(--text-primary); font-size: 0.9rem; transition: var(--transition-smooth); } +.header-search-input:focus { outline: none; border-color: var(--accent-primary); background-color: var(--bg-element-hover); box-shadow: 0 0 0 3px var(--accent-primary-transparent); } +.header-search-icon { position: absolute; left: 1rem; top: 50%; transform: translateY(-50%); color: var(--text-tertiary); font-size: 0.9rem; } +.header-search-icon::before { content: "\1F50D"; font-family: sans-serif; } +.header-actions { margin-left: auto; display: flex; align-items: center; gap: 0.5rem; } +.header-actions .btn-header-action { background-color: var(--bg-element); border: 1px solid var(--border-color); color: var(--text-secondary); padding: 0.5rem 0.8rem; border-radius: var(--radius-md); font-size: 0.85rem; transition: var(--transition-fast); display: inline-flex; align-items: center; gap: 0.4rem; white-space: nowrap; } +.header-actions .btn-header-action:hover { background-color: var(--bg-element-hover); color: var(--text-primary); border-color: var(--border-color-strong); transform: translateY(-1px); } +.header-actions .btn-header-action:active { transform: translateY(0px) scale(0.98); } +.header-actions .btn-header-action .icon-placeholder { font-size: 1em; font-family: sans-serif; line-height: 1; } +.header-actions .btn-header-action .btn-text { display: none; } +#openEpgModalBtn .icon-placeholder::before { content: "\1F4C5"; } +#openSettingsModalBtn .icon-placeholder::before { content: "\2699"; } +#openXtreamModalBtn .icon-placeholder::before { content: "🚀"; } +.dropdown-item .icon-placeholder { font-size: 0.9em; width: 1.2em; text-align: center; display: inline-block;} +.xtream-info-bar { + background-color: var(--bg-secondary); + color: var(--text-secondary); + padding: 0.5rem 1rem; + font-size: 0.8rem; + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + gap: 1rem; + border-bottom: 1px solid var(--border-color); +} +.xtream-info-bar span { + display: flex; + align-items: center; + gap: 0.4rem; +} +.xtream-info-bar .fas { + color: var(--accent-primary); + opacity: 0.8; +} \ No newline at end of file diff --git a/css/layout.css b/css/layout.css new file mode 100644 index 0000000..864e5b3 --- /dev/null +++ b/css/layout.css @@ -0,0 +1,55 @@ +#app-container { + display: flex; + min-height: 100vh; +} +#sidebar { + width: var(--sidebar-width); + background-color: var(--bg-tertiary); + border-right: 1px solid var(--border-color); + padding: 1rem 1rem var(--taskbar-height) 1rem; + position: fixed; + top: 0; + left: 0; + height: 100vh; + z-index: 1040; + overflow-y: auto; + transition: transform var(--transition-smooth), box-shadow var(--transition-smooth); + transform: translateX(0); +} +#sidebar.collapsed { + transform: translateX(calc(-1 * var(--sidebar-width))); + box-shadow: none; +} +#sidebar:not(.collapsed) { + box-shadow: 5px 0 15px var(--shadow-color); +} +#main-content-wrapper { + flex-grow: 1; + display: flex; + flex-direction: column; + transition: margin-left var(--transition-smooth); + margin-left: var(--sidebar-width); +} +#app-container.sidebar-collapsed #main-content-wrapper { + margin-left: 0; +} +#top-header { + height: var(--header-height); + background-color: rgba(var(--rgb-bg-tertiary), 0.85); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border-bottom: 1px solid var(--border-color); + padding: 0 1rem; + display: flex; + align-items: center; + position: sticky; + top: 0; + z-index: 1030; + box-shadow: 0 2px 10px var(--shadow-color); +} +#main-content { + padding: 1.5rem; + flex-grow: 1; + overflow-y: auto; + padding-bottom: var(--taskbar-height); +} \ No newline at end of file diff --git a/css/modals_general.css b/css/modals_general.css new file mode 100644 index 0000000..6a20f2a --- /dev/null +++ b/css/modals_general.css @@ -0,0 +1,9 @@ +.modal.fade .modal-dialog { transition: transform .3s ease-out; transform: translateY(-50px); } +.modal.show .modal-dialog { transform: translateY(0); } +.modal-content { background-color: var(--bg-secondary); border-radius: var(--radius-lg); border: 1px solid var(--border-color); box-shadow: 0 10px 30px var(--shadow-color); color: var(--text-primary); } +.modal-header { border-bottom: 1px solid var(--border-color); padding: 1rem 1.5rem; } +.modal-header .modal-title { font-family: var(--font-heading); font-size: 1.4rem; color: var(--text-primary); } +.modal-header .btn-close { filter: invert(0.8) brightness(1.2); opacity: 0.8; transition: opacity 0.2s; } +.modal-header .btn-close:hover { opacity: 1; } +.modal-body { padding: 1.5rem; } +.modal-footer { border-top: 1px solid var(--border-color); padding: 1rem 1.5rem; background-color: var(--bg-tertiary); border-bottom-left-radius: var(--radius-lg); border-bottom-right-radius: var(--radius-lg); } \ No newline at end of file diff --git a/css/movistar_vod_modal.css b/css/movistar_vod_modal.css new file mode 100644 index 0000000..292b318 --- /dev/null +++ b/css/movistar_vod_modal.css @@ -0,0 +1,25 @@ +#movistarVODModal .modal-body { padding: 1rem; height: calc(100vh - 120px); display: flex; flex-direction: column; overflow: hidden; } +#movistarVODModal .form-control { background-color: var(--bg-element); border: 1px solid var(--border-color); color: var(--text-primary); } +#movistarVODModal-programs { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 1rem; padding-top:1rem; } +.movistar-vod-card { background-color: var(--bg-element); border-radius: var(--radius-md); overflow: hidden; border: 1px solid var(--border-color); box-shadow: 0 2px 4px var(--shadow-color); cursor: pointer; display:flex; flex-direction:column; } +.movistar-vod-card:hover { border-color: var(--accent-primary); box-shadow: 0 4px 8px var(--accent-primary-transparent); transform: translateY(-2px); } +.movistar-vod-card-img-container { width:100%; aspect-ratio: 16/10; background-color:var(--bg-secondary); overflow:hidden; display:flex; align-items:center; justify-content:center;} +.movistar-vod-card-img-container img { width:100%; height:100%; object-fit:cover;} +.movistar-vod-card-body { padding: 0.75rem; flex-grow:1; } +.movistar-vod-card-title { font-size: 0.95rem; font-weight: 600; color: var(--text-primary); margin-bottom: 0.25rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.movistar-vod-card-channel, .movistar-vod-card-time, .movistar-vod-card-genre { font-size: 0.75rem; color: var(--text-secondary); margin-bottom:0.1rem; } +#movistarVODModal-filters-container { display:flex; gap:1rem; margin-bottom:1rem; } +#movistarVODModal-filters-container .form-select, #movistarVODModal-filters-container .form-control {font-size:0.85rem;} +#movistarVODModal-channel-filter {flex-basis: 30%;} +#movistarVODModal-genre-filter {flex-basis: 30%;} +#movistarVODModal-search-input {flex-basis: 40%;} +#movistarVODModal-no-results { text-align: center; padding: 2rem; color: var(--text-secondary); font-size: 1.1rem; } +#movistarVODModal-pagination-controls { } + +#movistarVODProgramDetailsModal .modal-content { background-color: var(--bg-element); } +#movistarVODProgramDetailsModal .modal-body { padding: 1.5rem; max-height: 70vh; overflow-y: auto; } +#movistarVODProgramDetailsModal img { max-width: 100%; height: auto; max-height: 300px; border-radius: var(--radius-sm); margin-bottom: 1rem; border: 1px solid var(--border-color); background-color: var(--bg-secondary); } +#movistarVODProgramDetailsModal h5 { font-family: var(--font-heading); color: var(--accent-primary); margin-bottom: 1rem; font-size: 1.2rem;} +#movistarVODProgramDetailsModal p { color: var(--text-secondary); margin-bottom: 0.5rem; font-size: 0.9rem; } +#movistarVODProgramDetailsModal p strong { color: var(--text-primary); font-weight: 500; } +#movistarVODProgramDetailsModal .btn-control .icon-placeholder { margin-right: 0.3rem; } \ No newline at end of file diff --git a/css/player_modal.css b/css/player_modal.css new file mode 100644 index 0000000..8a1dbb0 --- /dev/null +++ b/css/player_modal.css @@ -0,0 +1,363 @@ +.player-window { + position: fixed; + top: 50px; + left: 50px; + width: 60vw; + height: 70vh; + max-width: 1000px; + min-width: 400px; + min-height: 300px; + background-color: rgba(0, 0, 0, var(--player-window-opacity, 1)); + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + box-shadow: 0 8px 30px var(--shadow-color); + z-index: 1950; + display: flex; + flex-direction: column; + pointer-events: auto; + resize: none; + transition: border-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out, background-color 0.3s ease-in-out; +} +.player-window.active { + border-color: var(--accent-primary); + box-shadow: 0 0 20px var(--accent-primary-transparent); +} +.modal-header-draggable { + cursor: move; +} +.player-window .modal-header { + border-bottom: 1px solid var(--border-color); + padding: 0.5rem 1rem; + background: rgba(var(--rgb-bg-tertiary), calc(0.8 * var(--player-window-opacity, 1))); + display: flex; + justify-content: space-between; + align-items: center; + flex-shrink: 0; +} +.player-window .modal-header .player-window-title { + font-size: 1rem; + color: var(--text-primary); + font-weight: 500; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-grow: 1; + margin-right: 1rem; +} +.player-window .modal-header .player-window-controls { + display: flex; + gap: 0.5rem; +} +.btn-window-control { + background: transparent; + border: none; + color: var(--text-secondary); + font-size: 1.2rem; + padding: 0.2rem; + line-height: 1; + transition: color 0.2s, transform 0.2s; + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; +} +.btn-window-control:hover { + color: var(--text-primary); + transform: scale(1.1); +} +.player-window-minimize-btn::before { content: "\2014"; } +.player-window-close-btn::before { content: "\00D7"; } + +.player-window .modal-body { + padding: 0; + flex-grow: 1; + display: flex; + overflow: hidden; + position: relative; + background: transparent; +} +.player-window .player-container { + width: 100%; + height: 100%; + background-color: transparent; + position: relative; + flex-grow: 1; + display: flex; + overflow: hidden; +} +.player-window .player-video { + width: 100%; + height: 100%; + flex-grow: 1; +} +.resize-handle { + position: absolute; + bottom: 0; + right: 0; + width: 16px; + height: 16px; + cursor: se-resize; + z-index: 100; +} +.resize-handle::after { + content: ''; + position: absolute; + bottom: 2px; + right: 2px; + width: 8px; + height: 8px; + border-bottom: 2px solid rgba(255,255,255,0.4); + border-right: 2px solid rgba(255,255,255,0.4); +} + +#player-taskbar { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + height: var(--taskbar-height); + background-color: rgba(var(--rgb-bg-tertiary), 0.9); + backdrop-filter: blur(10px); + border-top: 1px solid var(--border-color); + z-index: 2000; + display: flex; + align-items: center; + padding: 0 0.75rem; + gap: 0.75rem; + overflow-x: auto; + box-shadow: 0 -2px 10px rgba(0,0,0,0.2); +} +.taskbar-item { + background-color: var(--bg-element); + border: 1px solid var(--border-color); + color: var(--text-secondary); + padding: 0.5rem 1rem; + border-radius: var(--radius-md); + font-size: 0.85rem; + cursor: pointer; + transition: var(--transition-smooth); + display: flex; + align-items: center; + gap: 0.6rem; + flex-shrink: 0; +} +.taskbar-item-icon-container { + width: 24px; + height: 24px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + border-radius: var(--radius-sm); + background-color: rgba(255,255,255,0.05); + overflow: hidden; +} +.taskbar-item-logo { + width: 100%; + height: 100%; + object-fit: contain; +} +.taskbar-item-logo-placeholder { + font-size: 0.9rem; + font-weight: 600; + color: var(--text-primary); + display: inline-flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; +} +.taskbar-item-text { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 120px; +} +.taskbar-item:hover { + background-color: var(--bg-element-hover); + color: var(--text-primary); + border-color: var(--border-color-strong); + transform: translateY(-2px); + box-shadow: 0 4px 8px var(--shadow-color); +} +.taskbar-item.active { + color: var(--text-primary); + font-weight: 500; + border-color: var(--accent-primary); + background-color: color-mix(in srgb, var(--accent-primary) 20%, var(--bg-element)); + box-shadow: 0 0 12px color-mix(in srgb, var(--accent-primary) 50%, transparent), + inset 0 0 15px color-mix(in srgb, var(--accent-primary) 15%, transparent); + transform: translateY(-2px) scale(1.02); +} + + +video::-webkit-media-controls { display: none !important; } +video::-webkit-media-controls-enclosure { display: none !important; } +video::-webkit-media-controls-panel { display: none !important; -webkit-appearance: none; } +video::-moz-media-controls { display: none !important; } +.player-infobar { position: absolute; bottom: 15px; left: 20px; right: 20px; background-color: rgba(var(--rgb-bg-tertiary), 0.85); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: var(--radius-lg); padding: 1rem 1.5rem; display: flex; align-items: center; gap: 1.25rem; z-index: 100; opacity: 0; transform: translateY(30px) scale(0.95); transition: opacity 0.3s ease-out, transform 0.3s ease-out; pointer-events: none; box-shadow: 0 8px 32px rgba(0,0,0,0.3); } +.player-infobar.show { opacity: 1; transform: translateY(0) scale(1); pointer-events: auto; } +.infobar-logo { height: 60px; width: auto; max-width: 110px; object-fit: contain; flex-shrink: 0; filter: drop-shadow(0 2px 4px rgba(0,0,0,0.5)); } +.infobar-details { flex-grow: 1; min-width: 0; } +.infobar-channel-name { font-size: 1.5rem; font-weight: 700; color: var(--text-primary); margin: 0 0 0.25rem 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-shadow: 1px 1px 3px rgba(0,0,0,0.4); } +.infobar-epg-current { font-size: 1.05rem; font-weight: 500; color: var(--accent-primary); margin-bottom: 0.25rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-shadow: 1px 1px 2px rgba(0,0,0,0.3); } +.infobar-epg-next { font-size: 0.85rem; color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; opacity: 0.9; } +.infobar-epg-progress-container { width: 100%; height: 6px; background-color: rgba(255, 255, 255, 0.15); border-radius: 3px; margin-top: 0.6rem; overflow: hidden; } +.infobar-epg-progress { height: 100%; background-color: var(--accent-primary); border-radius: 3px; width: 0%; transition: width 1s linear; box-shadow: 0 0 8px var(--accent-primary-transparent); } +.infobar-time { font-size: 2.2rem; font-weight: 700; color: var(--text-primary); flex-shrink: 0; text-shadow: 1px 1px 4px rgba(0,0,0,0.5); } +.shaka-spinner-path { stroke: var(--accent-primary) !important; stroke-width: 5px !important; } +.shaka-bottom-controls { background: none !important; border-top: none !important; padding: 10px 15px !important; transition: opacity 0.25s ease-in-out !important; } +.shaka-controls-button-panel button>i.material-icons-round { font-size: 26px !important; color: var(--text-primary) !important; opacity: 1 !important; transition: color 0.15s ease, opacity 0.15s ease, transform 0.1s ease; text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.9), 0px 0px 10px rgba(0, 0, 0, 0.8) !important; } +.shaka-controls-button-panel button:hover>i.material-icons-round { opacity: 1 !important; color: var(--accent-primary) !important; transform: scale(1.1); } +.shaka-current-time, .shaka-time-divider, .shaka-duration { color: var(--text-primary) !important; opacity: 0.95 !important; text-shadow: 1px 1px 5px rgba(0, 0, 0, 0.95) !important; font-weight: 500; font-size: 0.9rem; } +input[type=range].shaka-volume-bar, input[type=range].shaka-seek-bar { background: transparent !important; border: none !important; height: 10px !important; } +input[type=range].shaka-volume-bar::-webkit-slider-runnable-track, input[type=range].shaka-seek-bar::-webkit-slider-runnable-track { height: 10px !important; background: transparent !important; } +input[type=range].shaka-volume-bar::-webkit-slider-thumb, input[type=range].shaka-seek-bar::-webkit-slider-thumb { background: var(--accent-primary) !important; border: 2px solid rgba(0,0,0,0.4) !important; box-shadow: 0 0 6px var(--accent-primary), 0 0 4px rgba(0,0,0,0.7); height: 18px !important; width: 18px !important; margin-top: -4px !important; } +input[type=range].shaka-seek-bar { -webkit-appearance: none; appearance: none; width: 100%; height: 10px; cursor: pointer; position: relative; } +.shaka-seek-bar-container { --shaka-bar-color: var(--accent-primary) !important; --shaka-buffer-bar-color: rgba(200, 200, 200, 0.5) !important; --shaka-bg-color: transparent !important; height: 10px; } +.shaka-range-container > div[второй-child], .shaka-seek-bar-container > div:not(.shaka-buffer-bar) { background: transparent !important; } +.shaka-overflow-menu, .shaka-settings-menu { background-color: rgba(var(--rgb-bg-secondary, 22, 27, 34), 0.98) !important; border: 1px solid var(--border-color-strong) !important; border-radius: var(--radius-md) !important; backdrop-filter: blur(10px) !important; -webkit-backdrop-filter: blur(10px) !important; box-shadow: 0 5px 15px rgba(0,0,0,0.3); } +.shaka-overflow-menu button, .shaka-settings-menu button { color: var(--text-primary) !important; padding: 12px 18px !important; font-size: 0.95rem !important; transition: background-color 0.15s ease, color 0.15s ease !important; } +.shaka-overflow-menu button:hover, .shaka-settings-menu button:hover, .shaka-overflow-menu button[aria-pressed="true"], .shaka-settings-menu button[aria-pressed="true"] { background-color: var(--accent-primary) !important; color: #fff !important; } +.shaka-text-input { background-color: var(--bg-element) !important; color: var(--text-primary) !important; border: 1px solid var(--border-color) !important; } + +.player-channel-list-panel { + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 280px; + background-color: var(--bg-secondary); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + border-right: 1px solid var(--border-color); + z-index: 15; + transform: translateX(-100%); + transition: transform var(--transition-smooth), box-shadow var(--transition-smooth); + display: flex; + flex-direction: column; + box-shadow: 2px 0 10px rgba(0,0,0,0.4); +} + +.player-channel-list-panel.open { + transform: translateX(0); + box-shadow: 2px 0 15px rgba(0,0,0,0.5); +} + +.player-channel-list-header { + padding: 0.75rem 1rem; + font-size: 0.9rem; + font-weight: 600; + color: var(--text-primary); + border-bottom: 1px solid var(--border-color); + flex-shrink: 0; + background-color: var(--bg-hover); +} + +.player-channel-list-content { + flex-grow: 1; + overflow-y: auto; + padding: 0.5rem 0; +} +.player-channel-list-content::-webkit-scrollbar { width: 6px; height: 6px; } +.player-channel-list-content::-webkit-scrollbar-track { background: transparent; } +.player-channel-list-content::-webkit-scrollbar-thumb { background-color: var(--accent-primary); border-radius: var(--radius-sm); border: 1px solid var(--bg-secondary); } + + +.player-channel-list-group-header { + padding: 0.5rem 1rem; + font-size: 0.8rem; + font-weight: bold; + color: var(--accent-primary); + background-color: var(--bg-element); + border-top: 1px solid var(--border-color); + border-bottom: 1px solid var(--border-color); + margin-top: 0.5rem; +} +.player-channel-list-group-header:first-child { + margin-top: 0; + border-top: none; +} + +.player-channel-list-item { + display: flex; + align-items: center; + padding: 0.5rem 1rem; + cursor: pointer; + transition: background-color var(--transition-fast); + border-bottom: 1px solid var(--border-color-strong); +} +.player-channel-list-item:last-child { + border-bottom: none; +} + +.player-channel-list-item:hover, .player-channel-list-item.active { + background-color: var(--bg-hover); +} +.player-channel-list-item.active { + background-color: color-mix(in srgb, var(--accent-primary) 20%, transparent); + border-left: 3px solid var(--accent-primary); + padding-left: calc(1rem - 3px); +} + +.player-channel-list-logo { + width: 40px; + height: 30px; + object-fit: contain; + margin-right: 0.75rem; + flex-shrink: 0; + border-radius: var(--radius-sm); + background-color: rgba(255,255,255,0.05); +} +.player-channel-list-logo-placeholder { + width: 40px; + height: 30px; + margin-right: 0.75rem; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.2rem; + color: var(--text-tertiary); + background-color: rgba(255,255,255,0.03); + border-radius: var(--radius-sm); +} +.player-channel-list-logo-placeholder::before { + content: "\1F4FA"; + font-family: sans-serif; +} + + +.player-channel-list-info { + display: flex; + flex-direction: column; + overflow: hidden; + flex-grow: 1; +} + +.player-channel-list-name { + font-size: 0.85rem; + color: var(--text-primary); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-weight: 500; +} + +.player-channel-list-epg { + font-size: 0.7rem; + color: var(--text-secondary); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-top: 0.1rem; +} +.player-channel-list-epg.no-epg { + opacity: 0.6; + font-style: italic; +} + +.shaka-channel-list-button > i.material-icons-round { + font-size: 24px !important; +} \ No newline at end of file diff --git a/css/responsive.css b/css/responsive.css new file mode 100644 index 0000000..35253ff --- /dev/null +++ b/css/responsive.css @@ -0,0 +1,71 @@ +@media (min-width: 768px) { + .header-actions .btn-header-action .btn-text { display: inline; margin-left: 0.25rem; } + .header-actions .btn-header-action { padding: 0.5rem 1rem; } +} + +@media (max-width: 992px) { /* Adjusted from 991.98px for consistency */ + :root { --sidebar-width: 240px; --header-height: 60px; --m3u-grid-minmax-size: 160px; } + #sidebar { transform: translateX(calc(-1 * var(--sidebar-width))); box-shadow: none; } + #sidebar.expanded { transform: translateX(0); box-shadow: 5px 0 15px var(--shadow-color); } + #main-content-wrapper { margin-left: 0; } + .sidebar-toggle-btn { display: inline-flex; } + .header-search-bar { max-width: 250px; } + .header-actions .btn-header-action { padding: 0.5rem 0.7rem; gap: 0.3rem; } + .epg-channels { width: 200px; } + #playerModal .modal-header .modal-title { font-size: 1rem; } + #playerModal .modal-header .current-program-player { font-size: 0.75rem; } + #settingsModal .nav-pills.flex-column { flex-direction: row !important; flex-wrap: wrap; } + #settingsModal .nav-pills .nav-link { flex-grow: 1; text-align: center; } + #settingsModal .tab-content { padding-left: 0; border-left: none; margin-top: 1rem; } +} + +@media (max-width: 767.98px) { + :root { --header-height: 55px; --m3u-grid-minmax-size: 140px; } + #top-header { padding: 0 0.75rem; } + #main-content { padding: 1rem; } + .m3u-grid { gap: 1rem; } + .channel-name { font-size: 0.85rem; } + .channel-epg-info { font-size: 0.65rem; } + #player-container { height: 60vh; } + #playerModal .modal-dialog { margin: 0.5rem; } + .epg-channels { width: 180px; } + .epg-channel-item { height: 55px; padding: 6px 10px; font-size: 0.85rem; } + .epg-channel-item img, .epg-channel-item .epg-icon-placeholder { width: 35px; height: 35px; margin-right: 8px; } + .epg-programs { background-size: var(--pixelsPerHour, 180px) 55px; } + .epg-program-row { height: 55px; } + #settingsModal .modal-dialog { max-width: 95%; } + #settingsModal .nav-pills .nav-link { padding: 0.5rem 0.75rem; font-size: 0.85rem; } + .header-search-bar { display: none; } + .header-actions { gap: 0.2rem; flex-wrap: nowrap; overflow-x: auto; padding-bottom: 2px; } + .header-actions .btn-header-action { padding: 0.4rem 0.6rem; } + .header-actions .btn-header-action .btn-text { display: none; } + #movistarVODModal-filters-container { flex-direction:column; } +} + +@media (max-width: 576px) { + :root { --m3u-grid-minmax-size: 120px; } + #playerModal .modal-dialog { max-width: none; margin: 0; height: 100%; } + #playerModal .modal-content { height: 100%; border-radius: 0; } + #player-container { height: calc(100vh - var(--header-height) - 2px); min-height: 250px; } + .m3u-grid { gap: 0.75rem; } + .channel-card { border-radius: var(--radius-sm); } + .channel-logo-container { aspect-ratio: 4/3; } + .channel-info { padding: 0.6rem; } + .channel-name { font-size: 0.8rem; } + .favorite-btn { width: 26px; height: 26px; font-size: 0.8rem; } + .m3u-load-area { padding: 1rem; } + .m3u-load-area .row>div:not(:last-child) { margin-bottom: 0.75rem; } + .filter-tabs-container { gap: 0.2rem; overflow-x: auto; padding-bottom: 0.1rem; } + .filter-tab-btn { padding: 0.5rem 0.75rem; font-size: 0.9rem; white-space: nowrap; } + .filter-tab-btn.active::after { bottom: 0px; } + .epg-channels { width: 140px; } + .epg-channel-item { height: 50px; padding: 5px 8px; font-size: 0.8rem; } + .epg-channel-item img, .epg-channel-item .epg-icon-placeholder { width: 30px; height: 30px; } + .epg-time-slot { min-width: 80px; font-size: 0.8rem; } + .epg-programs { background-size: var(--pixelsPerHour, 160px) 50px; } + .epg-program-row { height: 50px; } + .epg-program-item { font-size: 0.75rem; padding: 5px 8px; } + #epgProgramModal .modal-body img { float: none; display: block; margin: 0 auto 1rem auto; } + #settingsModal .modal-dialog { max-width: 100%; margin: 0.5rem; } + #movistarVODModal-programs { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); } +} \ No newline at end of file diff --git a/css/settings_modal.css b/css/settings_modal.css new file mode 100644 index 0000000..cd2a09e --- /dev/null +++ b/css/settings_modal.css @@ -0,0 +1,64 @@ +#settingsModalLabel .icon-placeholder::before, #settingsModal .settings-group-title .icon-placeholder::before, #settingsModal .nav-link .icon-placeholder::before { content: ""; margin-right: 0.5rem; font-family: sans-serif; font-size: 0.9em; opacity: 0.8; display: inline-block; width: 1.2em; text-align: center; } +#settingsModalLabel .icon-placeholder::before { content: "\2699"; } +#generalUISettingsTab .icon-placeholder::before { content: "\1F3A8"; } +#shakaPlayerSettingsTab .icon-placeholder::before { content: "\1F3A5"; } +#shakaNetworkSettingsTab .icon-placeholder::before { content: "\1F4E1"; } +#epgSettingsTab .icon-placeholder::before { content: "\1F4C5"; } +#xcodecSettingsTab .icon-placeholder::before { content: "⚙️"; font-style: normal; } +#barTvSettingsTab .icon-placeholder::before { content: "🍺"; font-style: normal; } +#orangeTvSettingsTab .icon-placeholder::before { content: "🍊"; font-style: normal; } +#globalNetworkSettingsTab .icon-placeholder::before { content: "\1F310"; } +#daznSettingsTab .icon-placeholder::before { content: "📺"; } +#movistarSettingsTab .icon-placeholder::before { content: "Ⓜ️"; font-style: normal;} +#appDataManagementTab .icon-placeholder::before { content: "\1F4BE"; } +#sendM3uToServerTab .icon-placeholder::before { content: "📡"; } +#settingsModal .form-check-input { background-color: var(--bg-element); border-color: var(--border-color-strong); } +#settingsModal .form-check-input:checked { background-color: var(--accent-primary); border-color: var(--accent-secondary); } +#settingsModal .form-check-input:focus { box-shadow: 0 0 0 0.25rem var(--accent-primary-transparent); } +#settingsModal .form-check-label { margin-left: 0.5em; font-size: 0.9rem; } +.form-switch .form-check-input { width: 2.2em; height: 1.2em; margin-top: 0.2em; } +#settingsModal .form-range { height: 1.3rem; padding: 0; } +#settingsModal .form-range:focus { box-shadow: none; } +#settingsModal .form-range::-webkit-slider-thumb { width: 1.3rem; height: 1.3rem; margin-top: -0.4rem; background-color: var(--accent-primary); border-radius: 50%; border: none; transition: background-color 0.15s ease-in-out; } +#settingsModal .form-range::-webkit-slider-thumb:hover { background-color: var(--accent-hover); } +#settingsModal .form-range::-moz-range-thumb { width: 1.3rem; height: 1.3rem; background-color: var(--accent-primary); border-radius: 50%; border: none; transition: background-color 0.15s ease-in-out; } +#settingsModal .form-range::-moz-range-thumb:hover { background-color: var(--accent-hover); } +#settingsModal .settings-group-title { font-family: var(--font-heading); color: var(--accent-primary); border-bottom: 1px solid var(--border-color); padding-bottom: 0.5rem; margin-bottom: 1rem; margin-top: 1.5rem; } +#settingsModal .tab-pane > .settings-group-title:first-of-type { margin-top: 0; } +#settingsModal .modal-dialog { max-width: 1100px; } +#settingsModal .nav-pills .nav-link { color: var(--text-secondary); border-radius: var(--radius-md); margin-bottom: 0.25rem; text-align: left; padding: 0.6rem 1rem; } +#settingsModal .nav-pills .nav-link:hover { background-color: var(--bg-element-hover); color: var(--text-primary); } +#settingsModal .nav-pills .nav-link.active { background-color: var(--accent-primary); color: white; font-weight: 600; } +#settingsModal .tab-content { padding-left: 1.5rem; border-left: 1px solid var(--border-color); height: 100%; } +#movistarLongTokensTableBodySettings td, #movistarLongTokensTableBodySettings th { + padding: 0.4rem 0.5rem; + font-size: 0.75rem !important; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +#movistarLongTokensTableBodySettings td:first-child, #movistarLongTokensTableBodySettings th:first-child { max-width: 120px; } +#movistarLongTokensTableBodySettings td:nth-child(2), #movistarLongTokensTableBodySettings th:nth-child(2) { max-width: 100px; } +#movistarLongTokensTableBodySettings td:nth-child(3), #movistarLongTokensTableBodySettings th:nth-child(3) { max-width: 80px; } +#movistarLongTokensTableBodySettings td:nth-child(4), #movistarLongTokensTableBodySettings th:nth-child(4) { max-width: 130px; } +#movistarLongTokensTableBodySettings td:nth-child(5), #movistarLongTokensTableBodySettings th:nth-child(5) { max-width: 100px; text-align: center;} +#movistarLongTokensTableBodySettings td:last-child, #movistarLongTokensTableBodySettings th:last-child { width: 90px; text-align: center;} +#movistarDevicesListForSettings .list-group-item { + padding: 0.5rem 0.75rem; + font-size: 0.8rem !important; +} +#movistarDevicesListForSettings .form-check-label { font-size: inherit !important; } +#orangeTvGroupSelectionContainer .form-check { + min-width: 150px; + flex-basis: auto; +} +#generatedPhpCode { + font-family: var(--font-monospace); + background-color: var(--bg-primary); + color: #cdd3de; + border-color: var(--border-color-strong); + font-size: 0.8rem; + white-space: pre; + word-wrap: normal; + overflow-x: auto; +} \ No newline at end of file diff --git a/css/sidebar.css b/css/sidebar.css new file mode 100644 index 0000000..baeb2f5 --- /dev/null +++ b/css/sidebar.css @@ -0,0 +1,8 @@ +.sidebar-header { padding-bottom: 1rem; margin-bottom: 1rem; border-bottom: 1px solid var(--border-color); } +.sidebar-logo { font-family: var(--font-heading); font-weight: 700; font-size: 1.7rem; color: var(--accent-primary); text-decoration: none; } +.sidebar-logo:hover { color: var(--accent-hover); } +#group-filter-sidebar { width: 100%; margin-bottom: 1rem; } /* Keep with sidebar form elements or move to forms.css */ +.group-list-sidebar { list-style: none; padding: 0; margin: 0; } +.group-list-sidebar .list-group-item { background-color: transparent; color: var(--text-secondary); border: none; padding: 0.6rem 0.5rem; border-radius: var(--radius-sm); cursor: pointer; font-size: 0.9rem; transition: var(--transition-fast); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.group-list-sidebar .list-group-item:hover, .group-list-sidebar .list-group-item.active { background-color: var(--bg-element); color: var(--text-primary); } +.group-list-sidebar .list-group-item.active { font-weight: 600; color: var(--accent-primary); } \ No newline at end of file diff --git a/css/xtream_modal.css b/css/xtream_modal.css new file mode 100644 index 0000000..32ae0a7 --- /dev/null +++ b/css/xtream_modal.css @@ -0,0 +1,74 @@ +#xtreamConnectionModal .list-group-item { background-color: var(--bg-element); border: 1px solid var(--border-color); color: var(--text-primary); margin-bottom: 0.5rem; border-radius: var(--radius-md); padding: 0.7rem 1rem; font-size: 0.9rem; transition: background-color var(--transition-fast); cursor: pointer; } +#xtreamConnectionModal .list-group-item:hover { background-color: var(--bg-element-hover); } +#xtreamConnectionModal .list-group-item strong { color: var(--text-primary); font-weight: 500; } +#xtreamConnectionModal .list-group-item small { font-size: 0.8rem; } +.delete-xtream-server-btn { background: transparent !important; border: 1px solid var(--danger) !important; color: var(--danger) !important; opacity: 0.7; border-radius: 50% !important; width: 32px; height: 32px; font-size: 0.9rem !important; padding: 0 !important; transition: background-color 0.15s ease, opacity 0.15s ease, color 0.15s ease; } +.delete-xtream-server-btn::before { content: "\1F5D1"; font-family: sans-serif; } +.delete-xtream-server-btn:hover { background: rgba(220, 53, 69, 0.15) !important; opacity: 1; color: var(--danger) !important; } + +#xtreamGroupSelectionModal .xtream-group-list-container { + max-height: 55vh; + overflow-y: auto; + padding: 0.5rem; + background-color: var(--bg-primary); + border: 1px solid var(--border-color); + border-radius: var(--radius-md); +} + +#xtreamGroupSelectionModal .list-group-item { + background-color: var(--bg-element); + border-color: var(--border-color); + color: var(--text-primary); + padding: 0.5rem 1rem; + font-size: 0.85rem; + border-bottom: 1px solid var(--border-color); +} +#xtreamGroupSelectionModal .list-group-item:last-child { + border-bottom: none; +} + +#xtreamGroupSelectionModal .form-check-label { + cursor: pointer; +} + +#manageXCodecPanelsModal .list-group-item, #xcodecPreviewModal .list-group-item { + background-color: var(--bg-element); + border: 1px solid var(--border-color); + color: var(--text-primary); + margin-bottom: 0.5rem; + border-radius: var(--radius-md); + padding: 0.7rem 1rem; + font-size: 0.9rem; + transition: background-color var(--transition-fast); +} +#manageXCodecPanelsModal .list-group-item:hover, #xcodecPreviewModal .list-group-item:hover:not(.active) { + background-color: var(--bg-element-hover); +} +#manageXCodecPanelsModal .list-group-item strong, #xcodecPreviewModal .list-group-item strong { + color: var(--text-primary); + font-weight: 500; +} +#manageXCodecPanelsModal .list-group-item small, #xcodecPreviewModal .list-group-item small { + font-size: 0.8rem; +} +#manageXCodecPanelsModal .delete-xcodec-panel-btn, #manageXCodecPanelsModal .load-xcodec-panel-btn, #manageXCodecPanelsModal .process-xcodec-panel-direct-btn { + opacity: 0.8; +} +#manageXCodecPanelsModal .delete-xcodec-panel-btn:hover, #manageXCodecPanelsModal .load-xcodec-panel-btn:hover, #manageXCodecPanelsModal .process-xcodec-panel-direct-btn:hover { + opacity: 1; +} +#xcodecPreviewModal .list-group-item.active { + background-color: var(--accent-primary); + color: white; + border-color: var(--accent-secondary); +} +#xcodecPreviewModal .form-check-label { + cursor: pointer; + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +#xcodecPreviewModal .form-check-input { + margin-top: 0.3em; +} \ No newline at end of file diff --git a/dazn_handler.js b/dazn_handler.js new file mode 100644 index 0000000..d9332bd --- /dev/null +++ b/dazn_handler.js @@ -0,0 +1,372 @@ +const DAZN_API_PLAYBACK = 'https://api.playback.indazn.com/v5/Playback'; +const DAZN_API_REFRESH_TOKEN = 'https://ott-authz-bff-prod.ar.indazn.com/v5/RefreshAccessToken'; +const DAZN_API_RAIL = 'https://rail-router.discovery.indazn.com/eu/v7/Rail'; +const DAZN_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'; +let daznTokenPromiseResolver = null; + +function decodeJwtPayload(token) { + if (!token || typeof token !== 'string') return null; + try { + const parts = token.split('.'); + if (parts.length !== 3) return null; + const payloadBase64 = parts[1]; + if (!payloadBase64) return null; + const decoded = atob(payloadBase64.replace(/-/g, '+').replace(/_/g, '/')); + return JSON.parse(decoded); + } catch (e) { + return null; + } +} + +function showDaznTokenModal() { + return new Promise((resolve) => { + daznTokenPromiseResolver = resolve; + try { + const daznModalEl = document.getElementById('daznTokenModal'); + if (!daznModalEl) { + resolve({ token: null, remember: false }); + daznTokenPromiseResolver = null; + return; + } + const daznModal = bootstrap.Modal.getOrCreateInstance(daznModalEl, { backdrop: 'static', keyboard: false }); + $('#daznTokenModalInput').val(''); + $('#daznRememberTokenCheck').prop('checked', true); + daznModal.show(); + } catch (e) { + resolve({ token: null, remember: false }); + daznTokenPromiseResolver = null; + } + }); +} + +$(document).on('click', '#submitDaznTokenBtn', async () => { + const tokenInput = $('#daznTokenModalInput').val(); + const rememberToken = $('#daznRememberTokenCheck').is(':checked'); + const currentResolver = daznTokenPromiseResolver; + daznTokenPromiseResolver = null; + if (currentResolver) { + currentResolver({ token: tokenInput, remember: rememberToken }); + } + const daznModalEl = document.getElementById('daznTokenModal'); + if (daznModalEl) { + const daznModalInstance = bootstrap.Modal.getInstance(daznModalEl); + if (daznModalInstance) { + daznModalInstance.hide(); + } + } +}); + +$(document).on('click', '#cancelDaznTokenBtn', () => { + const currentResolver = daznTokenPromiseResolver; + daznTokenPromiseResolver = null; + if (currentResolver) { + currentResolver({ token: null, remember: false }); + } + const daznModalEl = document.getElementById('daznTokenModal'); + if (daznModalEl) { + const daznModalInstance = bootstrap.Modal.getInstance(daznModalEl); + if (daznModalInstance) { + daznModalInstance.hide(); + } + } +}); + + +async function getDaznTokenFromUserInputOrSettings() { + let token = daznAuthTokenState; + if (!token) { + if (typeof showLoading === 'function') showLoading(true, 'Esperando token DAZN...'); + const modalResult = await showDaznTokenModal(); + if (typeof showLoading === 'function') showLoading(false); + + const userInputToken = modalResult.token; + const remember = modalResult.remember; + + if (userInputToken && userInputToken.trim() !== '') { + daznAuthTokenState = userInputToken.trim(); + if (remember && typeof saveAppConfigValue === 'function' && typeof DAZN_TOKEN_DB_KEY !== 'undefined') { + try { + await saveAppConfigValue(DAZN_TOKEN_DB_KEY, daznAuthTokenState); + if (typeof showNotification === 'function') showNotification('DAZN: Token guardado.', 'success'); + if (typeof populateUserSettingsForm === 'function') populateUserSettingsForm(); + } catch (e) { + if(typeof showNotification === 'function') showNotification('DAZN: Error al guardar token en BD.', 'error'); + } + } else if (!remember && typeof deleteAppConfigValue === 'function' && typeof DAZN_TOKEN_DB_KEY !== 'undefined') { + try { + const existingToken = await getAppConfigValue(DAZN_TOKEN_DB_KEY); + if (existingToken) { + await deleteAppConfigValue(DAZN_TOKEN_DB_KEY); + } + } catch (e) { console.warn("DAZN: Error revisando/borrando token de BD al no recordar", e); } + if (typeof populateUserSettingsForm === 'function') populateUserSettingsForm(); + } + return daznAuthTokenState; + } + if (typeof showNotification === 'function' && !userInputToken) showNotification('DAZN: Operación de token cancelada o token vacío.', 'info'); + return null; + } + return token; +} + +async function refreshDaznToken(currentToken, specificUserAgent = null) { + if (!currentToken) return null; + if (typeof showLoading === 'function') showLoading(true, 'Refrescando token DAZN...'); + const userAgentToUse = specificUserAgent || DAZN_USER_AGENT; + + try { + const decoded = decodeJwtPayload(currentToken); + if (!decoded || !decoded.deviceId) { + if (typeof showNotification === 'function') showNotification('DAZN: Token inválido o no se pudo decodificar deviceId para refrescar.', 'error'); + daznAuthTokenState = null; + if (typeof deleteAppConfigValue === 'function' && typeof DAZN_TOKEN_DB_KEY !== 'undefined') { + try { await deleteAppConfigValue(DAZN_TOKEN_DB_KEY); } catch (e) { } + } + if (typeof populateUserSettingsForm === 'function') populateUserSettingsForm(); + return null; + } + + const device_id_suffix = decoded.deviceId.split('-').pop(); + if (!device_id_suffix) { + if (typeof showNotification === 'function') showNotification('DAZN: DeviceId con formato inesperado.', 'error'); + return null; + } + + const response = await fetch(DAZN_API_REFRESH_TOKEN, { + method: 'POST', + headers: { + 'Accept': 'application/json, text/plain, */*', + 'Authorization': `Bearer ${currentToken}`, + 'Content-Type': 'application/json', + 'User-Agent': userAgentToUse + }, + body: JSON.stringify({ DeviceId: device_id_suffix }) + }); + + if (!response.ok) { + const errorText = await response.text().catch(() => `HTTP ${response.status}`); + if (response.status === 401 || response.status === 403) { + daznAuthTokenState = null; + if (typeof deleteAppConfigValue === 'function' && typeof DAZN_TOKEN_DB_KEY !== 'undefined') { + try { await deleteAppConfigValue(DAZN_TOKEN_DB_KEY); } catch (e) { } + } + if (typeof populateUserSettingsForm === 'function') populateUserSettingsForm(); + if (typeof showNotification === 'function') showNotification('DAZN: Token inválido/expirado. Se solicitará uno nuevo al intentar la operación.', 'warning'); + return null; + } + throw new Error(`Error ${response.status} al refrescar token: ${errorText.substring(0,100)}`); + } + + const data = await response.json(); + const newToken = data?.AuthToken?.Token; + + if (newToken) { + daznAuthTokenState = newToken; + const storedTokenShouldBeRemembered = await getAppConfigValue(DAZN_TOKEN_DB_KEY); + + if (storedTokenShouldBeRemembered && typeof saveAppConfigValue === 'function' && typeof DAZN_TOKEN_DB_KEY !== 'undefined') { + try { + await saveAppConfigValue(DAZN_TOKEN_DB_KEY, daznAuthTokenState); + if (typeof showNotification === 'function') showNotification('DAZN: Token refrescado y guardado exitosamente.', 'success'); + } catch (e) { + if (typeof showNotification === 'function') showNotification('DAZN: Token refrescado, pero error al guardar en BD.', 'warning'); + } + } else if (storedTokenShouldBeRemembered === null) { + if (typeof showNotification === 'function') showNotification('DAZN: Token refrescado (sesión actual).', 'info'); + } + if (typeof populateUserSettingsForm === 'function') populateUserSettingsForm(); + return newToken; + } else { + throw new Error('Respuesta de refresco de token no contenía un nuevo token.'); + } + } catch (error) { + if (typeof showNotification === 'function') showNotification(`DAZN: Error refrescando token: ${error.message}`, 'error'); + return null; + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} + +async function getActiveDaznToken(forceUserInputIfInvalid = false, specificUserAgent = null) { + let currentToken = daznAuthTokenState; + + if (!currentToken) { + currentToken = await getDaznTokenFromUserInputOrSettings(); + if (!currentToken) { + return null; + } + return currentToken; + } + + const refreshedToken = await refreshDaznToken(currentToken, specificUserAgent); + if (refreshedToken) { + return refreshedToken; + } else { + if (forceUserInputIfInvalid) { + if (typeof showNotification === 'function') showNotification('DAZN: El token actual no pudo ser refrescado. Se solicitará uno nuevo.', 'warning'); + daznAuthTokenState = null; + currentToken = await getDaznTokenFromUserInputOrSettings(); + if (!currentToken) { + return null; + } + return currentToken; + } else { + if (typeof showNotification === 'function') showNotification('DAZN: El token actual no pudo ser refrescado y no se forzó la entrada de uno nuevo. Usando token anterior si existe.', 'warning'); + return currentToken; + } + } +} + + +async function fetchSingleDaznAssetDetails(authToken, assetId, specificUserAgent = null) { + const decodedToken = decodeJwtPayload(authToken); + if (!decodedToken || !decodedToken.deviceId) { + if (typeof showNotification === 'function') showNotification('DAZN: No se pudo decodificar deviceId del token activo.', 'error'); + return null; + } + + const userAgentToUse = specificUserAgent || DAZN_USER_AGENT; + + const params = new URLSearchParams({ + 'AppVersion': '0.60.0', + 'DrmType': 'WIDEVINE', + 'Format': 'MPEG-DASH', + 'PlayerId': '@dazn/peng-html5-core/web/web', + 'Platform': 'web', + 'LanguageCode': 'es', + 'Model': 'unknown', + 'Secure': 'true', + 'Manufacturer': 'microsoft', + 'PlayReadyInitiator': 'false', + 'Capabilities': 'mta', + 'AssetId': assetId + }); + + try { + const response = await fetch(`${DAZN_API_PLAYBACK}?${params.toString()}`, { + headers: { + 'Authorization': `Bearer ${authToken}`, + 'User-Agent': userAgentToUse, + 'x-dazn-device': decodedToken.deviceId + } + }); + if (!response.ok) { + const errorText = await response.text().catch(() => `HTTP ${response.status}`); + throw new Error(`HTTP ${response.status} para AssetId ${assetId}`); + } + const data = await response.json(); + + const playbackDetails = data?.PlaybackDetails?.[0]; + if (!playbackDetails || !playbackDetails.ManifestUrl || !playbackDetails.CdnToken) { + return null; + } + + const manifestUrl = playbackDetails.ManifestUrl; + const cdnToken = playbackDetails.CdnToken; + + const linearIdMatch = manifestUrl.match(/dazn-linear-(\d+)/); + const daznLinearId = linearIdMatch ? linearIdMatch[1] : null; + + return { + assetId: assetId, + title: null, + baseUrl: manifestUrl, + cdnTokenName: cdnToken.Name, + cdnTokenValue: cdnToken.Value, + daznLinearId: daznLinearId, + streamUserAgent: userAgentToUse + }; + + } catch (error) { + return null; + } +} + +async function fetchDaznRailDataAndChannelDetails(authToken, specificUserAgent = null) { + if (typeof showLoading === 'function') showLoading(true, 'Obteniendo canales DAZN...'); + const userAgentToUse = specificUserAgent || DAZN_USER_AGENT; + const params = new URLSearchParams({ + 'id': 'LiveAndNextNew', + 'params': 'PageType:Home;ContentType:None', + 'languageCode': 'es', + 'country': 'es', + 'platform': 'web' + }); + + try { + const response = await fetch(`${DAZN_API_RAIL}?${params.toString()}`, { + headers: { 'User-Agent': userAgentToUse } + }); + if (!response.ok) { + const errorText = await response.text().catch(() => `HTTP ${response.status}`); + throw new Error(`HTTP ${response.status} al obtener Rail data`); + } + const railData = await response.json(); + + const daznChannelsInfo = []; + const assetPromises = []; + + if (railData && railData.Tiles) { + for (const tile of railData.Tiles) { + if (tile.Type === 'Live' && tile.Label === 'Canal en directo' && tile.AssetId) { + assetPromises.push( + fetchSingleDaznAssetDetails(authToken, tile.AssetId, userAgentToUse) + .then(details => { + if (details) { + details.title = tile.Title; + return details; + } + return null; + }) + ); + } + } + } + + const resolvedAssets = await Promise.all(assetPromises); + resolvedAssets.forEach(asset => { + if (asset) { + daznChannelsInfo.push(asset); + } + }); + + if (daznChannelsInfo.length === 0 && typeof showNotification === 'function') { + showNotification('DAZN: No se encontraron canales en directo desde la API.', 'warning'); + } + return daznChannelsInfo; + + } catch (error) { + if (typeof showNotification === 'function') showNotification(`DAZN: Error obteniendo lista de canales: ${error.message}`, 'error'); + return []; + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} + +async function orchestrateDaznUpdate(specificUserAgent = null) { + if (typeof showLoading === 'function') showLoading(true, 'Iniciando actualización DAZN...'); + try { + const authToken = await getActiveDaznToken(true, specificUserAgent); + + if (!authToken) { + if (typeof populateUserSettingsForm === 'function') populateUserSettingsForm(); + return; + } + + const daznChannelDetailsList = await fetchDaznRailDataAndChannelDetails(authToken, specificUserAgent); + + if (daznChannelDetailsList && daznChannelDetailsList.length > 0) { + if (typeof window.updateM3UWithDaznData === 'function') { + window.updateM3UWithDaznData(daznChannelDetailsList); + } else { + if (typeof showNotification === 'function') showNotification('DAZN: Error interno, no se pudo actualizar M3U.', 'error'); + } + } else if (daznChannelDetailsList) { + if (typeof showNotification === 'function') showNotification('DAZN: No se obtuvieron detalles de canales para actualizar.', 'info'); + } + } catch (error) { + if (typeof showNotification === 'function') showNotification(`DAZN: Error general durante la actualización: ${error.message}`, 'error'); + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} \ No newline at end of file diff --git a/db_manager.js b/db_manager.js new file mode 100644 index 0000000..5e8c0bc --- /dev/null +++ b/db_manager.js @@ -0,0 +1,383 @@ +const dbName = 'ZenithIPTV_DB'; +let dbPromise = null; + +function openDB() { + if (dbPromise) return dbPromise; + dbPromise = new Promise((resolve, reject) => { + const request = indexedDB.open(dbName, 5); // Incrementar versión para nuevo objectStore + request.onupgradeneeded = (event) => { + const db = event.target.result; + if (!db.objectStoreNames.contains('files')) { + db.createObjectStore('files', { keyPath: 'name' }); + } + if (!db.objectStoreNames.contains('xtream_servers')) { + const xtreamStore = db.createObjectStore('xtream_servers', { keyPath: 'id', autoIncrement: true }); + xtreamStore.createIndex('name', 'name', { unique: false }); + } + if (!db.objectStoreNames.contains('app_config')) { + db.createObjectStore('app_config', { keyPath: 'key' }); + } + if (!db.objectStoreNames.contains('movistar_vod_cache')) { + const vodCacheStore = db.createObjectStore('movistar_vod_cache', { keyPath: 'dateString' }); + vodCacheStore.createIndex('timestamp', 'timestamp', { unique: false }); + } + if (!db.objectStoreNames.contains('xcodec_panels')) { + const xcodecStore = db.createObjectStore('xcodec_panels', { keyPath: 'id', autoIncrement: true }); + xcodecStore.createIndex('name', 'name', { unique: false }); + xcodecStore.createIndex('serverUrl', 'serverUrl', { unique: false }); + } + }; + request.onsuccess = (event) => resolve(event.target.result); + request.onerror = (event) => reject('Error al abrir IndexedDB: ' + event.target.error); + }); + return dbPromise; +} + +async function saveFileToDB(name, content) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['files'], 'readwrite'); + const store = transaction.objectStore('files'); + const getRequest = store.get(name); + getRequest.onsuccess = () => { + if (getRequest.result && !confirm(`La lista "${name}" ya existe. ¿Quieres reemplazarla?`)) { + reject(new Error('Operación de guardado cancelada por el usuario.')); + return; + } + const putRequest = store.put({ name, content, timestamp: new Date().toISOString(), channelCount: countChannels(content) }); + putRequest.onsuccess = () => resolve(); + putRequest.onerror = (event) => reject('Error al guardar archivo en IndexedDB: ' + event.target.error); + }; + getRequest.onerror = (event) => reject('Error al verificar archivo existente en IndexedDB: ' + event.target.error); + }); +} + +async function getAllFilesFromDB() { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['files'], 'readonly'); + const store = transaction.objectStore('files'); + const request = store.getAll(); + request.onsuccess = () => resolve(request.result); + request.onerror = (event) => reject('Error al recuperar archivos de IndexedDB: ' + event.target.error); + }); +} + +async function getFileFromDB(name) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['files'], 'readonly'); + const store = transaction.objectStore('files'); + const request = store.get(name); + request.onsuccess = () => resolve(request.result); + request.onerror = (event) => reject('Error al recuperar archivo de IndexedDB: ' + event.target.error); + }); +} + +async function deleteFileFromDB(name) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['files'], 'readwrite'); + const store = transaction.objectStore('files'); + const request = store.delete(name); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject('Error al eliminar archivo de IndexedDB: ' + event.target.error); + }); +} + +async function clearAllFilesFromDB() { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['files'], 'readwrite'); + const store = transaction.objectStore('files'); + const request = store.clear(); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject('Error al limpiar IndexedDB: ' + event.target.error); + }); +} + +function countChannels(content) { + if (!content) return 0; + const lines = content.split(/\r\n?|\n/); + let count = 0; + for (let i = 0; i < lines.length; i++) { + const line = lines[i].trim(); + if (line.startsWith('#EXTINF:')) { + for (let j = i + 1; j < lines.length; j++) { + const nextLine = lines[j].trim(); + if (nextLine && !nextLine.startsWith('#')) { + count++; + i = j; + break; + } + if (nextLine.startsWith('#EXTINF:') || nextLine.startsWith('#EXTM3U')) { + break; + } + } + } + } + return count; +} + +async function saveXtreamServerToDB(serverData) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['xtream_servers'], 'readwrite'); + const store = transaction.objectStore('xtream_servers'); + const dataToSave = { ...serverData }; + if (!dataToSave.timestamp) { + dataToSave.timestamp = new Date().toISOString(); + } + const request = serverData.id ? store.put(dataToSave) : store.add(dataToSave); + request.onsuccess = () => resolve(request.result || serverData.id); + request.onerror = (event) => reject('Error al guardar servidor Xtream: ' + event.target.error); + }); +} + +async function getAllXtreamServersFromDB() { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['xtream_servers'], 'readonly'); + const store = transaction.objectStore('xtream_servers'); + const request = store.getAll(); + request.onsuccess = () => resolve(request.result); + request.onerror = (event) => reject('Error al recuperar servidores Xtream: ' + event.target.error); + }); +} + +async function getXtreamServerFromDB(id) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['xtream_servers'], 'readonly'); + const store = transaction.objectStore('xtream_servers'); + const request = store.get(id); + request.onsuccess = () => resolve(request.result); + request.onerror = (event) => reject('Error al recuperar servidor Xtream: ' + event.target.error); + }); +} + +async function deleteXtreamServerFromDB(id) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['xtream_servers'], 'readwrite'); + const store = transaction.objectStore('xtream_servers'); + const request = store.delete(id); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject('Error al eliminar servidor Xtream: ' + event.target.error); + }); +} + +async function clearAllXtreamServersFromDB() { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['xtream_servers'], 'readwrite'); + const store = transaction.objectStore('xtream_servers'); + const request = store.clear(); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject('Error al limpiar servidores Xtream: ' + event.target.error); + }); +} + +async function saveXCodecPanelToDB(panelData) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['xcodec_panels'], 'readwrite'); + const store = transaction.objectStore('xcodec_panels'); + const request = panelData.id ? store.put(panelData) : store.add({ ...panelData, timestamp: new Date().toISOString() }); + request.onsuccess = () => resolve(request.result || panelData.id); + request.onerror = (event) => reject('Error al guardar panel XCodec: ' + event.target.error); + }); +} + +async function getAllXCodecPanelsFromDB() { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['xcodec_panels'], 'readonly'); + const store = transaction.objectStore('xcodec_panels'); + const request = store.getAll(); + request.onsuccess = () => resolve(request.result); + request.onerror = (event) => reject('Error al recuperar paneles XCodec: ' + event.target.error); + }); +} + +async function getXCodecPanelFromDB(id) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['xcodec_panels'], 'readonly'); + const store = transaction.objectStore('xcodec_panels'); + const request = store.get(id); + request.onsuccess = () => resolve(request.result); + request.onerror = (event) => reject('Error al recuperar panel XCodec: ' + event.target.error); + }); +} + +async function deleteXCodecPanelFromDB(id) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['xcodec_panels'], 'readwrite'); + const store = transaction.objectStore('xcodec_panels'); + const request = store.delete(id); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject('Error al eliminar panel XCodec: ' + event.target.error); + }); +} + +async function clearAllXCodecPanelsFromDB() { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['xcodec_panels'], 'readwrite'); + const store = transaction.objectStore('xcodec_panels'); + const request = store.clear(); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject('Error al limpiar paneles XCodec: ' + event.target.error); + }); +} + + +async function saveAppConfigValue(key, value) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['app_config'], 'readwrite'); + const store = transaction.objectStore('app_config'); + const request = store.put({ key, value }); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject(`Error guardando ${key} en IndexedDB: ${event.target.error}`); + }); +} + +async function getAppConfigValue(key) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['app_config'], 'readonly'); + const store = transaction.objectStore('app_config'); + const request = store.get(key); + request.onsuccess = () => resolve(request.result ? request.result.value : null); + request.onerror = (event) => reject(`Error obteniendo ${key} de IndexedDB: ${event.target.error}`); + }); +} + +async function deleteAppConfigValue(key) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['app_config'], 'readwrite'); + const store = transaction.objectStore('app_config'); + const request = store.delete(key); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject(`Error eliminando ${key} de IndexedDB: ${event.target.error}`); + }); +} + +async function clearAppConfigFromDB() { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['app_config'], 'readwrite'); + const store = transaction.objectStore('app_config'); + const request = store.clear(); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject('Error limpiando app_config de IndexedDB: ' + event.target.error); + }); +} + +async function getAllAppConfigValues() { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['app_config'], 'readonly'); + const store = transaction.objectStore('app_config'); + const request = store.getAll(); + request.onsuccess = () => { + const configObject = {}; + if (request.result && Array.isArray(request.result)) { + request.result.forEach(item => { + if (item && typeof item.key === 'string') { + configObject[item.key] = item.value; + } + }); + } + resolve(configObject); + }; + request.onerror = (event) => reject(`Error obteniendo todos los valores de app_config: ${event.target.error}`); + }); +} + +async function saveMovistarVodData(dateString, recordData) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['movistar_vod_cache'], 'readwrite'); + const store = transaction.objectStore('movistar_vod_cache'); + const recordToStore = { dateString: dateString, data: recordData.data, timestamp: recordData.timestamp }; + const request = store.put(recordToStore); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject('Error guardando datos VOD de Movistar: ' + event.target.error); + }); +} + +async function getMovistarVodData(dateString) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['movistar_vod_cache'], 'readonly'); + const store = transaction.objectStore('movistar_vod_cache'); + const request = store.get(dateString); + request.onsuccess = () => { + resolve(request.result || null); + }; + request.onerror = (event) => reject('Error obteniendo datos VOD de Movistar: ' + event.target.error); + }); +} + +async function deleteOldMovistarVodData(daysToKeep = 15) { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['movistar_vod_cache'], 'readwrite'); + const store = transaction.objectStore('movistar_vod_cache'); + const threshold = new Date().getTime() - (daysToKeep * 24 * 60 * 60 * 1000); + const index = store.index('timestamp'); + const request = index.openCursor(IDBKeyRange.upperBound(threshold)); + + let deletedCount = 0; + request.onsuccess = (event) => { + const cursor = event.target.result; + if (cursor) { + store.delete(cursor.primaryKey); + deletedCount++; + cursor.continue(); + } else { + resolve(deletedCount); + } + }; + request.onerror = (event) => reject('Error eliminando datos VOD antiguos de Movistar: ' + event.target.error); + }); +} + +async function clearMovistarVodCacheFromDB() { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['movistar_vod_cache'], 'readwrite'); + const store = transaction.objectStore('movistar_vod_cache'); + const request = store.clear(); + request.onsuccess = () => resolve(); + request.onerror = (event) => reject('Error limpiando caché VOD de Movistar de IndexedDB: ' + event.target.error); + }); +} + +async function getMovistarVodCacheStats() { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(['movistar_vod_cache'], 'readonly'); + const store = transaction.objectStore('movistar_vod_cache'); + const request = store.getAll(); + request.onsuccess = () => { + const records = request.result || []; + let totalSizeBytes = 0; + records.forEach(record => { + if (record && record.data) { + totalSizeBytes += JSON.stringify(record.data).length; + } + }); + resolve({ + count: records.length, + totalSizeBytes: totalSizeBytes + }); + }; + request.onerror = (event) => reject('Error obteniendo estadísticas de caché VOD Movistar: ' + event.target.error); + }); +} \ No newline at end of file diff --git a/draggable_modals.js b/draggable_modals.js new file mode 100644 index 0000000..99671e4 --- /dev/null +++ b/draggable_modals.js @@ -0,0 +1,76 @@ +function makeWindowsDraggableAndResizable() { + let activeWindow = null; + let action = null; + let offsetX, offsetY, startX, startY, startWidth, startHeight; + + function onMouseDown(e) { + const target = e.target; + const draggableWindow = target.closest('.player-window'); + + if (!draggableWindow) return; + + if (typeof setActivePlayer === 'function') { + setActivePlayer(draggableWindow.id); + } + + if (target.classList.contains('resize-handle')) { + action = 'resize'; + } else if (target.closest('.modal-header-draggable')) { + action = 'drag'; + } else { + action = null; + } + + if (action) { + e.preventDefault(); + activeWindow = draggableWindow; + + if (action === 'drag') { + offsetX = e.clientX - activeWindow.getBoundingClientRect().left; + offsetY = e.clientY - activeWindow.getBoundingClientRect().top; + } else if (action === 'resize') { + startX = e.clientX; + startY = e.clientY; + startWidth = parseInt(document.defaultView.getComputedStyle(activeWindow).width, 10); + startHeight = parseInt(document.defaultView.getComputedStyle(activeWindow).height, 10); + } + + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('mouseup', onMouseUp); + } + } + + function onMouseMove(e) { + if (!activeWindow) return; + + if (action === 'drag') { + let x = e.clientX - offsetX; + let y = e.clientY - offsetY; + + const container = document.getElementById('app-container'); + const containerRect = container.getBoundingClientRect(); + const windowRect = activeWindow.getBoundingClientRect(); + + x = Math.max(containerRect.left, Math.min(x, containerRect.right - windowRect.width)); + y = Math.max(containerRect.top, Math.min(y, containerRect.bottom - windowRect.height)); + + activeWindow.style.left = x + 'px'; + activeWindow.style.top = y + 'px'; + } else if (action === 'resize') { + const newWidth = startWidth + (e.clientX - startX); + const newHeight = startHeight + (e.clientY - startY); + + activeWindow.style.width = Math.max(400, newWidth) + 'px'; + activeWindow.style.height = Math.max(300, newHeight) + 'px'; + } + } + + function onMouseUp() { + activeWindow = null; + action = null; + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('mouseup', onMouseUp); + } + + document.addEventListener('mousedown', onMouseDown); +} \ No newline at end of file diff --git a/editor_handler.js b/editor_handler.js new file mode 100644 index 0000000..e91b309 --- /dev/null +++ b/editor_handler.js @@ -0,0 +1,634 @@ +const editorHandler = (() => { + let editorChannels = []; + let selectedChannelId = null; + let selectedRowIds = new Set(); + let currentGroupFilter = ''; + let currentSort = { column: null, direction: 'asc' }; + let sortableInstance = null; + let groupOrder = []; + + const dom = {}; + + function cacheDom() { + const modal = document.getElementById('editorModal'); + if (!modal) return false; + dom.modal = modal; + dom.tableContainer = modal.querySelector('#editor-table-container'); + dom.tableBody = modal.querySelector('#editor-table-body'); + dom.selectAllCheckbox = modal.querySelector('#editor-select-all'); + dom.searchInput = modal.querySelector('#editor-search-input'); + dom.groupFilterSelect = modal.querySelector('#editor-group-filter'); + dom.fileNameDisplay = modal.querySelector('#file-name-display'); + dom.editorPanel = modal.querySelector('#editor-panel'); + dom.editorPlaceholder = modal.querySelector('#editor-placeholder'); + dom.editorFormContent = modal.querySelector('#editor-form-content'); + dom.editorChannelNameInput = modal.querySelector('#editor-channel-name'); + dom.editorChannelTvgIdInput = modal.querySelector('#editor-channel-tvg-id'); + dom.editorChannelChNumInput = modal.querySelector('#editor-channel-ch-num'); + dom.editorChannelLogoInput = modal.querySelector('#editor-channel-logo'); + dom.editorLogoPreview = modal.querySelector('#editor-logo-preview'); + dom.editorChannelUrlInput = modal.querySelector('#editor-channel-url'); + dom.editorChannelGroupInput = modal.querySelector('#editor-channel-group'); + dom.groupSuggestionsDatalist = modal.querySelector('#group-suggestions'); + dom.editorFavCheckbox = modal.querySelector('#editor-fav-channel'); + dom.editorHideChannelCheckbox = modal.querySelector('#editor-hide-channel'); + dom.editorKodiLicenseTypeInput = modal.querySelector('#editor-kodi-license-type'); + dom.editorKodiLicenseKeyInput = modal.querySelector('#editor-kodi-license-key'); + dom.editorKodiStreamHeadersInput = modal.querySelector('#editor-kodi-stream-headers'); + dom.editorVlcUserAgentInput = modal.querySelector('#editor-vlc-user-agent'); + dom.editorSaveBtn = modal.querySelector('#editor-save-btn'); + dom.editorPlayBtn = modal.querySelector('#editor-play-btn'); + dom.editorDeleteBtn = modal.querySelector('#editor-delete-btn'); + dom.closeEditorBtn = modal.querySelector('#close-editor-btn'); + dom.multiEditBtn = modal.querySelector('#multi-edit-btn'); + dom.deleteSelectedBtn = modal.querySelector('#delete-selected-btn'); + dom.clearSelectionBtn = modal.querySelector('#clear-selection-btn'); + + const multiEditModal = document.getElementById('multiEditModal'); + dom.multiEditModal = multiEditModal; + dom.multiEditChannelCount = multiEditModal.querySelector('#multiEditChannelCount'); + dom.multiEditEnableGroup = multiEditModal.querySelector('#multiEditEnableGroup'); + dom.multiEditGroupInput = multiEditModal.querySelector('#multiEditGroupInput'); + dom.multiEditEnableFavorite = multiEditModal.querySelector('#multiEditEnableFavorite'); + dom.multiEditFavoriteSelect = multiEditModal.querySelector('#multiEditFavoriteSelect'); + dom.multiEditEnableHidden = multiEditModal.querySelector('#multiEditEnableHidden'); + dom.multiEditHiddenSelect = multiEditModal.querySelector('#multiEditHiddenSelect'); + dom.multiEditEnableUserAgent = multiEditModal.querySelector('#multiEditEnableUserAgent'); + dom.multiEditUserAgentInput = multiEditModal.querySelector('#multiEditUserAgentInput'); + dom.multiEditEnableStreamHeaders = multiEditModal.querySelector('#multiEditEnableStreamHeaders'); + dom.multiEditStreamHeadersInput = multiEditModal.querySelector('#multiEditStreamHeadersInput'); + dom.multiEditStreamHeadersMode = multiEditModal.querySelector('#multiEditStreamHeadersMode'); + dom.applyMultiEditBtn = multiEditModal.querySelector('#applyMultiEditBtn'); + + return true; + } + + function init(channelsData, fileName) { + if (!cacheDom()) { + console.error("Editor DOM not found. Cannot initialize."); + return; + } + + editorChannels = JSON.parse(JSON.stringify(channelsData)); + editorChannels.forEach((ch, idx) => { + if (ch) { + ch.editorId = `editor-ch-${idx}-${Date.now()}`; + } + }); + + dom.fileNameDisplay.textContent = fileName || "Lista Actual"; + dom.fileNameDisplay.classList.add('loaded'); + + updateGroupOrder(); + + renderTable(); + bindEvents(); + showEditorPlaceholder(); + clearMultiSelection(); + } + + function bindEvents() { + if (dom.editorSaveBtn.dataset.initialized) return; + + dom.editorSaveBtn.addEventListener('click', handleEditorSave); + dom.editorPlayBtn.addEventListener('click', handleEditorPlay); + dom.editorDeleteBtn.addEventListener('click', handleEditorDelete); + dom.closeEditorBtn.addEventListener('click', showEditorPlaceholder); + + dom.tableBody.addEventListener('click', handleTableBodyClick); + dom.selectAllCheckbox.addEventListener('change', handleSelectAllVisible); + dom.tableBody.addEventListener('change', handleRowCheckboxChange); + + dom.searchInput.addEventListener('input', debounce(() => { currentSort.column = null; renderTable(); }, 300)); + dom.groupFilterSelect.addEventListener('change', (e) => { currentGroupFilter = e.target.value; renderTable(); }); + + dom.deleteSelectedBtn.addEventListener('click', deleteSelectedChannels); + dom.clearSelectionBtn.addEventListener('click', clearMultiSelection); + dom.multiEditBtn.addEventListener('click', openMultiEditModal); + + dom.modal.querySelectorAll('th.sortable').forEach(th => { + th.addEventListener('click', () => handleSort(th.dataset.sort)); + }); + + bindMultiEditEvents(); + dom.editorSaveBtn.dataset.initialized = 'true'; + } + + function bindMultiEditEvents() { + dom.applyMultiEditBtn.addEventListener('click', handleApplyMultiEdit); + const multiEditToggles = [ + { check: dom.multiEditEnableGroup, input: dom.multiEditGroupInput }, + { check: dom.multiEditEnableFavorite, input: dom.multiEditFavoriteSelect }, + { check: dom.multiEditEnableHidden, input: dom.multiEditHiddenSelect }, + { check: dom.multiEditEnableUserAgent, input: dom.multiEditUserAgentInput }, + { check: dom.multiEditEnableStreamHeaders, input: dom.multiEditStreamHeadersInput, extra: dom.multiEditStreamHeadersMode }, + ]; + multiEditToggles.forEach(({check, input, extra}) => { + check.addEventListener('change', (e) => { + input.disabled = !e.target.checked; + if (extra) extra.disabled = !e.target.checked; + }); + }); + } + + function updateGroupOrder() { + const currentGroups = [...new Set(editorChannels.filter(ch => ch).map(ch => ch['group-title'] || ''))]; + const newGroupOrder = (groupOrder.length > 0 ? groupOrder : []).filter(group => currentGroups.includes(group)); + currentGroups.forEach(group => { if (!newGroupOrder.includes(group)) newGroupOrder.push(group); }); + groupOrder = newGroupOrder; + updateGroupFilter(); + updateGroupSuggestions(); + } + + function renderTable() { + const fragment = document.createDocumentFragment(); + dom.tableBody.innerHTML = ''; + const searchTerm = dom.searchInput.value.toLowerCase().trim(); + + if (currentGroupFilter === '' && !searchTerm && !currentSort.column) { + const groupCounts = editorChannels.reduce((acc, channel) => { + if (!channel || channel.attributes?.hidden === 'true') return acc; + const groupKey = channel['group-title'] || ''; + acc[groupKey] = (acc[groupKey] || 0) + 1; + return acc; + }, {}); + + groupOrder.forEach(groupKey => { + const count = groupCounts[groupKey] || 0; + if (count > 0) { + fragment.appendChild(createGroupHeaderRow(groupKey, count)); + } + }); + } else { + const filteredChannels = getFilteredAndSortedChannels(); + if (currentGroupFilter) { + if (filteredChannels.length > 0) { + const groupKey = filteredChannels[0]['group-title'] || ''; + fragment.appendChild(createGroupHeaderRow(groupKey, filteredChannels.length)); + filteredChannels.forEach(channel => fragment.appendChild(createRow(channel))); + } + } else { + filteredChannels.forEach(channel => fragment.appendChild(createRow(channel))); + } + } + + dom.tableBody.appendChild(fragment); + updateSortableForCurrentView(); + updateSelectAllCheckboxState(); + updateSortIcons(); + } + + function getFilteredAndSortedChannels() { + const searchTerm = dom.searchInput.value.toLowerCase().trim(); + let channelsToProcess = editorChannels.filter(ch => { + if (!ch || ch.attributes?.hidden === 'true') { + return false; + } + if (currentGroupFilter && (ch['group-title'] || '') !== currentGroupFilter) { + return false; + } + if (searchTerm) { + if (!( + ch.name?.toLowerCase().includes(searchTerm) || + ch.url?.toLowerCase().includes(searchTerm) || + ch['group-title']?.toLowerCase().includes(searchTerm) || + ch['tvg-id']?.toLowerCase().includes(searchTerm) + )) { + return false; + } + } + return true; + }); + + if (currentSort.column) { + channelsToProcess.sort((a, b) => { + let valA, valB; + switch (currentSort.column) { + case 'ch-number': + valA = parseInt(a.attributes?.['ch-number'], 10) || Infinity; + valB = parseInt(b.attributes?.['ch-number'], 10) || Infinity; + break; + default: + valA = (a[currentSort.column] || '').toLowerCase(); + valB = (b[currentSort.column] || '').toLowerCase(); + break; + } + let comparison = valA < valB ? -1 : (valA > valB ? 1 : 0); + return comparison * (currentSort.direction === 'asc' ? 1 : -1); + }); + } + + return channelsToProcess; + } + + function createRow(channel) { + const row = document.createElement('tr'); + row.dataset.editorId = channel.editorId; + row.dataset.groupParent = channel['group-title'] || ''; + row.className = `channel-row ${channel.editorId === selectedChannelId ? 'selected-row' : ''}`; + + const logoHtml = channel['tvg-logo'] ? `` : `-`; + const nameHtml = `${channel.favorite ? '' : ''}${escapeHtml(channel.name || '')}`; + + row.innerHTML = ` + + + ${logoHtml} + ${nameHtml} + ${escapeHtml(channel.url || '')} + ${escapeHtml(channel['tvg-id'] || '-')} + ${escapeHtml(channel.attributes?.['ch-number'] || '-')} + + + + `; + return row; + } + + function createGroupHeaderRow(group, count) { + const headerRow = document.createElement('tr'); + headerRow.className = `group-header-row`; + headerRow.dataset.group = group; + const displayName = group === '' ? '(Sin Grupo)' : group; + headerRow.innerHTML = ` + + + + ${escapeHtml(displayName)} + (${count}) + + + + `; + return headerRow; + } + + function handleTableBodyClick(e) { + const btn = e.target.closest('.btn-action'); + if (btn) { + const row = e.target.closest('tr'); + if (btn.classList.contains('play')) { + handleEditorPlay(row.dataset.editorId); + } else if (btn.classList.contains('rename')) { + handleRenameGroup(row.dataset.group); + } + return; + } + + if (e.target.closest('.row-checkbox, .drag-handle, .group-header-row')) return; + + const row = e.target.closest('tr.channel-row'); + if (row && row.dataset.editorId) { + displayChannelInEditor(row.dataset.editorId); + } + } + + function displayChannelInEditor(editorId) { + const channel = editorChannels.find(ch => ch && ch.editorId === editorId); + if (!channel) { showEditorPlaceholder(); return; } + + selectedChannelId = editorId; + + dom.editorFormContent.classList.remove('hidden'); + dom.editorPlaceholder.classList.add('hidden'); + dom.modal.classList.add('editor-visible'); + + if (!dom.editorChannelIdInput) { + dom.editorChannelIdInput = document.createElement('input'); + dom.editorChannelIdInput.type = 'hidden'; + dom.editorChannelIdInput.id = 'editor-channel-id'; + dom.editorFormContent.insertBefore(dom.editorChannelIdInput, dom.editorFormContent.firstChild); + } + + dom.editorChannelIdInput.value = editorId; + dom.editorChannelNameInput.value = channel.name || ''; + dom.editorChannelTvgIdInput.value = channel['tvg-id'] || ''; + dom.editorChannelChNumInput.value = channel.attributes?.['ch-number'] || ''; + dom.editorChannelLogoInput.value = channel['tvg-logo'] || ''; + dom.editorLogoPreview.src = channel['tvg-logo'] || ''; + dom.editorLogoPreview.style.display = channel['tvg-logo'] ? 'block' : 'none'; + dom.editorChannelUrlInput.value = channel.url || ''; + dom.editorChannelGroupInput.value = channel['group-title'] || ''; + dom.editorFavCheckbox.checked = channel.favorite || false; + dom.editorHideChannelCheckbox.checked = channel.attributes?.hidden === 'true'; + + const kodiProps = channel.kodiProps || {}; + dom.editorKodiLicenseTypeInput.value = kodiProps['inputstream.adaptive.license_type'] || ''; + dom.editorKodiLicenseKeyInput.value = kodiProps['inputstream.adaptive.license_key'] || ''; + dom.editorKodiStreamHeadersInput.value = kodiProps['inputstream.adaptive.stream_headers'] || ''; + + dom.editorVlcUserAgentInput.value = (channel.vlcOptions || {})['http-user-agent'] || ''; + + renderTable(); + } + + function showEditorPlaceholder() { + selectedChannelId = null; + dom.editorFormContent.classList.add('hidden'); + dom.editorPlaceholder.classList.remove('hidden'); + dom.modal.classList.remove('editor-visible'); + if (dom.tableBody) dom.tableBody.querySelectorAll('.selected-row').forEach(r => r.classList.remove('selected-row')); + } + + function handleEditorSave() { + if (!selectedChannelId) return; + const index = editorChannels.findIndex(ch => ch && ch.editorId === selectedChannelId); + if (index === -1) return; + + const channelData = editorChannels[index]; + const oldGroup = channelData['group-title']; + + channelData.name = dom.editorChannelNameInput.value.trim(); + channelData.url = dom.editorChannelUrlInput.value.trim(); + channelData['group-title'] = dom.editorChannelGroupInput.value.trim(); + channelData['tvg-logo'] = dom.editorChannelLogoInput.value.trim(); + channelData['tvg-id'] = dom.editorChannelTvgIdInput.value.trim(); + + if (!channelData.attributes) channelData.attributes = {}; + channelData.attributes['ch-number'] = dom.editorChannelChNumInput.value.trim(); + channelData.favorite = dom.editorFavCheckbox.checked; + channelData.attributes['hidden'] = dom.editorHideChannelCheckbox.checked ? 'true' : 'false'; + + channelData.kodiProps = channelData.kodiProps || {}; + channelData.kodiProps['inputstream.adaptive.license_type'] = dom.editorKodiLicenseTypeInput.value.trim(); + channelData.kodiProps['inputstream.adaptive.license_key'] = dom.editorKodiLicenseKeyInput.value.trim(); + channelData.kodiProps['inputstream.adaptive.stream_headers'] = dom.editorKodiStreamHeadersInput.value.trim(); + + channelData.vlcOptions = channelData.vlcOptions || {}; + channelData.vlcOptions['http-user-agent'] = dom.editorVlcUserAgentInput.value.trim(); + + if (oldGroup !== channelData['group-title']) { + updateGroupOrder(); + } + renderTable(); + showToast('Canal guardado.', 'success'); + } + + function handleEditorPlay(id) { + const editorId = id || selectedChannelId; + if (!editorId) return; + const channel = editorChannels.find(ch => ch.editorId === editorId); + if (channel && typeof createPlayerWindow === 'function') { + createPlayerWindow(channel); + } + } + + function handleEditorDelete() { + if(!selectedChannelId) return; + const index = editorChannels.findIndex(ch => ch && ch.editorId === selectedChannelId); + if (index > -1) { + editorChannels.splice(index, 1); + showEditorPlaceholder(); + renderTable(); + } + } + + function deleteSelectedChannels() { + if (selectedRowIds.size === 0) return; + editorChannels = editorChannels.filter(ch => !selectedRowIds.has(ch.editorId)); + selectedRowIds.clear(); + showEditorPlaceholder(); + renderTable(); + updateGroupOrder(); + } + + function handleRenameGroup(oldGroupName) { + const newGroupName = prompt(`Renombrar grupo "${escapeHtml(oldGroupName || '(Sin Grupo)')}":`, oldGroupName); + if (newGroupName === null || newGroupName === oldGroupName) return; + + editorChannels.forEach(ch => { + if ((ch['group-title'] || '') === oldGroupName) { + ch['group-title'] = newGroupName; + } + }); + + const groupIndex = groupOrder.indexOf(oldGroupName); + if (groupIndex > -1) { + groupOrder[groupIndex] = newGroupName; + } + + updateGroupOrder(); + renderTable(); + showToast('Grupo renombrado.', 'success'); + } + + function updateGroupFilter() { + const currentFilterValue = dom.groupFilterSelect.value; + dom.groupFilterSelect.innerHTML = ''; + groupOrder.forEach(group => { + const displayName = group === '' ? '(Sin Grupo)' : group; + dom.groupFilterSelect.insertAdjacentHTML('beforeend', ``); + }); + dom.groupFilterSelect.value = currentFilterValue; + } + + function updateSortableForCurrentView() { + if (sortableInstance) { + sortableInstance.destroy(); + } + + sortableInstance = new Sortable(dom.tableBody, { + animation: 150, + handle: '.drag-handle', + draggable: currentGroupFilter === '' ? '.group-header-row' : '.channel-row', + forceFallback: true, + ghostClass: 'sortable-ghost', + fallbackClass: 'sortable-fallback', + onStart: () => { + document.body.classList.add('editor-is-dragging'); + }, + onEnd: (evt) => { + document.body.classList.remove('editor-is-dragging'); + const { oldIndex, newIndex, item } = evt; + + if (oldIndex === newIndex) return; + + if (item.classList.contains('group-header-row')) { + const [movedGroup] = groupOrder.splice(oldIndex, 1); + groupOrder.splice(newIndex, 0, movedGroup); + } + else if (item.classList.contains('channel-row') && currentGroupFilter !== '') { + const allVisibleIdsInOrder = Array.from(dom.tableBody.querySelectorAll('.channel-row')).map(row => row.dataset.editorId); + + const channelsInCurrentGroup = editorChannels.filter(ch => (ch['group-title'] || '') === currentGroupFilter); + const channelsInOtherGroups = editorChannels.filter(ch => (ch['group-title'] || '') !== currentGroupFilter); + + const channelMap = new Map(channelsInCurrentGroup.map(ch => [ch.editorId, ch])); + + const reorderedGroup = allVisibleIdsInOrder.map(id => channelMap.get(id)); + + editorChannels = [...channelsInOtherGroups, ...reorderedGroup]; + } + + currentSort.column = null; + renderTable(); + } + }); + } + + function handleSelectAllVisible(e) { + const isChecked = e.target.checked; + dom.tableBody.querySelectorAll('tr:not(.hidden) .row-checkbox').forEach(cb => { + const editorId = cb.dataset.editorId; + if (isChecked) selectedRowIds.add(editorId); else selectedRowIds.delete(editorId); + cb.checked = isChecked; + }); + updateMultiEditButtonState(); + } + + function handleRowCheckboxChange(e) { + if (!e.target.classList.contains('row-checkbox')) return; + const editorId = e.target.dataset.editorId; + if (e.target.checked) selectedRowIds.add(editorId); else selectedRowIds.delete(editorId); + updateSelectAllCheckboxState(); + updateMultiEditButtonState(); + } + + function updateSelectAllCheckboxState() { + const visibleCheckboxes = Array.from(dom.tableBody.querySelectorAll('tr:not(.hidden) .row-checkbox')); + if (visibleCheckboxes.length === 0) { + dom.selectAllCheckbox.checked = false; dom.selectAllCheckbox.indeterminate = false; return; + } + const numSelectedVisible = visibleCheckboxes.filter(cb => cb.checked).length; + dom.selectAllCheckbox.checked = numSelectedVisible > 0 && numSelectedVisible === visibleCheckboxes.length; + dom.selectAllCheckbox.indeterminate = numSelectedVisible > 0 && numSelectedVisible < visibleCheckboxes.length; + } + + function updateMultiEditButtonState() { + const hasSelection = selectedRowIds.size > 0; + dom.multiEditBtn.disabled = !hasSelection; + dom.deleteSelectedBtn.disabled = !hasSelection; + } + + function clearMultiSelection() { + selectedRowIds.clear(); + if (dom.tableBody) { + dom.tableBody.querySelectorAll('.row-checkbox').forEach(cb => cb.checked = false); + } + updateSelectAllCheckboxState(); + updateMultiEditButtonState(); + } + + function showToast(message, type = 'info', duration = 3000) { + if (typeof window.showNotification === 'function') { + window.showNotification(message, type, duration); + } + } + + function debounce(func, wait) { + let timeout; + return function(...args) { + clearTimeout(timeout); + timeout = setTimeout(() => func.apply(this, args), wait); + }; + } + + function updateGroupSuggestions() { + if (!dom.groupSuggestionsDatalist) return; + dom.groupSuggestionsDatalist.innerHTML = ''; + groupOrder.forEach(group => { + if (group) { + dom.groupSuggestionsDatalist.insertAdjacentHTML('beforeend', ``); + } + }); + } + + function handleSort(column) { + if (currentSort.column === column) { + currentSort.direction = currentSort.direction === 'asc' ? 'desc' : 'asc'; + } else { + currentSort.column = column; + currentSort.direction = 'asc'; + } + renderTable(); + } + + function updateSortIcons() { + dom.modal.querySelectorAll('th.sortable i').forEach(icon => icon.className = 'fas fa-sort'); + if (currentSort.column) { + const th = dom.modal.querySelector(`th[data-sort="${currentSort.column}"]`); + if (th) th.querySelector('i').className = `fas fa-sort-${currentSort.direction === 'asc' ? 'up' : 'down'}`; + } + } + + function openMultiEditModal() { + dom.multiEditChannelCount.textContent = selectedRowIds.size; + const modal = new bootstrap.Modal(dom.multiEditModal); + modal.show(); + } + + function handleApplyMultiEdit() { + const changes = {}; + if (dom.multiEditEnableGroup.checked) changes.group = dom.multiEditGroupInput.value.trim(); + if (dom.multiEditEnableFavorite.checked) changes.favorite = dom.multiEditFavoriteSelect.value; + if (dom.multiEditEnableHidden.checked) changes.hidden = dom.multiEditHiddenSelect.value; + if (dom.multiEditEnableUserAgent.checked) changes.userAgent = dom.multiEditUserAgentInput.value.trim(); + if (dom.multiEditEnableStreamHeaders.checked) { + changes.streamHeaders = dom.multiEditStreamHeadersInput.value.trim(); + changes.streamHeadersMode = dom.multiEditStreamHeadersMode.value; + } + + selectedRowIds.forEach(id => { + const channel = editorChannels.find(ch => ch.editorId === id); + if (!channel) return; + + if (changes.group !== undefined) channel['group-title'] = changes.group; + if (changes.favorite !== undefined) channel.favorite = changes.favorite === 'add'; + if (changes.hidden !== undefined) { + if (!channel.attributes) channel.attributes = {}; + channel.attributes.hidden = changes.hidden === 'hide' ? 'true' : 'false'; + } + if (changes.userAgent !== undefined) { + if (!channel.vlcOptions) channel.vlcOptions = {}; + channel.vlcOptions['http-user-agent'] = changes.userAgent; + } + if (changes.streamHeaders !== undefined) { + if (!channel.kodiProps) channel.kodiProps = {}; + if (changes.streamHeadersMode === 'replace' || !channel.kodiProps['inputstream.adaptive.stream_headers']) { + channel.kodiProps['inputstream.adaptive.stream_headers'] = changes.streamHeaders; + } else { + const existingHeaders = new Map(channel.kodiProps['inputstream.adaptive.stream_headers'].split('|').map(h => { const p = h.split('='); return [p[0], p.slice(1).join('=')]; })); + changes.streamHeaders.split('|').forEach(h => { const p = h.split('='); if(p[0]) existingHeaders.set(p[0], p.slice(1).join('=')); }); + channel.kodiProps['inputstream.adaptive.stream_headers'] = Array.from(existingHeaders).map(([k,v]) => `${k}=${v}`).join('|'); + } + } + }); + + updateGroupOrder(); + renderTable(); + showToast(`${selectedRowIds.size} canales actualizados.`, 'success'); + const modal = bootstrap.Modal.getInstance(dom.multiEditModal); + modal.hide(); + } + + function getFinalData() { + const groupIndexMap = new Map(groupOrder.map((group, index) => [group, index])); + + const channelsByGroup = {}; + editorChannels.forEach(ch => { + const group = ch['group-title'] || ''; + if (!channelsByGroup[group]) channelsByGroup[group] = []; + channelsByGroup[group].push(ch); + }); + + const finalOrderedChannels = []; + groupOrder.forEach(group => { + if (channelsByGroup[group]) { + finalOrderedChannels.push(...channelsByGroup[group]); + } + }); + + const remainingChannels = editorChannels.filter(ch => !groupIndexMap.has(ch['group-title'] || '')); + finalOrderedChannels.push(...remainingChannels); + + return { + channels: finalOrderedChannels, + groupOrder: groupOrder + }; + } + + return { + init: init, + getFinalData: getFinalData + }; +})(); \ No newline at end of file diff --git a/epg.js b/epg.js new file mode 100644 index 0000000..7a2819d --- /dev/null +++ b/epg.js @@ -0,0 +1,1035 @@ +let epgPrograms = []; +let epgChannelIcons = {}; +let epgDataByChannelId = {}; +let epgChannelDisplayNames = {}; +let epgLastLoadTime = null; +let orderedEpgChannelIds = []; +let epgMatchInProgress = false; + +let epgMinTimeMs = 0; +let epgMaxTimeMs = 0; +let epgCurrentTimeLineInterval = null; +let infobarHideTimeout = null; +let epgProgressUpdateIntervalId = null; +let dynamicMovistarEpgUpdateIntervalId = null; + +function bindEpgEvents() { + $('#openEpgModalBtn').on('click', () => $('#epgModal').modal('show')); + + $('#epgModal').on('shown.bs.modal', () => { + $('#epgUrlInputModal').val(userSettings.lastEpgUrl || userSettings.defaultEpgUrl); + const now = new Date().getTime(); + if (orderedEpgChannelIds.length === 0 || !epgLastLoadTime || (epgLastLoadTime && now - epgLastLoadTime > 60 * 60 * 1000)) { + } + populateEPGChannelsModal(); renderEPGTimeBar(); renderEPGProgramsLazy(); startCurrentTimeLineUpdater(); + }); + + $('#loadEpgBtnModal').on('click', () => { + const url = $('#epgUrlInputModal').val().trim(); + if (url) loadEpgFromUrl(url); else showNotification('Introduce una URL EPG válida.', 'error'); + }); + + let isSyncingScrollEPG = false; + const epgChannelListEl = $('#epgChannelsList')[0]; + const epgProgramContainerEl = $('#epgProgramsContainer')[0]; + const epgTimeBarHeaderElParent = $('#epgTimeBar').parent()[0]; + + function syncEpgScroll(source, target1, target2, isVertical) { + if (isSyncingScrollEPG) return; + isSyncingScrollEPG = true; + if (isVertical) { + if(target1) target1.scrollTop = source.scrollTop; + if (target2) target2.scrollTop = source.scrollTop; + } else { + if(target1) target1.scrollLeft = source.scrollLeft; + if (target2) target2.scrollLeft = source.scrollLeft; + } + requestAnimationFrame(() => isSyncingScrollEPG = false); + } + + if (epgChannelListEl && epgProgramContainerEl && epgTimeBarHeaderElParent) { + $(epgChannelListEl).on('scroll', function () { syncEpgScroll(this, epgProgramContainerEl, null, true); }); + $(epgProgramContainerEl).on('scroll', function () { + syncEpgScroll(this, epgChannelListEl, null, true); + syncEpgScroll(this, epgTimeBarHeaderElParent, null, false); + }); + $(epgTimeBarHeaderElParent).on('scroll', function () { syncEpgScroll(this, epgProgramContainerEl, null, false); }); + } + + $('#forceEpgRematchBtn').on('click', () => { + if (channels.length > 0 && (Object.keys(epgDataByChannelId).length > 0 || userSettings.useMovistarVodAsEpg)) { + matchChannelsWithEpg(true) + .then(async () => { + if (userSettings.useMovistarVodAsEpg) { + const today = new Date(); + const yyyy = today.getFullYear(); + const mm = String(today.getMonth() + 1).padStart(2, '0'); + const dd = String(today.getDate()).padStart(2, '0'); + await updateEpgWithMovistarVodData(`${yyyy}-${mm}-${dd}`); + } + }) + .catch(error => { + console.error("Error durante el re-emparejamiento forzado desde botón:", error); + showNotification("Error durante el re-emparejamiento EPG.", "error"); + showLoading(false); + }); + } else { + showNotification('Carga una lista M3U y un EPG (o activa VOD EPG en ajustes) primero.', 'info'); + } + }); +} + +function getEpgChannelIcon(epgId) { + if (epgId && epgId.startsWith('movistar.')) { + const m3uChannel = channels.find(ch => ch.effectiveEpgId === epgId); + return m3uChannel ? m3uChannel['tvg-logo'] : null; + } + return epgChannelIcons[epgId] || null; +} + +function getEpgDataForChannel(epgId) { + return epgDataByChannelId[epgId] || []; +} + +function getEpgLastLoadTimestamp() { + return epgLastLoadTime; +} + +function getMovistarServiceUidFromM3UChannel(m3uChannel) { + if (!m3uChannel) return null; + + if (m3uChannel['tvg-id']) { + const tvgId = String(m3uChannel['tvg-id']); + let match = tvgId.match(/^(?:CVXCH)?(\d{3,6})(?:\.MS)?$/i); + if (match && match[1]) return match[1]; + match = tvgId.match(/\.(\d{3,6})$/); + if (match && match[1]) return match[1]; + } + + if (m3uChannel.attributes && m3uChannel.attributes['ch-number'] && /^\d{3,6}$/.test(m3uChannel.attributes['ch-number'])) { + return m3uChannel.attributes['ch-number']; + } + + if (m3uChannel.url) { + const url = m3uChannel.url; + let match = url.match(/\/CVXCH(\d{3,6})\//i); + if (match && match[1]) return match[1]; + match = url.match(/\/(\d{3,6})\/vxfmt=dp\//i); + if (match && match[1]) return match[1]; + match = url.match(/\/(?:deliverty)\/([A-Za-z0-9_-]+?)(?:\.MS)?\//i); + if (match && match[1] && /^\d{3,6}$/.test(match[1].replace('.MS',''))) return match[1].replace('.MS',''); + } + return null; +} + +async function matchChannelsWithEpg(forceRematch = false) { + if (epgMatchInProgress && !forceRematch) return; + if (channels.length === 0 || (Object.keys(epgDataByChannelId).length === 0 && !userSettings.useMovistarVodAsEpg)) { + channels.forEach(ch => { ch.effectiveEpgId = null; }); + if (typeof filterAndRenderChannels === 'function') { + if (currentFilter !== 'all') { filterAndRenderChannels(); } else { renderChannels(); } + } + return; + } + + epgMatchInProgress = true; + if (forceRematch) { + showLoading(true, 'Re-emparejando EPG, esto puede tardar...'); + } + + let matchesFoundByTvgId = 0; + let matchesFoundByName = 0; + let matchesFoundByMovistarId = 0; + const batchSize = 200; + + for (let i = 0; i < channels.length; i += batchSize) { + const batch = channels.slice(i, i + batchSize); + for (const m3uChannel of batch) { + m3uChannel.effectiveEpgId = null; + const tvgId = (m3uChannel['tvg-id'] || '').toLowerCase().trim(); + + if (tvgId && epgDataByChannelId[tvgId]) { + m3uChannel.effectiveEpgId = tvgId; + matchesFoundByTvgId++; + continue; + } + + if (userSettings.useMovistarVodAsEpg && !m3uChannel.effectiveEpgId) { + const serviceUid = getMovistarServiceUidFromM3UChannel(m3uChannel); + if (serviceUid) { + const movistarEpgId = `movistar.${serviceUid}`; + m3uChannel.effectiveEpgId = movistarEpgId; + matchesFoundByMovistarId++; + continue; + } + } + } + if (forceRematch) { + await new Promise(resolve => setTimeout(resolve, 0)); + } + } + + if (userSettings.enableEpgNameMatching && Object.keys(epgChannelDisplayNames).length > 0) { + const epgChannelIds = Object.keys(epgChannelDisplayNames); + for (let i = 0; i < channels.length; i += batchSize) { + const batch = channels.slice(i, i + batchSize); + for (const m3uChannel of batch) { + if (m3uChannel.effectiveEpgId) continue; + let bestMatch = { id: null, score: 0 }; + const m3uName = m3uChannel.name; + + for (const epgId of epgChannelIds) { + const epgName = epgChannelDisplayNames[epgId]; + if (epgName) { + const similarity = getStringSimilarity(m3uName, epgName); + if (similarity > bestMatch.score) { + bestMatch = { id: epgId, score: similarity }; + } + } + } + + if (bestMatch.id && bestMatch.score >= userSettings.epgNameMatchThreshold) { + m3uChannel.effectiveEpgId = bestMatch.id; + matchesFoundByName++; + } + } + if (forceRematch) { + await new Promise(resolve => setTimeout(resolve, 0)); + } + } + } + + if (forceRematch) { + showLoading(false); + } + epgMatchInProgress = false; + + let notificationMsg = `EPG Re-emparejado: ${matchesFoundByTvgId} por ID (XMLTV), ${matchesFoundByName} por nombre (XMLTV).`; + if (userSettings.useMovistarVodAsEpg) { + notificationMsg += ` ${matchesFoundByMovistarId} canales Movistar identificados para VOD EPG.`; + } + + if (forceRematch) { + if (matchesFoundByTvgId > 0 || matchesFoundByName > 0 || matchesFoundByMovistarId > 0) { + showNotification(notificationMsg, 'success'); + } else { + showNotification('No se encontraron nuevas coincidencias EPG.', 'info'); + } + } + + if (typeof filterAndRenderChannels === 'function') { + if (currentFilter !== 'all') { filterAndRenderChannels(); } else { renderChannels(); } + } + if (typeof updateEPGProgressBarOnCards === 'function') { + updateEPGProgressBarOnCards(); + } +} + +function transformMovistarVodProgram(vodProgram) { + if (!vodProgram || !vodProgram.FechaHoraInicio || !vodProgram.FechaHoraFin || !vodProgram.CanalServiceUid2) return null; + return { + channel: `movistar.${vodProgram.CanalServiceUid2}`, + startDt: new Date(parseInt(vodProgram.FechaHoraInicio)), + stopDt: new Date(parseInt(vodProgram.FechaHoraFin)), + title: vodProgram.Titulo || 'Programa sin título', + desc: vodProgram.Ficha?.Descripcion || vodProgram.Ficha?.SinopsisLarga || vodProgram.Ficha?.Sinopsis || '', + category: vodProgram.GeneroComAntena || '', + icon: vodProgram.ImagenMiniatura || vodProgram.Ficha?.Imagen || '', + date: vodProgram.Ficha?.Anno || '', + isMovistarVod: true, + CanalServiceUid2: vodProgram.CanalServiceUid2 + }; +} + +async function updateEpgWithMovistarVodData(dateString, vodProgramsForDate = null) { + if (!userSettings.useMovistarVodAsEpg || channels.length === 0) return; + + let programsToProcess = vodProgramsForDate; + if (!programsToProcess) { + try { + const cachedRecord = await getMovistarVodData(dateString); + if (cachedRecord && cachedRecord.data) { + programsToProcess = cachedRecord.data; + } else { + return; + } + } catch (e) { + console.error(`Error obteniendo VOD de caché para EPG (${dateString}):`, e); + return; + } + } + + if (!programsToProcess || programsToProcess.length === 0) { + return; + } + + let updatedChannelCount = 0; + channels.forEach(m3uChannel => { + if (m3uChannel.effectiveEpgId && m3uChannel.effectiveEpgId.startsWith('movistar.')) { + const serviceUid2 = m3uChannel.effectiveEpgId.split('.')[1]; + if (serviceUid2) { + const channelVodPrograms = programsToProcess.filter(p => p.CanalServiceUid2 === serviceUid2); + if (channelVodPrograms.length > 0) { + const transformedPrograms = channelVodPrograms.map(transformMovistarVodProgram).filter(Boolean); + transformedPrograms.sort((a, b) => a.startDt - b.startDt); + epgDataByChannelId[m3uChannel.effectiveEpgId] = transformedPrograms; + + if (!epgChannelDisplayNames[m3uChannel.effectiveEpgId]) { + epgChannelDisplayNames[m3uChannel.effectiveEpgId] = m3uChannel.name || `Movistar ${serviceUid2}`; + } + if (!orderedEpgChannelIds.includes(m3uChannel.effectiveEpgId)) { + orderedEpgChannelIds.push(m3uChannel.effectiveEpgId); + } + updatedChannelCount++; + } + } + } + }); + + if (updatedChannelCount > 0) { + if (typeof filterAndRenderChannels === 'function') filterAndRenderChannels(); + if (typeof updateEPGProgressBarOnCards === 'function') updateEPGProgressBarOnCards(); + if ($('#epgModal').is(':visible')) { + populateEPGChannelsModal(); + renderEPGProgramsLazy(); + } + } +} + +function startDynamicEpgUpdaters() { + if (epgProgressUpdateIntervalId) clearInterval(epgProgressUpdateIntervalId); + updateEPGProgressBarOnCards(); + epgProgressUpdateIntervalId = setInterval(updateEPGProgressBarOnCards, 60000); + + if (dynamicMovistarEpgUpdateIntervalId) clearInterval(dynamicMovistarEpgUpdateIntervalId); + + let lastCheckedDateForVodEpg = new Date().toDateString(); + + dynamicMovistarEpgUpdateIntervalId = setInterval(async () => { + const now = new Date(); + if (userSettings.useMovistarVodAsEpg && now.toDateString() !== lastCheckedDateForVodEpg) { + lastCheckedDateForVodEpg = now.toDateString(); + const yyyy = now.getFullYear(); + const mm = String(now.getMonth() + 1).padStart(2, '0'); + const dd = String(now.getDate()).padStart(2, '0'); + showNotification("Cargando EPG de Movistar VOD para el nuevo día...", "info"); + await updateEpgWithMovistarVodData(`${yyyy}-${mm}-${dd}`); + } + + updateEPGProgressBarOnCards(); + + Object.values(playerInstances).forEach(instance => { + if (instance && instance.container && $(instance.container).is(':visible')) { + updatePlayerInfobar(instance.channel, instance.container.querySelector('.player-infobar')); + } + }); + + }, 60000); +} + +function stopDynamicEpgUpdaters() { + if (epgProgressUpdateIntervalId) clearInterval(epgProgressUpdateIntervalId); + if (dynamicMovistarEpgUpdateIntervalId) clearInterval(dynamicMovistarEpgUpdateIntervalId); + epgProgressUpdateIntervalId = null; + dynamicMovistarEpgUpdateIntervalId = null; +} + +function updateEPGProgressBarOnCards() { + $('.channel-card').each(function() { + const card = $(this); + const channelUrl = card.data('url'); + const channel = channels.find(c => c.url === channelUrl); + const progressBarContainer = card.find('.epg-progress-bar-container'); + const progressBar = card.find('.epg-progress-bar'); + + if (userSettings.cardShowEpg && channel && channel.effectiveEpgId && epgDataByChannelId[channel.effectiveEpgId] && progressBarContainer.length) { + const programsForChannel = epgDataByChannelId[channel.effectiveEpgId]; + const now = new Date(); + const currentProgram = programsForChannel.find(p => now >= p.startDt && now < p.stopDt); + + if (currentProgram) { + const programDuration = currentProgram.stopDt.getTime() - currentProgram.startDt.getTime(); + const elapsed = now.getTime() - currentProgram.startDt.getTime(); + let progressPercent = 0; + if (programDuration > 0) { + progressPercent = Math.min(100, (elapsed / programDuration) * 100); + } + progressBar.css('width', progressPercent + '%'); + progressBarContainer.show(); + } else { + progressBar.css('width', '0%'); + progressBarContainer.hide(); + } + } else if (progressBarContainer.length) { + progressBar.css('width', '0%'); + progressBarContainer.hide(); + } + }); +} + +async function loadEpgFromUrl(url) { + if (!url) { + showNotification('URL EPG inválida o vacía.', 'error'); + $('#epgChannelsList, #epgPrograms, #epgTimeBar').empty().html('

    Introduce una URL EPG válida o usa la predeterminada.

    '); + epgPrograms = []; + epgLastLoadTime = null; + matchChannelsWithEpg(); + return; + } + showLoading(true, 'Cargando y procesando EPG XMLTV...'); + try { + const response = await fetch(url); + if (!response.ok) { + const errorBody = await response.text().catch(() => ''); + throw new Error(`Error HTTP ${response.status} - ${response.statusText}${errorBody ? ': ' + errorBody.substring(0, 100) + '...' : ''}`); + } + const xmlText = await response.text(); + if (!xmlText || xmlText.trim() === '') throw new Error('Archivo EPG XMLTV vacío o inaccesible.'); + const parser = new DOMParser(); + const xmlDoc = parser.parseFromString(xmlText, 'text/xml'); + const parseErrorNode = xmlDoc.querySelector('parsererror'); + if (parseErrorNode) { + const errorText = parseErrorNode.textContent || 'Error de parseo XMLTV desconocido.'; + throw new Error('XMLTV mal formado: ' + errorText.substring(0, 200) + (errorText.length > 200 ? '...' : '')); + } + + const existingMovistarEpgData = {}; + Object.keys(epgDataByChannelId).forEach(key => { + if (key.startsWith('movistar.')) { + existingMovistarEpgData[key] = epgDataByChannelId[key]; + } + }); + epgDataByChannelId = {...existingMovistarEpgData}; + epgPrograms = []; + epgChannelIcons = {}; + + const newChannelDisplayNames = {}; + const existingMovistarDisplayNames = {}; + Object.keys(epgChannelDisplayNames).forEach(key => { + if (key.startsWith('movistar.')) { + existingMovistarDisplayNames[key] = epgChannelDisplayNames[key]; + } + }); + epgChannelDisplayNames = existingMovistarDisplayNames; + + const parsedData = parseXMLTV(xmlDoc); + + epgPrograms.push(...parsedData.programs); + Object.assign(epgChannelIcons, parsedData.channelIcons); + Object.assign(epgChannelDisplayNames, parsedData.channelDisplayNames); + + for (const chId in parsedData.dataByChannelId) { + epgDataByChannelId[chId] = parsedData.dataByChannelId[chId]; + } + + const existingMovistarIds = orderedEpgChannelIds.filter(id => id.startsWith('movistar.')); + const newIdsFromXml = parsedData.orderedEpgIds; + const newIdsSet = new Set(newIdsFromXml); + const finalCombinedIds = [...newIdsFromXml]; + existingMovistarIds.forEach(moviId => { + if (!newIdsSet.has(moviId)) { + finalCombinedIds.push(moviId); + } + }); + orderedEpgChannelIds = finalCombinedIds; + + epgMinTimeMs = parsedData.minTimeMs; + epgMaxTimeMs = parsedData.maxTimeMs; + + epgLastLoadTime = new Date().getTime(); + userSettings.lastEpgUrl = url; + localStorage.setItem('zenithUserSettings', JSON.stringify(userSettings)); + + $('#epgChannelsList, #epgPrograms, #epgTimeBar').empty(); + await matchChannelsWithEpg(); + + if (userSettings.useMovistarVodAsEpg) { + const today = new Date(); + const yyyy = today.getFullYear(); + const mm = String(today.getMonth() + 1).padStart(2, '0'); + const dd = String(today.getDate()).padStart(2, '0'); + await updateEpgWithMovistarVodData(`${yyyy}-${mm}-${dd}`); + } + + if (orderedEpgChannelIds.length > 0) { + populateEPGChannelsModal(); renderEPGTimeBar(); renderEPGProgramsLazy(); startCurrentTimeLineUpdater(); + showNotification(`EPG XMLTV cargado (${parsedData.programs.length} programas para ${parsedData.orderedEpgIds.length} canales XMLTV).`, 'success'); + } else { + $('#epgChannelsList').html('

    No se encontraron canales en el EPG XMLTV.

    '); + $('#epgPrograms').html('

    No hay programas para mostrar.

    ').css('min-height', '200px'); + showNotification('EPG XMLTV cargado, pero sin canales o programas válidos para mostrar.', 'warning'); + } + } catch (err) { + showNotification(`Error cargando EPG XMLTV desde "${escapeHtml(url)}": ${err.message}`, 'error'); + console.error("EPG XMLTV Load Error:", err); + $('#epgChannelsList').html('

    Error cargando canales EPG XMLTV.

    '); + $('#epgPrograms').html('

    Error cargando programas EPG XMLTV.

    '); + epgLastLoadTime = null; + matchChannelsWithEpg(); + } finally { showLoading(false); } +} + +function parseXMLTV(xmlDoc) { + const channelIcons = {}; + const channelDisplayNames = {}; + const programs = []; + const dataByChannelId = {}; + const orderedIdsFromXml = []; + const seenChannelIds = new Set(); + + const now = new Date(); + const startTimeLimit = new Date(now.getTime() - 6 * 3600 * 1000); + const endTimeLimit = new Date(now.getTime() + 48 * 3600 * 1000); + + let minTimestamp = Infinity; + let maxTimestamp = -Infinity; + + xmlDoc.querySelectorAll('channel').forEach(node => { + const id = (node.getAttribute('id') || '').toLowerCase().trim(); + if (id && !seenChannelIds.has(id)) { + seenChannelIds.add(id); + orderedIdsFromXml.push(id); + const iconNode = node.querySelector('icon[src]'); + if (iconNode) { + const iconSrc = iconNode.getAttribute('src'); + if (iconSrc && !/blank|tv-icon|placeholder|no-logo|noimage|default/i.test(iconSrc)) { + channelIcons[id] = iconSrc; + } + } + + const displayNameNode = node.querySelector('display-name'); + if (displayNameNode && displayNameNode.textContent) { + channelDisplayNames[id] = displayNameNode.textContent.trim(); + } else if (id) { + channelDisplayNames[id] = id; + } + dataByChannelId[id] = []; + } + }); + + xmlDoc.querySelectorAll('programme').forEach(node => { + const startAttr = node.getAttribute('start'); const stopAttr = node.getAttribute('stop'); + const channelId = (node.getAttribute('channel') || '').toLowerCase().trim(); + if (!startAttr || !stopAttr || !channelId) return; + + const startDt = parseEPGDate(startAttr); const stopDt = parseEPGDate(stopAttr); + if (!startDt || !stopDt) { console.warn("Invalid date in EPG program:", startAttr, stopAttr); return; } + if (stopDt <= startDt) { console.warn("EPG program end time is before start time:", startAttr, stopAttr); return; } + + if (stopDt < startTimeLimit || startDt > endTimeLimit) { return; } + + minTimestamp = Math.min(minTimestamp, startDt.getTime()); + maxTimestamp = Math.max(maxTimestamp, stopDt.getTime()); + + const programData = { + channel: channelId, start: startAttr, stop: stopAttr, startDt: startDt, stopDt: stopDt, + title: node.querySelector('title')?.textContent?.trim() || 'Programa sin título', + desc: node.querySelector('desc')?.textContent?.trim() || '', + category: node.querySelector('category')?.textContent?.trim() || '', + icon: node.querySelector('icon[src]')?.getAttribute('src') || '', + date: node.querySelector('date')?.textContent?.trim() || '', + }; + programs.push(programData); + if (dataByChannelId[channelId]) { + dataByChannelId[channelId].push(programData); + } else { + dataByChannelId[channelId] = [programData]; + if(!seenChannelIds.has(channelId)) { + seenChannelIds.add(channelId); + orderedIdsFromXml.push(channelId); + if(!channelDisplayNames[channelId]) channelDisplayNames[channelId] = channelId; + } + } + }); + + for (const chId in dataByChannelId) { + dataByChannelId[chId].sort((a, b) => a.startDt - b.bstartDt); + } + + if (minTimestamp === Infinity) minTimestamp = startTimeLimit.getTime(); + if (maxTimestamp === -Infinity) maxTimestamp = endTimeLimit.getTime(); + + return { programs, channelIcons, channelDisplayNames, dataByChannelId, orderedEpgIds: orderedIdsFromXml, minTimeMs: minTimestamp, maxTimeMs: maxTimestamp }; +} + +function parseEPGDate(dateString) { + if (!dateString || typeof dateString !== 'string' || dateString.length < 12) return null; + dateString = dateString.trim(); + try { + const Y = parseInt(dateString.substring(0, 4), 10); + const M = parseInt(dateString.substring(4, 6), 10) - 1; + const D = parseInt(dateString.substring(6, 8), 10); + const h = parseInt(dateString.substring(8, 10), 10); + const m = parseInt(dateString.substring(10, 12), 10); + const s = parseInt(dateString.substring(12, 14), 10) || 0; + + if ([Y, M, D, h, m, s].some(isNaN)) return null; + + let date; + const isoBase = `${String(Y).padStart(4, '0')}-${String(M + 1).padStart(2, '0')}-${String(D).padStart(2, '0')}T${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`; + + if (dateString.length > 14) { + const offsetPart = dateString.substring(14).trim(); + if (offsetPart.toUpperCase() === 'Z') { + date = new Date(`${isoBase}Z`); + } else { + const offsetMatch = offsetPart.match(/^([+-])(\d{2})(\d{2})?$/); + if (offsetMatch) { + const offsetMinutes = parseInt(offsetMatch[3] || '00', 10); + date = new Date(`${isoBase}${offsetMatch[1]}${offsetMatch[2]}:${String(offsetMinutes).padStart(2,'0')}`); + } else { + date = new Date(Date.UTC(Y, M, D, h, m, s)); + } + } + } else { + date = new Date(Y, M, D, h, m, s); + } + if (isNaN(date.getTime())) return null; + return date; + } catch (e) { console.warn("Error parsing EPG date string:", dateString, e); return null; } +} + +function formatEPGTime(date) { + if (!(date instanceof Date) || isNaN(date.getTime())) { return '??:??'; } + return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); +} + +function populateEPGChannelsModal() { + const channelsList = $('#epgChannelsList').empty(); + if (!orderedEpgChannelIds || orderedEpgChannelIds.length === 0) { + channelsList.append('

    No hay canales EPG disponibles.

    '); return; + } + + const fragment = document.createDocumentFragment(); + orderedEpgChannelIds.forEach(id => { + const m3uChannelForEpgId = channels.find(chM3U => chM3U.effectiveEpgId === id); + + let name = epgChannelDisplayNames[id]; + if (!name && m3uChannelForEpgId) name = m3uChannelForEpgId.name; + if (!name) name = id; + + let icon = getEpgChannelIcon(id); + if (!icon && m3uChannelForEpgId) icon = m3uChannelForEpgId['tvg-logo']; + + const item = document.createElement('div'); + item.className = 'epg-channel-item'; item.dataset.channelId = id; + + const richTitle = `${escapeHtml(name)}\n${m3uChannelForEpgId ? 'Click para reproducir' : 'ID EPG: '+id}`; + item.title = richTitle; + + let iconHtml = ''; + if (icon) { iconHtml = ``; } + const placeholderHtml = ``; + const playButtonHtml = m3uChannelForEpgId ? '' : ''; + item.innerHTML = `${iconHtml}${placeholderHtml}${escapeHtml(name)}${playButtonHtml}`; + const playButton = item.querySelector('.play-channel-epg-btn'); + if (playButton) { + playButton.addEventListener('click', (e) => { + e.stopPropagation(); + if (typeof createPlayerWindow === 'function') { + createPlayerWindow(m3uChannelForEpgId); + } + }); + } + item.addEventListener('click', () => { + const programsContainer = $('#epgProgramsContainer')[0]; + if (programsContainer) { + const channelIndex = orderedEpgChannelIds.indexOf(id); + const itemHeight = $('.epg-channel-item').first().outerHeight() || 60; + const programsContainerHeight = $(programsContainer).height() || 500; + const scrollTo = (channelIndex * itemHeight) - (programsContainerHeight / 2) + (itemHeight / 2); + $(programsContainer).animate({ scrollTop: Math.max(0, scrollTo) }, 300); + } + }); + fragment.appendChild(item); + }); + channelsList.append(fragment); +} + +function getEffectiveEpgTimeRange() { + let finalMinMs = Infinity; + let finalMaxMs = -Infinity; + + if (epgMinTimeMs > 0 && epgMinTimeMs !== Infinity) { + finalMinMs = epgMinTimeMs; + finalMaxMs = epgMaxTimeMs; + } + + if (userSettings.useMovistarVodAsEpg) { + let vodMin = Infinity, vodMax = -Infinity; + Object.values(epgDataByChannelId).forEach(programsArr => { + if (programsArr && programsArr.length > 0 && programsArr.some(p => p.isMovistarVod)) { + programsArr.forEach(p => { + if (p.isMovistarVod) { + vodMin = Math.min(vodMin, p.startDt.getTime()); + vodMax = Math.max(vodMax, p.stopDt.getTime()); + } + }); + } + }); + if (vodMin !== Infinity) finalMinMs = Math.min(finalMinMs, vodMin); + if (vodMax !== -Infinity) finalMaxMs = Math.max(finalMaxMs, vodMax); + } + + if (finalMinMs === Infinity || finalMaxMs === -Infinity) { + finalMinMs = new Date().setHours(0,0,0,0); + finalMaxMs = new Date().setHours(23,59,59,999); + } + + return { min: finalMinMs, max: finalMaxMs }; +} + +function renderEPGTimeBar() { + const timeBar = $('#epgTimeBar').empty(); + const programsContainerEl = $('#epgProgramsContainer')[0]; + if (!programsContainerEl) return; + + const epgPixelsPerHour = userSettings.epgDensity || 200; + + const timeRange = getEffectiveEpgTimeRange(); + const overallMinTimeMs = timeRange.min; + const overallMaxTimeMs = timeRange.max; + + if(overallMaxTimeMs <= overallMinTimeMs) { + timeBar.html('

    Rango de tiempo EPG no disponible.

    '); + return; + } + + const totalTimebarWidth = (overallMaxTimeMs - overallMinTimeMs) / (3600 * 1000) * epgPixelsPerHour; + + const fragment = document.createDocumentFragment(); + let currentTime = new Date(overallMinTimeMs); + currentTime.setMinutes(0, 0, 0); + + while (currentTime.getTime() < overallMaxTimeMs) { + const slotEl = document.createElement('div'); + slotEl.className = 'epg-time-slot'; + slotEl.style.minWidth = `${epgPixelsPerHour}px`; + slotEl.style.width = `${epgPixelsPerHour}px`; + slotEl.textContent = formatEPGTime(currentTime); + fragment.appendChild(slotEl); + currentTime.setTime(currentTime.getTime() + 3600 * 1000); + } + timeBar.append(fragment).css('width', `${totalTimebarWidth}px`); + $('#epgTimeBar').parent()[0].scrollLeft = programsContainerEl.scrollLeft || 0; +} + +function renderEPGProgramsLazy() { + const programsEl = $('#epgPrograms').empty()[0]; + const scrollContainer = $('#epgProgramsContainer')[0]; + if (!scrollContainer || !programsEl) return; + + if (orderedEpgChannelIds.length === 0) { + $(programsEl).append('

    No hay datos EPG para mostrar.

    ').css('min-height', '200px'); + return; + } + + const epgPixelsPerHour = userSettings.epgDensity || 200; + const timeRange = getEffectiveEpgTimeRange(); + const overallMinTimeMs = timeRange.min; + const overallMaxTimeMs = timeRange.max; + + if(overallMaxTimeMs <= overallMinTimeMs) { + $(programsEl).append('

    Rango de tiempo EPG no disponible para programas.

    ').css('min-height', '200px'); + return; + } + + const totalEpgDurationMs = overallMaxTimeMs - overallMinTimeMs; + const totalEPGWidth = totalEpgDurationMs / (3600 * 1000) * epgPixelsPerHour; + + $(programsEl).css('width', `${totalEPGWidth}px`).css('--pixelsPerHour', `${epgPixelsPerHour}px`); + + const rowFragment = document.createDocumentFragment(); + orderedEpgChannelIds.forEach(channelId => { + const row = document.createElement('div'); + row.className = 'epg-program-row'; row.dataset.channelId = channelId; + rowFragment.appendChild(row); + }); + $(programsEl).append(rowFragment); + + const observer = new IntersectionObserver((entries, obs) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + const row = entry.target; const channelId = row.dataset.channelId; + if (row.dataset.rendered) return; row.dataset.rendered = true; + const channelPrograms = epgDataByChannelId[channelId]; + if (channelPrograms && channelPrograms.length > 0) { + const progsFrag = document.createDocumentFragment(); + const now = new Date(); + channelPrograms.forEach(p => { + const startMs = p.startDt.getTime(); + const stopMs = p.stopDt.getTime(); + const durationMs = stopMs - startMs; + if (durationMs <= 0) return; + + const offsetMsFromEPGStart = startMs - overallMinTimeMs; + const scaledPixelsPerMs = epgPixelsPerHour / 3600000; + const offsetPx = offsetMsFromEPGStart * scaledPixelsPerMs; + const widthPx = Math.max(2, durationMs * scaledPixelsPerMs); + + const isCurrent = now >= p.startDt && now < p.stopDt; + const progEl = document.createElement('div'); + progEl.className = `epg-program-item ${isCurrent ? 'current' : ''}`; + progEl.style.cssText = `left:${offsetPx}px; width:${widthPx}px;`; + + let richTitle = `${escapeHtml(p.title)}\n${formatEPGTime(p.startDt)} - ${formatEPGTime(p.stopDt)}`; + if (p.desc) richTitle += `\n\n${escapeHtml(p.desc.substring(0,200))}${p.desc.length > 200 ? '...' : ''}`; + progEl.title = richTitle; + + progEl.textContent = escapeHtml(p.title); + progEl.addEventListener('click', () => showProgramDetails(p)); + progsFrag.appendChild(progEl); + }); + requestAnimationFrame(() => { if (row.parentElement) { $(row).append(progsFrag); } }); + } + obs.unobserve(row); + } + }); + }, { root: scrollContainer, rootMargin: '300px 0px', threshold: 0.01 }); + + $(programsEl).children('.epg-program-row').each((_, el) => observer.observe(el)); + $(programsEl).css('min-height', `${Math.max(200, orderedEpgChannelIds.length * 60)}px`); + + requestAnimationFrame(() => { + const now = new Date().getTime(); + const offsetNowFromEPGStartMs = now - overallMinTimeMs; + const scaledPixelsPerMs = epgPixelsPerHour / 3600000; + const nowPositionPx = offsetNowFromEPGStartMs * scaledPixelsPerMs; + const containerWidth = scrollContainer.clientWidth; + const targetScrollLeft = nowPositionPx - (containerWidth / 3); + scrollContainer.scrollLeft = Math.max(0, targetScrollLeft); + $('#epgTimeBar').parent()[0].scrollLeft = scrollContainer.scrollLeft; + }); +} + +function startCurrentTimeLineUpdater() { + if (epgCurrentTimeLineInterval) clearInterval(epgCurrentTimeLineInterval); + const currentTimeLine = $('#epgCurrentTimeLine'); + + const timeRange = getEffectiveEpgTimeRange(); + const overallMinTimeMs = timeRange.min; + const overallMaxTimeMs = timeRange.max; + + if (!currentTimeLine.length || overallMaxTimeMs <= overallMinTimeMs) { + currentTimeLine.hide(); + return; + } + + const update = () => { + const now = new Date().getTime(); + if (now < overallMinTimeMs || now > overallMaxTimeMs) { + currentTimeLine.hide(); + return; + } + const epgPixelsPerHour = userSettings.epgDensity || 200; + const offsetNowFromEPGStartMs = now - overallMinTimeMs; + const scaledPixelsPerMs = epgPixelsPerHour / 3600000; + const linePositionPx = offsetNowFromEPGStartMs * scaledPixelsPerMs; + currentTimeLine.css('transform', `translateX(${linePositionPx}px)`).show(); + }; + update(); + epgCurrentTimeLineInterval = setInterval(update, 60000); + $('#epgModal').one('hidden.bs.modal', () => { + if(epgCurrentTimeLineInterval) clearInterval(epgCurrentTimeLineInterval); + epgCurrentTimeLineInterval = null; + currentTimeLine.hide(); + }); +} + +function showProgramDetails(program) { + const details = $('#epgProgramDetails').empty(); + const m3uChannelForEpgId = channels.find(chM3U => chM3U.effectiveEpgId === program.channel); + const playButton = $('#playEpgProgramBtn').off('click'); + const now = new Date(); + const isPastProgram = program.stopDt < now; + + let isCatchupChannel = false; + if (program.isMovistarVod && m3uChannelForEpgId) { + isCatchupChannel = true; + } else if (m3uChannelForEpgId && m3uChannelForEpgId.url && + (m3uChannelForEpgId.url.includes('.cdn.telefonica.com/') || m3uChannelForEpgId.url.includes('.movistarplus.es/'))) { + isCatchupChannel = true; + } + + if (m3uChannelForEpgId) { + playButton.show(); + if (isPastProgram && isCatchupChannel) { + playButton.html(' Ver Programa (Catchup/VOD)'); + playButton.on('click', () => { + handlePlayCatchup(m3uChannelForEpgId, program); + $('#epgProgramModal').modal('hide'); + }); + } else { + playButton.html(' Reproducir Canal (Directo)'); + playButton.on('click', () => { + if (typeof createPlayerWindow === 'function') { + createPlayerWindow(m3uChannelForEpgId); + } + $('#epgProgramModal').modal('hide'); + }); + } + } else { + playButton.hide(); + } + + if (program.icon) { details.append($(`${escapeHtml(program.title)}`)); } + details.append( + $('
    ').text(escapeHtml(program.title)), + $('

    ').html(`Canal: ${escapeHtml(m3uChannelForEpgId ? m3uChannelForEpgId.name : (epgChannelDisplayNames[program.channel] || program.channel))}`), + $('

    ').html(`Horario: ${formatEPGTime(program.startDt)} - ${formatEPGTime(program.stopDt)}`), + program.desc ? $('

    ').html(`Descripción: ${escapeHtml(program.desc)}`) : null, + program.category ? $('

    ').html(`Categoría: ${escapeHtml(program.category)}`) : null, + program.date ? $('

    ').html(`Año: ${escapeHtml(program.date)}`) : null + ).append('

    '); + + $('#epgProgramModalLabel').text('Detalles del Programa'); + $('#epgProgramModal').modal('show'); +} + +function updatePlayerInfobar(channel, infobarElement) { + if (!channel || !infobarElement) return; + + const logoEl = $(infobarElement).find('.infobar-logo'); + const nameEl = $(infobarElement).find('.infobar-channel-name'); + const currentEl = $(infobarElement).find('.infobar-epg-current'); + const nextEl = $(infobarElement).find('.infobar-epg-next'); + const progressContainerEl = $(infobarElement).find('.infobar-epg-progress-container'); + const progressEl = $(infobarElement).find('.infobar-epg-progress'); + const timeEl = $(infobarElement).find('.infobar-time'); + + const logoUrl = channel['tvg-logo'] || ''; + logoEl.attr('src', logoUrl).toggle(!!logoUrl); + nameEl.text(channel.name || 'Canal Desconocido'); + timeEl.text(new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })); + + let hasEpg = false; + if (channel.effectiveEpgId && epgDataByChannelId[channel.effectiveEpgId]) { + const programs = epgDataByChannelId[channel.effectiveEpgId]; + const now = new Date(); + const currentProgram = programs.find(p => now >= p.startDt && now < p.stopDt); + + if (currentProgram) { + hasEpg = true; + const programDuration = currentProgram.stopDt.getTime() - currentProgram.startDt.getTime(); + const elapsed = now.getTime() - currentProgram.startDt.getTime(); + const progressPercent = programDuration > 0 ? Math.min(100, (elapsed / programDuration) * 100) : 0; + + currentEl.text(`Ahora: ${currentProgram.title}`).show(); + progressEl.css('width', `${progressPercent}%`); + progressContainerEl.show(); + + const nextProgramIndex = programs.indexOf(currentProgram) + 1; + if (nextProgramIndex < programs.length) { + const nextProgram = programs[nextProgramIndex]; + nextEl.text(`Siguiente: ${nextProgram.title} (${formatEPGTime(nextProgram.startDt)})`).show(); + } else { + nextEl.hide(); + } + } + } + + if (!hasEpg) { + currentEl.hide(); + nextEl.hide(); + progressContainerEl.hide(); + } +} + +function startPlayerInfobarUpdate(windowId) { + const instance = playerInstances[windowId]; + if (!instance) return; + + if (instance.infobarInterval) clearInterval(instance.infobarInterval); + + const infobarElement = instance.container.querySelector('.player-infobar'); + updatePlayerInfobar(instance.channel, infobarElement); + + instance.infobarInterval = setInterval(() => { + if (playerInstances[windowId] && $(instance.container).is(':visible')) { + updatePlayerInfobar(instance.channel, infobarElement); + } + }, 30000); +} + +async function handlePlayCatchup(originalM3UChannelFromEpg, rawOrTransformedProgramData) { + let normalizedProgramData; + + if (rawOrTransformedProgramData.startDt instanceof Date && rawOrTransformedProgramData.stopDt instanceof Date) { + normalizedProgramData = { + startDt: rawOrTransformedProgramData.startDt, + stopDt: rawOrTransformedProgramData.stopDt, + title: rawOrTransformedProgramData.title, + serviceUid2: rawOrTransformedProgramData.CanalServiceUid2, + channelName: originalM3UChannelFromEpg?.name + }; + } else { + normalizedProgramData = { + startDt: new Date(parseInt(rawOrTransformedProgramData.FechaHoraInicio)), + stopDt: new Date(parseInt(rawOrTransformedProgramData.FechaHoraFin)), + title: rawOrTransformedProgramData.Titulo, + serviceUid2: rawOrTransformedProgramData.CanalServiceUid2, + channelName: rawOrTransformedProgramData.CanalNombre + }; + } + + let effectiveOriginalM3UChannel = originalM3UChannelFromEpg; + if (!effectiveOriginalM3UChannel && normalizedProgramData.serviceUid2) { + effectiveOriginalM3UChannel = channels.find(ch => { + if (ch.url && (ch.url.includes(`/${normalizedProgramData.serviceUid2}/`) || ch.url.includes(`/CVXCH${normalizedProgramData.serviceUid2}/`))) return true; + const tvgIdServiceUid = ch['tvg-id'] ? ch['tvg-id'].split('.').pop() : null; + if (tvgIdServiceUid === normalizedProgramData.serviceUid2) return true; + if (ch.attributes && ch.attributes['ch-number'] && ch.attributes['ch-number'] === normalizedProgramData.serviceUid2) return true; + return false; + }); + } + + if (!effectiveOriginalM3UChannel) { + showNotification(`No se encontró canal M3U base (${normalizedProgramData.channelName || normalizedProgramData.serviceUid2}) para reproducir VOD.`, "warning"); + return; + } + + if (!(normalizedProgramData.startDt instanceof Date) || !(normalizedProgramData.stopDt instanceof Date) || isNaN(normalizedProgramData.startDt) || isNaN(normalizedProgramData.stopDt)) { + showNotification("Faltan datos o fechas inválidas para reproducir el programa en catchup/VOD.", "error"); + return; + } + + if (normalizedProgramData.stopDt.getTime() <= normalizedProgramData.startDt.getTime()) { + showNotification("El programa seleccionado tiene una duración inválida y no se puede reproducir.", "warning"); + return; + } + + const catchupUrl = buildMovistarCatchupUrl(effectiveOriginalM3UChannel, normalizedProgramData.startDt, normalizedProgramData.stopDt); + if (!catchupUrl) { + showNotification("No se pudo generar la URL de catchup/VOD para este programa/canal.", "error"); + return; + } + + const catchupChannelObject = JSON.parse(JSON.stringify(effectiveOriginalM3UChannel)); + catchupChannelObject.url = catchupUrl; + catchupChannelObject.name = `${effectiveOriginalM3UChannel.name} (Catchup: ${normalizedProgramData.title.substring(0, 20)}...)`; + if (!catchupChannelObject.kodiProps) catchupChannelObject.kodiProps = {}; + catchupChannelObject.kodiProps['inputstream.adaptive.play_timeshift_buffer'] = 'true'; + + const existingTelefonicaWindow = Object.values(playerInstances).find(inst => inst.channel && (inst.channel.url.toLowerCase().includes('telefonica.com') || inst.channel.url.toLowerCase().includes('movistarplus.es'))); + + if (existingTelefonicaWindow) { + const existingId = Object.keys(playerInstances).find(key => playerInstances[key] === existingTelefonicaWindow); + if (existingId) { + showNotification("Reutilizando la ventana de Movistar+ para el programa VOD.", "info"); + playChannelInShaka(catchupChannelObject, existingId); + const instance = playerInstances[existingId]; + if(instance.container) { + instance.container.querySelector('.player-window-title').textContent = catchupChannelObject.name; + instance.container.querySelector('.player-window-title').title = catchupChannelObject.name; + } + setActivePlayer(existingId); + } else { + + if (typeof createPlayerWindow === 'function') createPlayerWindow(catchupChannelObject); + } + } else { + if (typeof createPlayerWindow === 'function') { + createPlayerWindow(catchupChannelObject); + } + } +} \ No newline at end of file diff --git a/icons/icon128.png b/icons/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..904c4437f769897d10f3b6a37ad19523fe12cb89 GIT binary patch literal 29303 zcmV)TK(W7xP)00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&atujCK~#8N#k~i( zWyw_@y6!zUcMdbtVY+*QMx%t{D2xKqj1mG1V}tp44{QSl8)Hj0SrVXVf^31Y{fq%W zf5utZ1_KJCoRE-E9*x3;p4Q~fxo`JP=ic}K|5~ed?S0O@eP?9z{&Q>Bs#R;PT2-}n z?b`cX6xMC~TU?lS7u}m6yx9W08)uCur)|RuP&M%KN)s-G8c4`C<*+?i*&dI{4 z;C?Kx^zBlA$zHoLHF=jRsf!b0C>QNFaaY>WLB>#wXxeRO2h#(OI^(d*gt z_z2RNZJg}criq?ynH~o{VKbn6qoZ;}tt{iX0$f70i7wwUAi+2B+OLpk=9P)X4Xm;LC&-LwMf5iIB zW=jgnWdtyShz+O_lxdW~CKkdA#3&l*VZz2omu-4%#5PZk*%dS6wr|svUAuYG_HCWE zT^oD0YwHHvJT-1(qdn=DSzd`;rqPhv0@!wt?nF~H2-djO8fl?blcH%X>6%BRQq2=m zII>!|s%jzY6DSV^X^pHHW@}YsBXwgnZy1KwttJfdv zg()U{etFrBoSwC>9=m9_A31M#otm{rE-cx(C9?$%5yVCjj0_Hj9v20fgDqbJRX{Ol zWTY|?3MG09Rx77 zTCC=sE9RUy>Ou}Wj#x1n5DZe9V_0xXxl(@Z_$B*`htAlSj?LPGST!#qAo~bdU-`Hm zB9Jv}ZjBi!(OD=?piMRqRn8GNsLY%rP?jfL z337Ue=_i_%G!%1;yQr0i85%$>{AiGRr2!BFHX4S4!l^h`!U}T!F$gdn2)c6%3-+al zF4%|fJ7r%ya>0&X?Avl5(~ZCwLwyg?xe`H=6YtI_gp@~IL@5w~+Qe(ADJX$Z)r}}X zSx2Cau*+?#pIoDca|Su&R>p19^orfMeZpRR^+tQn)!XdaoijGp8;39~a616oSnuN% zmN`bs7&aucP3DxY;j-bz<&nxI@?5jFIbdte%0ZNslzQuSY`sXsiEg>ZK;vMnD(_66 z>lBI*z=1ay+7)7<8NtNOEiTyCkI&i%?mc0D{_uHw=FcJ2tL6&#r-~3x z9CMKYZ!g=a;UyfGi*OTzyaYFFp=d+M+ao+@aYVC0BG^o@Gos~be~W*p0SrW&?!#5QiLI3_tFbb-F<>Lz9%6QQ24B$}^B<1TGIZHxz4BU8b@D zMHHl7Y@@4R3$4TUa1=!lakF$177xFwszd>ibw24_adf8(+vn!y?IYhjYwx}1 zq}_4ilFi|69Jf0*#sH=ZNWLd!0jp4uIxr7#l8IKc67T?^pMIHb(3Z`D>!>pAN8U6? z3W*sUbpOa=PCMQn%`D@@U>X}8v+K6^?B&;Pv0Ja%Vpnh9p#AGIf|Vmo#HVON*SU-v0lq% zasgfz8F% zyZ*{;;PkDZ?aCo^+Ch*~4e&tk++{<(!vX+VY9;KxWY=Cz~mkda{tp z4NwO|SU~ZxL9ptY#&xt@46W8k@R_A>7^AOzH9<$CI8DJ{!s@x)N3c$t-E!SV`<^Fk zx5w?+jD^u}9=X8i@fCfDHk8vGi=_?ES&=83)I>zS8tVGg`4*rcl}#L0vzKkMo^&l& z`?D&#N<>F72doWmv9*GVr=iwh_pm=ZK09mg{KiRp_uVJ#fwS{^R5XD)t}w7+uWHrqZk<9_OLPbui(k2hlu zFDnV&Mj=}ue}K6{5ElT#pF zq};D(edf}{L2}uj$_`n{6;R=IDX|`SV6yX>GZ46{a>e8g)Do{NBjfhu-P88tPu*)T zJh0iud$@({Lq5jJvv|=&ae+3O5A!K`5?C8C#*ZmTMW{H~)G)Um6KE)nS4KG?O`D|1 zNkmx;?5A+4IyXOO|K+R4?VVpgX(wjq{IU))28o^m$ruiz`F12Hjyxdj2yPnC*`Sw~ zqaJ7|pcGnMArmB7sBQ zPWqha8mjAAm*up_GB^9;hq4C?3mj}-j<~vE=)wBz!>8@Hzwof#esmVqxMSDsbLUBE ze>sqIqGZ^!tZ6_FTl1O{I37t+a+v{yj3X>Z7QG3C?X+1$gP?SZXCxND_n&^1z3locZE6f+e!c=64H|Jh=SA-3 zg*4y7u*x+R+Gxfja-em&UlkO%OarX0?bj+p?Sm8w&QpnjBr5Atwv`3E z)R@7|C$za&efsVhd(BPP=$$LRV-+zfne2DH2()|voJUSWtsj(4JwRhoSzK6LSlwDj zw}rLp1RpvV$tDIBxW=efQNk{A4doy$+WQZkuz&G|qxR6*i#A0O1TSs{xMqgQd^qp+ zl{@JfJ4?ca+PM%6WFDmOB?gBli4&etPODLqwXQ*5-OM8`2%}W|6l%j~G zrp|$KsjF-CR9SWT4%7&?0R53M>{lmj_l8M(?X$16@3`>_J=&9R-0%n5L*hq{IoUCb zIMTjTEl|9}8j6&Ge5#BrEL1`2?KY5vlR{PQRt*BRMJSsXuAw==OP{wK>Dk=Ey#3qT zkJvlEdekm0EMoXr-@{-sh`??E&)qX~7wunu?y$Z4;7MEQ_q8414wY-b3eIW`slOR5-7cCr^jfA-Fq0;@V-(~L zxgfGK(Q>upcghxa65bb4mA!ntRhR>MYoi2dZ8T9>?K+NAqM^J!m1zq_ad>w>iV?>6 zF0G7Vu^6}Sd*W96iD&Jx9W&F`$K{`6Uo2$?Wp^nUiB*eE{iOuyBG{K>E5MaP=OIRB*nANUzY?g0;X;;bZ(8C= zbYHnRt6@lOvMPJETuWm>y`?myk6;vD5CbyADytP`$(9brFhpDyr|u{}JKMJ<%ts%A z`=V=h+AlrtO53w_i}m{$dkqR!>(XYf)g31~#cvglEl5j8haoCr033c^ixqpN{Q3jm zQyv57;OTSrE1!JCzIg0{jbnCr1?H#LbqUj*FEY*=)%~ssK%pXu)q+%|kg1WZG@Zx^ zB=UmLOlpG+hSFMAR?W9H+NEMM9glL;j|O>K7g=IJE@bLfhS(&l?j!F5R`}UQUai3I zVayj+#_gs(GxqwM57_lPXRu)Ow4$z{PWmuFn{H<>AB~P zUnsM{{SB+oJAQqGck5p{cHZ9bu?OsnN6sTa`NAk3|8|JHPBTmWsD?~k2rD!AMI;` zMr?d!!9I8RyuJBT581sZFW6`=#T#>+=hLlPG`b;j{LRPd{WQF3f?0tDY1H zS@0%E`e6uMPDyPrrHvZoHz+~6n&>byX`qHvM)CFg@?sSEGBvw|^FwlsTD&Z`Om>8M2kKKP(Z?IhKFKOEN`HDPY+{!R#Iw&Gd ziw(N^e12ZY)xo;KdOGhNP=X=K(4GR5v4&iH<{)?ndG^vJd&g%UvCltp1~*CQC`4&R zD=m*|Oo!k(t)x+r!QfRW?ZX??XCk*HO$T+TlAO$PAQhD3KwBw-zRC0|NGlX+iBSoO zyj&gXdg|qPW>ZS&Gu`7@Da9*lk)Y?98?2Mi$Z`B=-*Xq?y?Xw*g_k+@+E}~Qa>hq7-2M-;`O;g;(vs2V57Tr2^3P{(95RF6dihSmQGIohtu3NWG z)F!&<4*f7thPt(^=BzM$d@~W;#dpzgoGO938X_<#*Vxao_d11G%!j6rC#1r5M9)rj zr5jnY-@oIy{qfh2S}#6i&Lt@A>L8*5Z3UTaHOQJ;so|B&{i8wMM4R@G6@XUopcA7A z%K!1TBlbsk9@Qu4(Kpoj8C(Q|bW2rPyhN)|AxEeUt_1^F%|rnNO2;Ui$&ppQnu#cA zOAdpF1mU?Wmy--!m+%xL;V7$5a_YSDrSc~Weu+maHWKNNFAP3j;9+jWhqzCXU*)(* znGi8U*T~Q^?#(dg8XEAGG9I=740%IznX;<)vQ&p-Gu- z>W71)oGE0ai-S7EgfbJzob$$Z=(c?8CcplOHSjB_ebQuR~b&M7Vpp~={UoYAkS@L$hVn@fJnXRP-HUix`%0=<;}| z%UX%D%(`JI+6CE`2e&wkp5f%v0vYf6_yl|Cvh00lBB~q$l*!KfitJTN+4m^ZlH_Z^ z&lUdW51dnm^0+P8ZTFtH|9QtzTVg$I_?)ob6Ia;AH-|TaW5_fZU_7=xX@k1a94H*& z6z}->ouqf)bHv_r@Pv)`xyGfVlyNQ2PZ#0^-velPYQ=OnwSuDJGZ8i2MJ>CQ+?sey zN^QtQHIYgR^U0Qz{uF{B1Di6*2)?V%7adnIR=w2uBbiS3@>6E@E`6t zWw#%`fLd+|*fu1~T$Pe(#Hi zZDeslk1pgl>qNLdIXPI;(=jMyPBq+21*Oo`mH|lv(NxwBLoO@=1qCO_S6v}$B(tjQ z=&uJp3Y4#G#Tb!WJONKJsxph5LT&{75m8Z8gbrjvokwvy6= z4#d&{!-dv)ng2JRKWvB3F4$B&PxGdk`&sU0>f>Ne)b!=h?p_5|G_`d*CAE|}uzu{y z62o|ePh!w<9FU28O{~_DmN5vyX>JENks4P7Ek7ITkBU&QNN7VGI!Z(7aGi+E11i?C z3{)X^^&&vy73fM__9p92mruZ9w&jcSd-4hm#PRYS&P zVo>PUhweRTAHDws?gE!EXg+x5tZ_jUnVhAS1cdq&7Q0}Tsw+4zYq|jucG^r0PM+=5 z(2EWGAJkk}K7r4iFaBx2CD|+^ao>?idJUZ8c2Y+PPOumPfp)*UqaaZ*xnlAoj{2I7 zX!z7)^F3QxKpGiC4T6WODvg98Wm+=XCzd(poEP$IXPTU!j8Zx38EopaiXn%LA4^}s zJ;#5(Sz zwm&*?+Z4%GXn{A0&doX=$qz=PhU7#$T_)Pk8fONw4ap=5(-YfbF!Bk?-13Bd`!yTw z2cNOiM*IAcvN8R7pr84!#x~qP6@t$m2BO>~ugx*@y(oE#HrQq<`j0!QDeO&;o}ah> zc*jF_30pk2#=w+L4hSmog6^cG5IvNdlFNRf^s3{ zs}z1HP({TAOE2pj%CkU70qrR0eA@I&)EJWsi{ti!t2f!(ZoS%m=Ec|8-+0Cz>n~tF zFy5nB-4v+NBB!94cIOckX#%)Hj$H<34OICO0Pp43vQ0ql!}p!BPki%Kh|nrlS@@ZK zBuG`K#~MIv>Fl5*ktgkD=veJs8qInphhMsJvvhLS{_xIIHiki}C)8`NVSuPk{Zs~ODtMnc<$R1GxRS>Z{RabR8^swse6 zgS^sr{-MfkyS^^%xTLe>KZ#*>9s}Q^TjeXzKcH2Uq-yCB| z@;kO_E$*w>4ofvqK^7g1VfV);kX4F0(x~_UlHx4Fvr&DbZDDcA-uczTc4E%k^-7;( zw?QIk6;KD8x)B3GNyQ>oXQr}}rXC?R90n7WnWJgsOfm?PTN^$nd*|0q*r|&P#-DWO zJ3bm@A0Ei5P=<$kj^wNtjV949wZXbN5$RQ{mc}vKfjbl&xx)<%STOYU8=KI*6LXTfv zcFP`~Y*FoXkxkcrR3zd0fgm`$)Zs!ki9q|x(Rq8{-N(!P>y%0*=9KkPAS=^)lzC!0 zwKnSEY~bfSYc&X=HLat4430tuxo3wdc z;$L;$X8VnoUu)ZEHmkM)0%dH{-t>|K_MB_BAyD~#JO3{LS2ph%=SS^QoVon)R>WXZ zmfpMn@*OFUG~+zC%!P@obswwZAK%HRJF~D&p3ioui5HZoG^7K=5{WAx%IgZ!E@X>2 z?J_`NWeHCG!Cfcq+?+oXl@$Lp7))T56rK`ERxF`gUIQ{&650xyRGrp?mK=->)vFs! z)I2105h+i;nx}XK2K-_@IGXODg&0GQ3}?# zs!IVnpQ%Qf@dhfjSbo+!l__{^Pd3v&rGP5e7^AMavv+=z!l!gC`GOa?Eh?_6&d04J zR4|Xml-xg(z9%aHNjtopuJAcif5ra6&HL;}pTEy0dNUA6M+oY1N>hK-c5j-oH{No< z9=~g&%`Nje0B^Pyqdt-TM6m>FFxUhWi@_?Q3Dm0>m}q`1lmE$u|JLQUyHDA%i;H|3 zL68viIC`#?H*)GLKVAvCm3Os0S=jdy{lGCrT?~ zYyX?*m?!~6B)vu|LBk}#cG5Mkg}NMcS440F@@buDHH|sdO)G({vBQbS5ktzmlLyE-k380q9%_yc8I<>$h*Vw<1t)ykgoeF8Ll+zXXGhG~=6LlbZF4+D6@~gLCf9 z%MJ_Z0ROwoq0{sBXIQ-W#VGY7UM?9JG}yxGL7IwP0}*sQ`d(wjj$D|tkKK35M)}SX zI}R_^<#f8%kwGsfrzsPi22tdMl}XET6dRC}X*inUNvtlrHsJ4os`r6it$Wi&)-f+~ zX^RYA8u{rBuBg1T1<5;U%s0k*856%^A3QW?KmGpu?eyY26#NT}#hN07sCzqRPu#i1 z-u%)7cKsDIxa;RTMEuY>e<3DBGAH8lEacuKCjn{jWcSv2U351n=X*(-`ryH1b{^Y6 z$qYLwl2uR}zucZQw~Jc0#%g?`UFVjQA~-4Cx<3CyT6Dfnfd|4wp= zk2>+<*Eu)}n%zjKefXXe`mb_Co*xBOQU1_5>2pGuM2h99w4$6US@xq#Ww~G#cDrIo zk`JCc3oVv%U5BI<1}XGBrKzNOU>ljv_Tj^eI-(r(zf$)3J<6GD-1 zbt143v<%h_W6Sp8uN||ueB?n$bMTkiBi{@hGA_rYdUn&^?exy8PH;(pvf!OaZjCQiEgHQfGXf^^V8 zc}oo7!}{9~U$nch?`_|O4 z?5hALQ#U^KO2Bg1lTA%@)GMcc@|>SX1t|JP6?TyU$N&C(33u_&+%;jp`tqyoH@@pS z`_3D;+663{{MA8z<%So}sqtm|lP{mJU;neCu*G0+R#c_%ix*6m9i#UAecN<1wPSkR zX8Yr48-YK%Bny-)U+JliUV{n9#azyr|}S5y9*qR%{Z(H=O1?Fsy6+^Aj| zZ6aR-YXoVuSn?X~#xffJ@HbD|rTL}uoh6s|lvF}=_$E|=+6E+7t9p#6{U8SXdJJ&) z8|~Fy9^OK8x}zSG%zwYIj7Xguokk#SwzpspdF{>}ws~@+z3xT(5vV)#9zB2D&9JBB z*Eyzoefuwe@u2<7&pfR5`4rUylWk%S=%kwWvSZv{d|t1_SB_9;hlyQ5S^h}atU7WqG%0UdP;n^L{2}yf- zNL?0SDC?NgwswT{Bm63r1al>f4-(~+z+w_w1&D&?Z(eCXII?8?&vmmlWzW5OqrKrp zSKIz=TliF5W4mE&4ExDF_Tp36rw9`gc^?UTe_SNy}Zme+&)@snDAeqn2r}6Q@qe%REw|<{_mR(Xw6poxDgo37JAhIsqRc z5lTINtp;&5yE17ny?%$i?biKv&5lj_m*zUr5RCk{jGL!s>=$3M&z`e?vmPb!sb?Q! z&!1@@A6c~D{`f)rA743&78wA(Vr9FU2L&D(oEuzrdp&#QjaS+)-?Gm(;;QJsRubrp zzaU#-u;di2=vaLesNlN_fBbC4?ml_R4xPG4j?_yNMcuW8$}{ z!Cb)Pe-vlNJkNAk_KPSg7nzbHO6BZqY8+Xv z`IN^IS<~kVUhRD=1i^uAF&coCHBBvp4o4>1#Hz>r>mPR>owa$=yxePY7~IH17X%L_tD%#KGPN9Yl-agFejL^RKbT!uw$I*w z3RS!&B}nqhEZ>X&p{HJDuYWOaW)PtI!CGl}|Mc9M@8H1qMau zOsgU1H5HhtNSeWl41E5)=iH+ACC(WKXvup?@bMaUcdxc;(F9e(4F2vocF|7G`2%6C z!V>X1B3y3FA;~Epcb6q1YcvQlS!Q5It0jmkKMH3U+FV(0jSAsy2&&?tIEa+fn|hwN zJ#c7lf*yb-kQ0^dafQPT67Fu9?>c8xg_v2cPVBG!S=}|6krBro?3g$*}-J>{w(C7codxke6NOs+&+uCd}}@-=7#D?!SQs8)x< zOfX1pQ-gEcc^wb1aGjv`H9c;+}4^%}N_Sq7@+Qyh$M36mu?@oIY_OClP zPb*OQAe~pWN$gS2U!1eIz3(pj%!8+8L&`GOhwLSL!$0jLF7T1HMr zE>;dJpcx}D#JI%z=NTY}2)l&K`{wBhd&7%&+uwZFZX557>&A&1ddEiQT%RMT7{S2< z$GMzP2I>protI!1)#MWF$$UFK)W6N6pnb#mpXYQ zimj;kh8l4ssjr5jpGd_910n>O5E~r8cB;{`tO6vI<8pv!l}l_#)D z9zM5duY2#;?Bm}&f*Y?{d)vqEvG?C~!lu*%*oxrHE1|!Fl_mKhN8B9&6nSF64io8$ z=Q>QV0`p9~(Yx#91v`h8URqFMTST_pjgbh_6k83htmPjK^M`NG&MkrEeD7d`;8w|- zPe#U?ctr83axMm?5n2Q7KDANnC(XP{*$t(Hn8?<$T|tvXN78RO<+Lu}80m{ElXmU4 zX?yD{4%o|{aHWj%hiG$N>*fo{OjDFYnTgN>0D&be7O%eH3j3)S?Y2<_{Zb#HfI2>& z8tX0Ek@Ji8i|;>VfBU~5wD*4PIM#9OKhdbZn4u1aK{x02H9<^CQy_|!KZOvTKta9% zR27Xez?sHV=bIu&_S5~tE{ zYT5YIBs@k?4N$e_4fR0cB(-+tgJSK1FhcdyN_;69(^BlUii}2 zB)qTLhWZ`mosWbAbAp%Y92*5JDwi+v1}Gc6x; zu00jo9tKTnfkMGl-bocNk1mdbI)NO2Z2#`#7r+A($@_txr)&)r%X|GEuQ6yWR>EF( zn`bV~V?R327)6^rbDFO5pg`3h2ixnSYB*Ry`I4g%5umV*sukQUG59!VnY<#C)Rma2 zIum)3#GrS|fl}`9lyFFz8H_sVEBB$(bNX}?xw7q)6U>9;aK_D~AKTziF*!ICR5*I6 zZx^v0~0o>RF*h}zJPjX&^ z<28+q&`DM1t=1c~+wCAKhp4Sfufdwqfnlv&o~Mabkg*jEB~Dtti^N|K>EkZ`ho5n! zz2TN?Z0ii)Me>QKPVp!SnDro!@+$B!V&Fwt%c}>R2WsEO!26>+j@X+%aIei%beSK) zlUSqYQ5hhS75sCjysc8>x!QA-K3oo^TdmRTgNI;1r^UZ*dZ!AYlGhPzsdG0|I2IIU)@3IH*flW5TP zn~-2b3T>Teseu~7p=OKcWFabEX&0t_49LN)5mrw=n_R$3If+&DA3yIZ`$xF!PL5CL zJ$Guczl4vg`=)J4AU9gW!Ljr4bKQ(Ojw4w(L6H947ay`WeejT-yx4~y^J9(CBf=cH~nJH*lbtEUz)C@sZu1kpMSg(B|t?Hmt zw!}a^z|QicQ(QrL2hUIWER0OrMg-;SU$obL^f`NRqcWk(sixG$0s2)6!kXPEZMl>J znLg1fKjz0rSlqPX?{_|T#QxuIXgtjjtI(I8ooyG{@#vFu6p zICvEg!3)$hk&7v>Ecc(_9X|XdqfUvSxjpa#2Qw!oGJnWi&OzNh9=pJADHbsY3hrd2 zU>B+|Xo(57!ShXgD3o9z?V0wxLSc9g`NF|78@$*W-+3Y>%PS~@7&8O{ls8}5s93wG=rmS~K=$4@T#iJ(KLg;H)N z%$ZmTRE$om@yOX}(M_3a?6=pf(ukp-%!se)jXKy3tkjF5bAin7la@7noJ)~L-bE!f*X z@qqoO&pxP+-SHnTP_kS?tAHtw$rAKYyAyVnyYU;>Gw9 zg}n7bIWG4QVEa{v1n}4~R`KmnemLM9KUs~kn{Y611s?6>fH2FdfLP&FjFj}5Tr?E0 zI&lEyT9tSK(8MC~rTvg5ju(beu)SNV4W(=?6VLi+1qd#EYM6k_Xy78{in?qV;gu!3 z&>ywOZSL8xzwChBeBDlcvr__);2R%WMeygRGx>A~Y#j+woHW!ZxjYM`HI%L*eVS(K z^?Lf6@EbpHpZ)hQJb-n35tnwfGRhB%u>Z8lv7-$g-3Z{G@WsxkF|QE9Gk2?#aL6P^ zleLi5KDB=EKY@LshsQ3=*_qinKY41K9r)#*PD+N(c7>B?cJ9)gUEmKusCCy#X|=%| z4f>0Gyu!4W@=W2p7ABEAHgH~sEZYzGECwGb8fAxdsSzD@gxYrfoM=|%7K1DW9>v2a z1%>GF3bMRJvz+|i$|6>+WxKFEX-~ak#@_MD$JsOX@6bo+*q#EC%1F$8l}I?vUO3V* zB7D`$OA1=r!Ap1WNIm}R%X72#^S9k=w|(QV{<(rbOYC_+^>~nF9z0WP(iaPGLTX?t zS8Av%5t$bXnZ_+ur_NopQwY-h9IHTqn2QkB`~oORirgaJ z!H8YLO1gmcS-R|48bVU0L+Fzh*ipH!`eaMABJ%NsWXMxNf1V=BROK^)+}+n|pUr}& z3j`RFCBjIEgg#hBph1XM1Oa)_nr!U%_)YioD`WQjJ=6B~S6pL{+qG36^zhX=)=Ubs z8E>lCYTB&)1CnMgS^*U@G$o%`Y+`K84&sL6r{8tZK6x+ShhK_1jzwrIi-u)@NJoGW z^ArNggGTNzZ_~N#Q=x*}l>GU43M`@c{k>YwQ6vcxZ=1*FnCZy;3Nq`s~v@6VE91^2Ioi*0m8dl83-9~ zyns9nmt?}WD1YT?tQs|lvNw#Cl;1_d-W)6FE!Xa_x4z;!yL#sqT;d@Q5$!*<@=`kO zF`*4KEO*p?wmr2<7mie9>{<6fW^!K77i4>OBYTt4Ge^4jw0lKBVEFd?MPH zc4@;tlXC=jph1?|RU|%<@cI}F_AACf?nYAC1$FeR66KL;lE753AP<|eFOnaC;Yat# z4F8zITKY7lk zM)kHIy2w2!49HFxW50{hAy{u!?eCDJY3%X|cA7&Hd7`Wrk@IUZ{Cuh0CNt|h&~yr2 z$2Gc+G%|Z>-j;RS>g5*7Y*eON#_I+^OB@GX<~u0^INEji`kMXn+-*6r!$t_W&bQ6j%=~8ddy=#Q=0tex#2q2Tua{8^d|>r*|E(H@yFl z9X&gb71XaDtd~k8*Fo|PDiSjp_f(^lL#{&lRTSliUtI^JlUb)UF1pFx8v2bg6WLn# z66(Mp;!$rgTL>2qr5NqGMgDjJ_g>_65)b%WrJW8U2otiODKj{tS#_E(xQilJkiK0+ zm~O{p{OZddZ{Pd0{q_%TzSe%^c~|Qs;{R#mFMRPElz!(=Ga4QbDA^)BcL@;=waXQh z`b$_ru}b$Q?FXN}!+z#Pdu_|~j2@WtL(DGk_LKH32qH=5NoQL`s?xXc&%c|_Rc6Kh z!DHS7Ai)lK6bPXcyn&Q+bo}cES5!Y zb(EE~+n*X)=G%MeM41%8DGq8(cQF!#=mZPUh=HuD8jIw6*EIHG(0(6hRo`Z9%=T^^ zx8MBk$Jw_(ZksJG@%utOd(HC?*iXK2KLQoH%lr-{_osYh#+Tc1TiGgdF~tRDE)Pc+@pFEL{U z|GmGs-+uGs_uIw!zJ5xv`6dGp?Svtu%*pfIn`vG=h56#2G6--uaz8mdxvV1#&Pa<* zvvpk@qSlKnFT=fC;XedrsXf#OC(H%VMYB?fUP7$R;V%Y^f4H06{h z8g5eUx+-zvG>@5BW>wAeGD)fUAqx$S#BYr1ihw_{14Tr6d6?fujzJ2uOnMxnCz=I0 zB#GisNdb{K`1Ca|-!CFZrstb9puH*BTK!39J^HZ1XR`>y-W0cRk*oeqbkV z1d3Y8vd&-Lg_dGOQ{Q=+CF60K6A%dhLYP(OmIbG23!LrMqKV1D!r8h-;G z<^cnTp7X4#MJk(s(=@IJJ)jju(qLjubK}4o(ov?U_^KcgN7vC8%24N*MEUG>TKYIC zbh3{X#Oyp)#c$g_X21EW>+DH;wqvDX@KT4Le&;2}8|y=O41xRixS~GiDjUN@^?B*n zrIHdlz%Ketl4mjlolyjTI3ja4VOMRMvNylt8vCB7?Ls4{!xq9XoADJC4XmadZF|aiQU$1N{(ZCuy?%jI(z)??OH)uFOMm!gX>b6 zrxW+6fA@I@?8k53ht;)b^ZcJiD_l`I!?+?~p!1HOA4F!b@tchNF4F!jQ}!#byk1|H zQ-I{C!@k0@jyknZI3XVjGkJq3{e(RdTJ~xFT?J`Zz&&3UUQ) zoe@{ zBEJ(3)_DZYx9^>_fA)&~cI{Q$Y#wo@cXs4A)ksSfi8KhFolx%KLjR-B*=Mi)_PsWR z{p38~HsswgW?x?$Mi}V78INN7j%;>$+#bJk%HIB}$Jz6*-{BurhMkPb3=0j1GrX)q z1MwmW@~ffSwR{FTYPTObV?X(>d+oFLpS5XTVbIp1wkFXk|ER)2scdkxGN&A;#r-9b z3B~9`3H0QpOhJrcm70h7P0B0RAgGgdky2Oo*r@wCg?pSW(-R@bEb~k_;4fBEM~Ji# za+voO+cqu|IuTxDLCMwbunMg-!2>__~mkK&E*NTS;y3n7t?|j@Ad;51>Z~Jy` z_4mdhmO7quYO?J5+Dd>=Ke;;o;4}8xPrdj6Zh|KD6NmitJSUaw=NRtPnP0+P{L`+Q zws(BzA|{t`hCosY2c}Y|0*n6AA1-n7jVBQ%i~RB4ihb(dBla`z zzSHhHHfxiJFoql7h~XKcVDL^O3tK#@>?v5Dm<{1K@;IQ4wB(0DtioOeDP3uyooFH8 zr5r`}YjO+=-xU9uPH=||F>~DpbdeqOyb<37gELy58QaukYQ=dN51q83G6tI`m=em& z1sBo>c)=V&fc8hmv@iU>zipen4g10!n>Ok$zPz(Tqpl{}bMV8yUvemiRg*LV;s>6( z+urb!y|xi&@8ZgY{}z!xIb`~Ynw$4d+uISKPr!Df&()f)A)x&74ibk7c6+eZpaxLB{~~3T&Uu{`l*M?dNVgXb+#dWK+1L>-6FHqFx^flrgl6j7|7`fzvgj z>q=B1m}L^EgyiE#!Ws0j+`txLlAIIN=>=4c@Cs8JQ-f8WMo^#CzPNIpoxw$K3Mc3U zBT(Y>fvvD0Mq2R*lLLvYX@P;jARSkrYLJUy$%vPJ7+0`)mVNZ+;7s_S|F`P6iDqIWNW_0yR9#p2tOZ=b+O##Xkl+<6XC&Z9C`VhIVhnz9zabDQh|MumF>}?;q z*G^xUw+Td{-X4Ge)=^9tI?X;P7&KZk)=;Zp)r#Rr@nRFcC0%&JD*f*Y2CWmJDm%Qu zI*u}b8fbcw|C+7{427;}tBGilVB(pE@+2&8)>*?pP7hxpM~as_ zO?)P<4SLLAODj{DrcrzC^RBelzHpySOiUu!{HDgO5Y(YPSyj>zhth@;)u*Ilf;yGsA7QlD*%wH_C4JMkyA?+&F zU>iP4n!BLevRxgZ5iDfWH^?)u^t9*&WLbxHlD{Pec$y+7A20rwyiK@UurjIfahiAJD+s5{lYE#?f-h_ zc6x?bMj}+*q7YT|=En0~a#E)ykTVdjhDDF6CKk;!(u~7Joz}DDwBorW0`fCBu<`_ zx;{XUZ}0NARr#Bx5b#PN>83SaONEwb*FlwWfDb#TM{SHtbiU9!CteZJj#g+?FARJp zHH0J@b=-4|jV{|m=NIjtfBc~Gas9h&)FJ5=YI*T5t0kGtGI`Nc1RZJDVIa~??)^q} zso@P7gF-hryu2%ynrAw=ZYc^4C9qnF_AoASA~Ed7aCdh4!UcQt2kx~$y#1*5qx?^T z%Y4K{S%$H03aLw0ZSlm8}rKZwn2?u;7T_>n^VB54F>Z{{woGvy7 z-LXVXJIL{bS4=#+Nf-G}(TDF_v7dd{K|6GM7AFJuF+MUhODTa9#7xH~7h25lO@E*< zJ{n|{G?5yw#((clmI8G_Zq^f=c?vP7J`FjC0ebk%1^c=89<;-Tuoqxz{E%pTKQ513r?J)7rHS44p{_fddoZ=ngD+pw z=Zk-}Vg2+BXAZ05)X0L}@$fnO*+2feedEYEo9Hd6Be~>DpNaPQ3Y+;-oi|+QybQ5F zl2^U6lqBiLP!W{TEe56%i{Qcz>5vGJ_R)|{tdiKU*rDTR>=)jBw|)B1DdT-?4}JCk z$eBXOv()r)t+`GUtgF1ps!Bz!W{OZ~ z0~PMBV#4Q*|K_}ht1{z=pM$DjZpx2N@%q+cG$-Z&oqP-5Q&z(mu*uTwO@cQchs&e(r4ClXjk`>h z57^ELLWTS<^*+Gb`XC_qw(M6PIcq=tCwJMG9z3Pr1l1!!o|qH~c^+aREQuyExlkJe z>{h`YWK5D@++7ocQuHogO^d@)qAoY}&cQJ|!|tQMd$&y3_KmpQ2b=KB8RC-y(Z0LS zJdoQyosqE2M>u@=`uHn0VCCap!ub?ZoK^-J3ZP>-4xCw3sz`NaupxN{{xbKABYJD_ zu45PN=iha=-Tu&7OgcXu4=DvRw*lU+f+AB3EH^2um1kmBbUm@J>Tf_)Dbnj$QKLWp zi7tv{&i~grVxN2PnEm{_@3ec4UBLbtzG}RnRArjE&Z?pbuJg)%DWv=Zkj!usUD{Du`m`KXvfdYVMXOB z#b>jqmoC}`nG1k?jeM)&X``Xlyl9!%f2D zhf0tGIW^ux3~d7K*F&$7pysv>Rd5@DNJ{ zYq%HXwm{E)C8|*%QS9n6nk}$Oi30$ll$)ec@7AprW8|keQr-wg%SAw5!B0(f!mr`LzUIPFa>_y{ua?{>fgMR14~dFafI<

    XS~ZJe3l#+Wch;W4%5n%4~9UdM8|^y*B_E_7*^((Has5}wyyf7A_RjO zS)-VBkxL+Xk%GrL@YwJ`)C)O3JoES+Gl(Jn-zwHpra_j=)ee8<5tQta!!dEWl5;Xu zAx8|8VD_xtGkPFfH^ie;jvU}zK?|r8oyt5D&mu*i0*Hw}N~?Iq9r7i+@6h(T;?2gcwj6LZ3w;I{7Ik zei!N2K61bPzn^{p29|L0AZQh!2}--Jucjg$^dWrls|Wf^U*HFQkw5B>JZ-(?U@Ij+ zyHQUl7kQ5yrx66sPc(j#t)cKzL4;bA0+pH&O3XM?UexKJaUaFi<)#B$Y=Ym@W@Xc4 zISM4_J()gZJ#=H5;rPXwNURXD#XJ_m1NZUEoh=p9eor^ zf8zxi?-KQMxRK}wsBuKwg-f&c=J(%e|Mg2p4GX(ID8fCc!WjCEPNO>r)^*YFii=_5 ze}BTEm6|$^&p;6Y?k$oiqY)wvDDM%y~jTD%~LjprM;iaB;VR3RP^&clhl!fVEUl@z_YfL#K3`rt3+{MQTbur6BjPp z&%NiH_9tIGhMT)ZwZ-4bXP@1)ztjl*LN3dtAD&=ZQqj%O;8DaHpn(Ro?k9y?Xd}wB z&vu-2Y55zz6>h0j?zTzA>MLi#WyU8uzN$pRf%ht`^MiQ2Lhu)0p1fy+?b$Z1`D9gt zro^_CIBxhGSV?6wQo_qr1Es$eo1W;|^A2p*Wly$b$&FHGRmhmz(SXrem1&j1$boP{ zz9bkF5BfkbR@6-^OZL#&OZNKr+-rY!&q*8a@vEb>>Hf$MW|6OnFs@d@|Hzbl8l5xQ z8?}c{p0S_()34h{?m1->2uyxswY;r~EKd%xkkZbosZ|ICqRwN?8k$6uBTo^B_lITY z(HTc06LeEG1X)>Y5m{#Lr-xb#w%RTZF~{6uEA+zsTWo3!*BtU00Esnx(6W=FnK$yJ ze836+xE#aPc{g9T%{FQSjFO9@8V;8zL84J5(jed%tC=*3rCwDIbuO661Dc`01{{Gg zjl2FM=Vt9q@4weRiGbk;UubxQ58#+H@ui&lc^CqkW*t`rz?=2;<|0@_JvZ^vf%H!5J-6xl|=BBWNS! zke3}Mc}i@bspduZaG+T?4L(!I`o&8JDk>#agB}Q+NOn3IGUG25X$SRuroLmQXV2Qt zf8EoULC&XCc~H3vFoC!>w&7JxPHlf@1x8C)FWYrHH`|R@ZNylN!%zlaE11=UsFqJE=9ugDFp&ga0knBrZERS<``pU1(ZSNUppVMr|sTod$(N^4+=`iOQkb-iNb7Z{TUtBCFb$s zhrMsR>!|&scOA5QkI!NS$ITjS>IWMjC+qxUkkb?$D`NnVrYkv_nVKjUygwwGyf%}_ z>PL-L6rIgumrB%pzJ?+D<{oSGLGyE?{H!pqa<|^FQ($FQREBPpnXFhz@bcGH91N@)Lq`-~Hv9;S}4W4f@G?hmTt%mHeg4EpjpwL&hdt^c`{37(BT(}*n-SQZ_T9xWDtNBB;>aNX z-A_MYZ^oYY%=tMR$AB+k_4M%fU?d_W1)3C18%n4n0q0%DX_s@)R#wJra;0x4FU}#b_;0fh>#m=d?@`^{0BMZSs!0~sKhnH`Km_t<7nc^7 z?6*F45b2Q3&GDyteFY`-_=G1E z`70kjX#e(8_akVR6rlcdHxz>uBMyU~?H0HLG*yyJuZBvlB|jt;)58)SLoT_Rj+Etg z!Xas8UdR{ck>wmQM@>7D<0lPAgk$Q7!^?LBpSORLU3cYXg@Q})nDRBMb}F(8Qdd{f zSuu!c+nWd(UTQZ?joYiAe1%Pp`-h?V%XAWofna;=I9H(3=@?BP5F9x>&`AkFRXnId zsSLUr0LbGD6=d^K$4b9vlL)TU7Z-5Xf6(4@$HO)`wjh~k24MTN2Y-2OM;gUd;R3b` z|KtPr*dKiUAsfZA%Ky`(?S$IpBPZxl6?FE z`7Ph&LnPL5yd^_Lq}3vQ2!@H0N4MB>T6G@#$AXuOaFPPN)1O~SIj&nKN9?D~6v;`t<$VB$o5EHr!tHMEPKl(#n9P4zo1I zSm(s?H+`n;d!KrxO^opdiXHdc3tusjIJ+Vv_ueWEG?!4bQH$K~B(r5C&_1W$B_-H( znsvTMJvYB(Z+h<``@=6jY*XVN$fI02*?rJsxWPJp{(`;!-FMsj?mVXd>cMYwa_iuL zQ21M|^D39Trq_Ub=b*_%A=PIm$@9ckgGrPz@hnkJzAB|i-4>@n-3cL`gqkPznY8nn zI!z1*{Bc|K0P85mkN(a~_w4(gw#PP1`qxDK;=3-3A;tNwR?_rqJ&*wjbMRb~;d=9R z+wIA_H(>Q)pz_j)44!$vF$m5O%_CoWM}lb>=ph@6NnubnmkcE6c@5FfvWe!j_eB?{ zu%gZ`E!tadyW8IR*#~jyfqy+dGD8rLP1r-HFW682uRHCd_ngpw_256W)zHYG`$tl# z_!@bYu_|*Xkl1Y~>b?z2i9Rfmb!~Det#S}GPh%0Z!^>Te=i$fXFT%@Bogl~Ej>eYd z648=q!C92&_#ilOQgeFx=;snT{DP~e?KuawEB<{0P#X!lVu|E|?LnNjNDQu|>p-#V zwvZw0;K=6bDf|AXU8RTV{6IABkK@|bra10@qg(@$kh9a9Yn46=pdPjxctwLZAqaOpO;)4D1{f>lcHB%kKEbY+37 zD45$ejM@+0w9lq-zv453Du25&bQ*YVSZO;Wlptl@kor}@d8C2{J(}ShzUXl~?52JE zbQEu*e8u!im(}71In8$k#*_yj5yCYcNiUM=F@u?84HrNgIH<_An|ss+TZHVdfADVm z_n&#dK6(F1`-kuRl6~!wvsghFV{V-WJ zrzxTeh@39(Q>h@U0gEuJXDhy0ZjxU@8@lFs0!xozFtsX#Mf~yqC_UrqP4>zgx7pGP zKazzr3(KV5>rPQglVadvBH>>qhfi+G`ppsrkV#N%n~!TI(Gq=eE+8p9EuX4sh&Bj2LLAdTFpSjiYBroAFpC4WT@x9G>Kx=DP5{k_NhGw zUK#5;Nu{(W)QloP2Wn(Jo%cEA%jFB(rNj~<>UWbxN`RN&E<*C>+K5`?+$+0%DT z+IK%~pD!$^NAszMJc%}1qdi21YxK7U+Ens0U3c|;v;EsQ*x$NomjYIACvrp07tc)j zPg&@x7l90p^qTgPMnL6vgnX|img`8*Lo5@KISILj19P!rpgki~9c*C@->Iq!dN!aZA*kl=XS?Iwb!a zg5lg+p25qH@NnVb|Jwf>PrkyQd;OK#hjK`Kc;Htw?Rt&R>&3cP(wL*6Xq?Uor{l}E zX?om#;^qUkYx6iR1zb_#Jb!W~Kt1VZV7AVLiY{#zqN3_*P%M-@XcAc_vNOs!Wz8sx zN?FyzH|8PYnJT;xGOHp)hk|w8qzT7gl+)Fg%s}$J-@wU0WZq&1vXMN>Kv#;TX3kV5 zi;>5VE#kGXJZ4YbJz+oi+^Z2#*xUC#NHsi&;I_RQSyShAa;z&z%Rmi5o|Qh)9;A6r z^GjM!x_X=ao#!2}vB_yvjA0!3F(Xz=q|o_JlHf)>B|@GnUAZCYrj}8{%Q7VvqWJlf_9;Q}D z8irrqK`XBlY8h<4WMU4ZC(C_X>W|r#GiI-O(SF;xbpsY7$VcDw+X?I_4dBl|(?Q*Q z`OPX{ZM4hZ`kqvXW_ZwBiJWlxqqoRj^^_~^)lb^tcl#r_K*(7NP=UGkBMzQNqJ$4- z)`yzlBKY-*X8Mu2X88`Li^h-hL(N1k+@S}&jcVXvlLl+rfGtEx%L zRqOOh{ba%+lCR{>)=9t?lA+9L7IhH89H$=UbeZ4p!j^3wSH)-V9=Ct+?bqt- z?R=K%!jxm!kpTjKzT^xdO;;;Uh2SCkmV>l(xK4$^1G|kJ9emn>E3tRkXET#ixb#o> z-M+N3H-Sj=(7xTRvR9;Nof0j+PXuY71cE*kfleaY#&wogkhzNGW$L6}gN*y(;7It& zT||oUDyh=PjT{I0k$^HnEn|V&*`Yvv%CtmLh}hy4gX73mkvGBaCqDqWWcLh)C!UKfC$2o_)Z+{~1@<(&z*#NAz#LUAUD2q-a1R73DTuf-+HPh(OTE(tvi5 zJY+d3#f++OP)F(n*~oq6j>%#g06mnKEo6@}39Ujvu+~ZqxW5uV4GZ{q~}#Ty6Z%Lf!{zM7yy9`-v1>mPv_6Cb^mFW5cUy zJ_Bg@j}g9V;h0V^7tgzppEG3YFYzaO#_hE)y4Jqq#?7|KPx3=-1c9pmJx?&8olvS> z^qS_Fl1({j9&l8FIqI02Vx+L31K}%wof@Pk&Sy=jRRM>JnRRu}5y|9eZ2Bu(O+%3? zlIPICc@%IPHH}gTsjo_;gPnPihiAd$mWIEkvOKbAi~MvLs(u1@@_+TFYjEWc#iH9J zCoqnYt9xXMfxaOlTUD&9Q$sZDGw05#AKxm{gv`4y$oRHmF4m0%w*kE|vlHj%?9K1H z+dg{F85_qyNJe+oP^KY_3Q2yzAhi?GM8gk)@}e;kPBxkxoHiOp1|zjvb_34ik%-zX z5=9}HbsfR_t~|?fm;ghhm(!nNC@RG2VyJSDB_0Fg;%T5(4%)?(I1>C!@Z#v09@zi* zv#+q%yzB|q>+zex?xVj)kCY}`aGMIm3c;<84SbH+u1gUkXU=Aj29sJO)i}?01dYxB zLKRL5-6jZ^sgD9km1UoSyJBPGJv(-G*53NQZy-=F*qDBuj!)pm(If(#?beaSVwh8v z2oSnPN%q){em3jqK7hBE&FMSAYTG1IojoJZR+Rb=m=KrhkxF{ zPa+2@qrQkWl>wJ=wo5f98__nPz{dRWL*u-$UBcyk5dr!`H(hBz`_jkR_&B#{9uxGf zEJEDUA=6_fROkzixw?dHflYVILr}BzQ9VIi98^q^I?qHP&uAgikt%7hA>+k351gw@ z2-TOC`gYZp4fe+Gc%t2M<2HmSKgB&7!AeCQxFgD`g9Q-U3yOo3WEVxIf&1aUFsX?u z2{j{`rHn(`&2eiX>V$6npnNrgtD+ueN48P7Q>9K(1_pSUaNr+l5gc3Y0J%l$;}SoP z6|{$Yh%4=Y5FMJGLRmN)1i25 zY6<5znNAD z367(;;6@yz8kwfHkr*tm3JCd1+CpP~xEXXyfju}h&S`Xb#`D7<$*uD&acp|r1K~9~ z#$OLvvVZ-Fd+fh{;e_@3eSLDCAEu3SS1YSNs6d(nq#0xi6w-;R2Jn`}3v-Sbc&`Qu zae0J|G*xSom(4s1ivys(@BG|KX=^p3Ehk($gE329fFLrCE$`s@PgE}A>a~4x#D4lE z*V^~obO7!8?`f$m%7P%toK|##xtRjhBXxNR={dPJ!blUO^rAK4L(F7{tI;Wx4C0X2 zbkJfcrA;82AavQ5JZJ?fFa7?{68_ugAGCk-$%pLxT;C=!fP79MWwxPV)6hkbg00Ny zuq?U_>e572CwmCes!wa8V>Y$u4dK=Xk#bEPPYj=EN3GSCZbs7ixt3Ae-A?({0A2m@ z;O`>QCf}|mcXVV4TdNhjG_t|2+cs*if9du1!W(yEfk8dwb7=fWl#yJ`5p`Ki1ltjn zR42(3t}9Q}W@`gOR#G5Ok6~ampfxJ3BHN`wCB-H+JY zKYYJEbZWsSdwkCrp#Z)QF>I>rcA6l`+T_$|S}fh8e$E2hCds@)r`UpPvVXN=(nE|r z26!8OB#K3_vMyVy^9G@T%ui~K9*!6zY^VAwzP-A6-;DkI%O7ty?%57rj;-sCj`$+t zhGU+bEJzkXc2-4`1zA_i4@C$K57G`&ptQ5j7ATTBE?z06171>)Hj(3l-op*mT}RH^ zZ+_%n`{beXdf#{y!>Ltu8QW>}UV|QwKcq*S;sc8B#UnWRn2+znPfbqPUw`UO z`|%eXz`enS_!=@F0aA%8pA-HW3K-Q295xfJ0$Xj4oXxtLT$a7o5nT+Q+jwk2x(3vc zlR!hcjn$hGOr$H$R% zS-XO<8(HDyy=M!{<95xqar^r(JYX+-@|89<&i`^4<0u8!a~nYrRUyO%;5v<$UT)_^ zp({pRPpm6Q*NeJA&LipMJ=#X37Zb=2PA_3;{PKgR?O%N2kbU9)a|py`8(Z;T%F`}K zvY^!v4!I0u4rCB}%B+!-D#^&ZUN^A`q84t8l`z1lr_T~SO>bs87o9tbVx_OUT9FI;adLuj?YfbPG4HG|MHnb_Mg9S%+Ad6 z@jrjq0jmQAxw7i)NGJ4H%E1M)-rG@olHpqktNU7FtO~XPL{&});em>BsjERB17Bs#syqVfp8a4|9=bD^5h zVtyDX*Ab{=fdO7uGl+_mEZIlyK4$;^Q}@}OM;0KWofgI&n|>_2{COX#LzWZgUuh}PDZBjX zaoJ}%c;4O+MD#R44HdA4s#KBYqvw<)2ZX^&o1JQU%RnVB`5Cw>M>Md19I=s6^qs-R zXUXXJ5-#nNaPm3VY_uPH!L{~`16y#Z$Lh)VH_>Q$9G6-8T}7F{4PB$DOR`7|s;>!( zrS7WqW8ITJ8l}3yRk4akDfF~Yk zwF8gPVXmAMc?oJNq681UmS3+e5E167yPTb}(GF`d|1%||5&K7P>e$eD}wr(Zd& zUv+-)^dk1KoCw}5_{utp@b&gEd1sqh?`sxxO6~257hnZZ)o|7NbdE)MA``%|@(4YQ z2UTgy36gCO>T(IvI61OTr)jAxMC1(yYlh3R)U9DzLF&c-pHMuLJ563LJD&Na9z5_> zLlFjT)QO9U;%`wMIep1K@byRReP4OR?me+!ye}BxZ;w(Km-kU_Y<&+9IfI!N#GsU* z%cgjVrp{~V1gVCftC~CL{3x}ccu7?1j)p-!S;Rr@A@LELNSuV;Ha9twHr4CdQ+D<2 zyPvklZhhiacE#ptjS;`G>+dpwW-vvt$_9!p|0|GB5w8yUfY*VMs*fs2333Nzhrxq1 zt#m;fsFNuiRudD}vY{1lm_vg~WJowH9L zI$^inal~$aWX@(65vV;{ji39`<&y10kQ11|vQI0Bas-_RW^^fefh-o^Q^m6u#B1q; z&Y}!>SUM{L2ENf-{v%-iyG#b?mWfe&=DrQ~SDwDxo_F0A+p=K;PDK8YacadW5$4@0 zX!etT@FBN8L*WioovKjkRu>vpL*9U7%}g5k$m!Fk)5fZ(^&S&K(N}}VZl}?U2?K*X z=PSCRz||2ldM9es<`$RjYe&x7pWS)HK7HRgd+_8O?sg%fCk5Qs`Xnk?xw0y7(o?st zBQKMpoi`B6K(bOh;-ErP^7w4mW*^i)DWf$$-^7c7$M@V;5SWv=`MGA>go5&=PrAyU zuzRy@p5~Vu8Nxh`-7fXyOKB!NW5yv1xxx>4`+iUmv&vV82IMhGuC~)gwK@rw; zCcu`+^FSt~?qneKGjB_<*)Ep-*Z=>}3Sd?in{*z~mLwt4%T977_aLQDev)vtH2ve< z%~Ruc_0|ddwyU?;P1o(Pr|#WiS8kfpKTz`v0R7>m-)*v3S{5q_XojIeyl@e)PP4L;vpM^Y-wmi*{~q*)Cykz~EWd9W){XIrqOl)@eC? zh|?qv9td3F+z;lYnDPg`_>nn&L~#;Zc5R-p$L-o=Pu{c1p0I19UA=wArpL$h zeA6cy#?weSD+ut@jRa-Zfv#F2T6+|z{7cjZNT*TcJePd|sD;}2KN6&gZqs!`>FWT7 zF$d1FM#w{g$F!I-$b(D{35JM56{6zn;8wWGa@Au%Ucyb*xmg72=~;X5%q8q&FWE!L zkDQygljj%g!dzc_-9^YQ^`WKU^I#Ok2v!t_Px#|Ux5v=*1P+^~d$x1qr0v`=ZhN*) z+w};>-J2#5kQ;0(_LdtadirjHtidKNc|_8-TNN-iO&#EcHj3~NgnSv|Zy8~zx{@?L zk!Ux>{t-TZS>KksY>=kPV?nLEW+PqH!ZI+-3+K5gC#ve0s!)~+YQ%PV75Jx3s~45? zAdz4&Fcb~QG5=ijIG~pnmu&VDf)pz+^Rx5Ib_&6K0RcO|v|_#eQko(U6X4gG}fWWG4+vJ9Rop{;zRsyVYT*$=~3=-_7W+#mhGl4&qMG?)D4A@ z*t({8LFK5c#fhX{hlF#=$1ZYpK&AG%e1$Q+y($7Z^vKsG9(fb@J|X--F}DqVvy+ub zp_@fHSRvL?y@;w?T~RTLT-a>%yew2?V!#$qw=uN6|ASa{B^}EAOTub{kUr)5$!smz z|@ zX%OW^36vnEW*S%rx@}~;-S*R5SN>bY$f*d@Zi9~D+@W}s9&(^^&<2rVkwz2Xby;FG zb_S|jsM}jxvW6tp41Fe9+i~!sO>~2AEvzOfOL0Q9?CG39>tzXzoH8M=^W?E0_0${- q>+i=Ps9QVIwbiX#&1u$+*#8IqKq$R+EHmc-0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&V0lSIK~#8NrM(BV zZO3t*Sts4_B64~N1VDgb009Po0n8LdiWVhPv@C}iSq`(D?Qs}ujqQy;j=s`=e z*H=xwS@e60m`im!S;WbmemwQeBEI=V!~>7d;+}6s+Uo_F3NUUK;$Zn&}^S6wuWgZpMN z8uV2sfx|Te!6p{-G>4%sbduHAhAA$P%>HALND1*ze)UEArn8u;&aItZJo4BgzWBf_ z?znFjUw?EQ$F~MjA4Fe)G8hnC8tOWL@X3iPgk*#C!j2amL)9wMl2yZ_%@x#QHlc(l z#G*#lvDeKj@NERg>2nfREY#X?U4sIg$wJL@DLT!}OjJW5kLUA2%x1mVSeq*d`f#{i_Hk{0k0T6F~_fNXA6AE9Jc!9NlTShrc& z_i8bVL4TqE9mbPS&EkvqE#i}RZ^suO+=(YoD!(^WFv;(}`bHIG^;AS!f0mVsGIt4F zm1xzd*G9AH|BglxH9^_2+vX(&p5wMsp;M8s3E2pBjzNv1COOdRbb_OC8d$EnS7wYm zoULOqh>7B3rZN{FSj4Lo3~zqvD6YOpL9#xL`Al^(C@xfOF(XA(O;#nFr8Br@h_pVG z7?As7@-LxPu};&U(9*;%xXDnb`g+k8?PWuyLc~1)ax!<#M^J&jMu)PA7>pLD{r8sdrh6_4MRoJzHMhU zuGTeKmi7{gLQM*q;3%@%r(GT52B1k`raKBiO`;>>;IJ+$3R{Z29jHMnyw)Gb_I59B zz5RIn=TGj$<4-C?l-0BWQvEPwq6u=@s$fYeR#;s=G;zg^;@woS)h#&s1C*sIc+G<8R@M=c5KV%^5g4Lx~S?72eWWZHGoha&U zb_aG98rqR-VQ}S@SG~9J&jJ(!>F#QxbSP_QX3124mi=|Wq{FwQ?~Cq}yE`h$DsI)@Zp0X;=^;8GQa zBI#t*6~Qv0U2bSqtTcfXK>^*Zo)U)N4zvMLX#!MOdMxu=Annj_hN!$|TR{KhbQotJ zn8jaz+aUh+|F}2abc0Ux!=Y{!6%ecxKF~so{nA+WRbIAf?DDlP_=5JaCA$GxAnH}k zLE&~mYkD`{Elfbh#XiYPDEGfkYkBNxi=57Ni0;Q5Up$C&_Gv5C`O0mgy#;;yUW?fx z*X)l9&DeLLHUc8*37G~=%@-g)nGOodeV(v*kj}Mf=T&XMa)>WY+6@OATWuDO;%grV z{hGSb=LpjT>xRY%4gr=E+gF9614vlQ zTcHF^m2vKMXO(mp+W5*GYS2+felY)S%-0H*=#nTM+0Jf}o(G!@D2lXg5@T(b2XxrJ z=3H)rDI?3GAo`T;V!qmbSXvZ>g=7`Vqz&FSg~)(v#XdGR^(s0>$$hpGZH23-OQH&b zmUoQonik@iIq@ddWi?*=>WN7&F27(N?|t`L{Jrnli1W`=$V}I{HBmd#iaUY*x|9TL z(+)YYgw(KW#tP!ulFas&(K^tM43d1eIO(n+0g?TImNNKmjap`*GlnJsiU&5v8mKJL z^s}isud>a`S!CE)8k3q9W_G2?FJqO}d||cY*Dl)%ReMr?+t3!W4W&6%d!=B2HBsqo!C~C|Vg~r=B@ZXXjZVD{5zDLUJ?R zfcE0}Y!qkjAICp=*C_t(J2ztQ<{-x7^%(FB+?^#GYIp`l0h?piByWm(W)uV}O=v9? zxd?-i*ZRubqLI)Q?uO3=Jh({{sEf9lO+F(>+$^3tHjS@7uGK-4gP?I1kN9=#)>|LM z`YW!AgWq>c?0M@A(Ytt4$Ca(y;x6~Hc z*=2<@!0B`~dcK*nRq>qAHQ+n5Y25g{dHjR7t;L~B)?-_DCj&=n87AKbV^BPQwyg_U zu!e443+^DvmtaK)K&7rhwLrH!fh99aWamE%Ea_yz0Z{8AxYaMV?SNtUwTfzcT^o(# z*r#AVyc_D zHD#oIZ#w|NX+~+gQT$N7tzSUV7qlFZ`g!K4>E{Yn*A%l^VRebUjC5aguG9EfYvsFN z8S$^ae{WoR$uP#c3mIswWt*^SV*{X}O0i5TuSyMRehHkP)tw#-pi8Y#uI5&B8Yr^# z?^$41ohsxQ?WL|5Q!kki2@&I+S^U}`O=C3Y`35TTNr%+6JrU>s>9@uB`4=fDwqyOo zP7JrVW45ky%Ij{7vw!GaF}nOLncr4FZ+igLxA+~ zj|Fau{?u?#V8=Mlvw3M|jI}fl*2eKS-_(!4{at%vxG~h7h_(^co`I1L8gR;yeL7H1 zNBtByQyxW&yIp9Kow5yEnKRk#LSw&LErOEdJdr$oQ~GN-iTl4Xi_bq8G0;fl-9kU+ zvz^%c#+S#=wTE;T)8K2BEhjbf;Y)t`=Idg%pm@CW}?tl#t^tw3X)MOYKH6}h2O zb%2!0E7bnRRHt3=jb88>`es#`dTT}KedbOmt;H+80cIw8O)-8%PV95 zd)^VTf26aDCZFXXW8R#2{>&_(V6JL%d%Kn`O~CRb%GEm+FB zeFy~9PdoD&M79I0y2{onBjv&;>S7dsCMf!DV={(pv;Jgb)St#}pF0`P9B1$~>zU=+ zhWlr&$J)zZqC2>$RJFRY40{C-Y6Ynezi1e%#F}nzdy5m%f6?W!{|DY4{fqZ#Tbf9L zp(V7@FYR!UVlO>QXG&H9_?j-kQ4BQD;i$`xZr%iZ}0Ch?EIXFXnc z^(eN+1I+{!wUoGA*DeBvv9M+;t%(YmZlo|B^fqLgd_zz3;$$P06!n+^qNYpC0`x8!2MqGFx_PzT%V|3Zs zF;lQH#7qWT;7wJ_}49LN9ij$yp` znxR$<<@j2ybC>jE}lBl&0JnP>YQtkN@qO+)?az?q9Z3!JVn^3x%;7ru%BwT%FA zmq|FC&f^2O>kh@YprwyyI-p*4v1a`Rx+BR$y91UyQ5KhKy}c?Q9gWdUD@cDnjGpdp z<`eIdDi9Vn;xmoKeSR-RsP)5hzbHc_l z&`qZ&r$x$ooU_dq19GpP&4`1(?ob~2RzL1|Xs){zW|6ejhrKu%dv#mdACjg_22Bp1 z&6q2_*?=|;U8$czmVK=tG2M#Uh5KUfpZtzkoVy-#RuJWRg7W9FsnlG#E?aMdBXhG+ zRbz$PIa(>~Ep%X#|8pIte(08dy!GXqvBO*JJ|@$!PVY2)0YtW$@>*rp#6|Ajyc{>+ z0;fQhtEF2D2_=`oaS%N_)>oFL9XUv?{bg+Q=@%qTR`CIwnI&;w2hl~`dgsa5-d4(= zX4jcREAQw6oinbzHu_@@qE>b}BQH_M3y6XQkg8|*$rkN%2GI&KyW~RM>b^A=dk0!U zIQOAJ2vA1l#lWvlz6xz{>;`D!foO3>z{y!6CAa0tpSXSy?|H2PLwhEtZI(D!kGjxK z6m%=P=(`atixx~Cah7RuMb>%Ma_y^HE2sMJiyyBE3YA&Sn8Uv)USm+Eg zxazXl|F+jgZ>VwctuZNrEGickI>%kVgo4P9ji{uAYtV{Gmu5`CB3qtKRW7Efj8#rGf|AR0@&)JW zU?aQ`ee5KQPM1>H282mmCsm4}>XfHG2~QNaU0bA_efaP^9zD8#CUjh8doy^1=4$d^_TX7sux7Zd4&{FRUsyP_ObE z|KN2=X~MIw90C_K!x>=V$Kn?poW zs67Yh*nf8D+UyoY-p#B0st=v?O1*S;lk2>asVL|V`tiimGcECSyW|dnd2BrYl9(Uj zAUZBHJIi=G^sATxb!lYPcBwH_@Ioc>E{4J1jK;-%=bahI_1#p$e#e_ZAHh0NDfvj^k$h(Ga$s9lf3~f|B>l-?EC`edm z_}W~C(yqIC8-dHonpHKEsZcl4ca zj^3fOHJQ1C$+`#tw}^fyy!&5&yRRHsj|u2I2>!HU9G@)Wo!5`z%`e-C6O*9~q%!+o zGD3?=dIgHa=~Rj-)NVw{p?B zz1XwiIjy_8No-tvPAsl{ehhb}(x5l9u&Mrb^P*Zc^(7}szL81EEY(ah-R2JG#dPUA1Vc{9e-asZXAF$gfq zWu&o91ZTBXqw<}!l+r@Z1olxkx7ez$1gxemXg%|;t&;~|K~s;jfB0*kUO7sh!HU9K zafXMhjKOg1?c~57xuGSnUp+72r45mgplFOBHs2K%=vIC@sKs_2f#(2AWom^*XrBw# ziXej06@qS_`oj7}ZgKI;%GG`g*@MD`Rtu%y^ZJW)4$v*@f%O>O_+ky(j*lNMTStd@ zmQ7N2?KIG46|M>jCD>u-9DXg>jty;Nz2{xv?S%m+pDoUHQ(*x=AzeE0YQVdL%!NH| zTY>hr7Y*a4>(;bt3{`1~QW~92K)HdM>Pl1Z%z#D)WaV3Qj{z9%;;v9L3blc*a$0OD zaH=dzbkpz^E2I{Sll!pdNo=lGtC>2R?};~EzY*6Tn#G3hBBp1Z9fOGm$+rx}j*yl@ zQ$ilWRaAt|C!I-M&?yNETJS_Q=#0bD*FB@y_tw`(Z;wuk8gD;HbfMO7?0NFnN@~|a;ota29bp5T!Rb%EYgtYD~r`s{Q{NmX2@|UPA{+G|zU~|Tn zm#Ec5vlJ|bsIc-T5=^vL{kfYq;=*(CHzzDqLz@yb$c<`QQVp+5OA}Mz63I7qlI`MB zwk{1eFK3^Mx-6q~8@i0T@K-Q-j4bQa{B8x^w6OGww`T-Q9QBp6tgNA$^kVIK7svL6 zSNQf-JG6jFDa_(UKcVu_oRUSU14vJc9S8kc61}F{)&{S6Wem7{{-s-PsRK|KpJTLJ^x9 z+l7Mipw2wE=r+11iFO3M^eV&H3hh-EX#o{!i(ABCFo{3=>OHZsE*XbVmQ0kWPp?vM z2bQfl61&jRUCjcPZ2@RGu)xRn>XWLTn5VlyN!4#+&5OhmkPMR(i7S(Ru^gnqGSg1dpaR&2Q3}1Y0^e;V6 zHf2=G`6+f-g=|J+5rA3NFjg?U=%PWq`r3YM^VP-Tfddd_peQ%xYU?_daIhOB&OxPO z1@Yw7-SHIE1=^HbEe}*>U%Hk$(DbITI#<)FAncT-!DZGZ56xu57qp3{vGiHae#-Gd z$*CsYt;4J1>A@h@788jz;HWosQ;OluvH)4xs|bX$k+;u0>|*Q~SgS6BR4Hp)Rl#*( zkEhz&PBw<7{)at)ijs_&N5%O5tV-nwgla`(V@AF%jYFKckg_Wr|YKz$W~XQ{tiiBXp&TKSUBOTr54B<&aDTHR;#sJdBO$!I=}hlcy( z4+g9nJDQmp2I!dDKpJhT1RJq0#th*NiIzU`MivhH@x(Wt$g_nFEZsuXJXXe%J)ZL*~@3~>HeWOqCi=nE!4{c z>8VW4IokmFB%Iq+(g_H1xN;TftOgajO|4~{@`A2Rh&o?Uov!y|?WUK?q`zyKnfhB= zIT!}pr}1jY_ujCkRYQTn?Q7`(WiEBfsfdb(lMXj3Z7k_keSYt#tB0&9TjaJ`QL>6n zIqF;01JTR&=3usYOqR?eB}*`d7xf zwv*mmfnojhp(wYYv}bxT%eC<{8S;3!NXDx06~y5zt-UU$vVt40$ThGeLt5j7mNmF^0=s8rD^0yM$Z7h#nzLm9ZD zvm56A-4#}FZxy-=T6GtB2fH(PDZm&Rtr7$R18~RS;&>?b$GWx`e@O|I+PF$wh8DGh z4Y-9>2fm9ECV%P+|CV$M)~LZ>Kg-%2#`+B}Qp{0P`oLyr_1by7_z=%`zHmJb?BQWZ ztwseDG#G8p98h~rML?xCb_$eY36)WijA+#Wrl_$5SJQM1<(BLeE@iE>3ym#hr(VT6 ztaMTaSk-lY>GTTSfu!x(wa#hu{2dcDh&JUmqnWAPr}`UlYybJ`FK%CRg(d)M5H#D6 zUKt3oF2-Y}I`hF}K|%Gin@*%|SMF3(1k6g!XDLzXQP*6D)7}fOiNV3WF`x2CuD!u7 z%5qHsuzzC~Z+T(QpWA4g4HU&L0;{qrUxBs(1*Hd~PkI?r>r{CQZ8eQWrh38#L(_+aZQiyOg-;U3%T@d&5&epB$OuKw}+UikjYiHaV zf2+`jDoYt@G!$7EDNA0#U0MJ(Af0qoM`o>Tvx9qL@Pex(vv+<5lLf3bkBK7m#!LHg z=-fq2bt`N0MX3axjg_e*gctobpqOhA@Wc>pWi_V*wH{^Br6jX)tuCDVya5IcS?LJT zeCL%JtXV2VUOSq!WqReTCO@&56UvqYA!!PE*o8I|DjlWXfo?ZX^wzX$yg+gtK{eqr zF!X0zs>Sss)D;A5r3qNAwQ~ljNBkzDuEO$pb3uKs3!u4Zv&_!`Mx?(3GiA5_PiJXY6q|H5*6&lJjGD@dXMF zK6Bz6DXGD9)`fc`UV3>yCX+!~R?18>pUBq3fVf{dlZfdyXcvRt>8x%POv&@ zF>PQZ?)ILD{-muArBw9}>WnVtV7HiQKK#oPm)NmcF)f!@_L~`V*>Pz|GlRkQ$SQy| zYNO%IIOxw*&m^YPNsPyn*qKa}-jRGKh9k|U;WYX@L3H1B@n2C>O|n(b^U?X zjY*so{bC%_nmy+So}>cGFWO;O(r+%%ifK?#0)#gBg&w?Vb|;iVmYL<1P-z!Zr;{g! zYM4HFIlSt!Sgent_lDQKUj0SRRKXGP&)(UOH@<}5(O9DkijgH#rv=O`K}|bD-GUP& zE$o6Mjj(D^YxST&Dc^wXrfGB;s$!-L5KD*yqR9Bp2-D-($yq#dWEx+8bQ<>`?!~vB zig;>k5hr#CaNg8j#O7MW*?W6&=xly)e-PJPBwpvRy&D7=znQu&lhh_360rJ9 z&8M&SO8)=d8Syg*-x7OXcu~a8mZoO$NA-A)&?!s+C;-Vuq@JM>3Oc;XWV=(hYAow7 zLo0>L(oOH_&p)O+9mR>C|3LI!ui&7P*>n~gdm{eRpIeJ_4-8}KnUU2b6a#Qc3>|g} zs@&ykLey+yV6_poncX@%I>i}0G1Lwfcs47Co3JdRZ9zf9Pg<-Ed$GMei7z}bj*owJ z5?^{`9*;kxu_72$5dp^F09BD!fF2DTp_Y#69wZ^^krF-L*m-qa| zXloh7RIe*afch|ag;Cx2%AQ>%b5`}b_1UZn42|8-a`Z_x>%i!D{`m#fV{1~8gv(rId zF72zSg2_vo4~Qv)?25W9p=EMJ3G=>|^}9$+Wz=oH>=jGJMWvFD^fO5mWv% zfy0A>&J;)IQvnol<)K1!K)wr6vC6F5!LCev8q^;jRhwmpC3f_bwko{Tx#aT~^wkjZ zb;{nOsrwsRE&j&)j>nh3Ify-K$~vn^X%4d&B*6?pOguo1>IdtTJbphN;G_>aq$^!P0P2m#CMcI>4cHK|uA+niBruS3&KQaxOh)k& zS}Fedhi9?1wWdK+9`7jA$zCaPJb@g1y^t54KNGJW1p!!il0x^XUM{0;jFn)nyOPcI zh_8Ng82{TZo{V4k*uMD4S6DEz5WeyYN3(k$Q5gmU$J;@1x&Zb~{Yq{Xsswr}W}P(w^2wQ!{O|4X~%pbj9q=bzG<(((+m;ko!kPv2r9L0#n5)bj(p5Mpo_ znr4xjQOkEZ@@jsEM?tJzS6#da2pYgGB>~4T2>sYcPQ-ut%y#UNd|gXLHy(g$MN*jI<6{c`1p)h3Qfz|V^73l zlB=DKq+0@PlqA%BTI;KPA_4BUizY1R1LUzIdFv$~os3%X z>G!C&7C-*6aeUzOlh~`lTrbMpnq)WvVD9LKhG|IGJPm8LirR3lH;o&Q0Yz10IC0 zx@|fWnXW!MJ4L1yvhE^r^vP>gMsMi^-iuG)zY`z7OQ-7DSm_-dwzkyCG!cDn(bVBu zYVvjw^t%FB62&l>9oImq50QPXxC*<;Y=(=F!K&cK@*Yt5A=9sY`dGaGb33s|OSpHD z)Dp-q`RW6uq>W#VLdvSV>mJxycM>G5c?l|41a4cCP){k#I}s{OCaAOJHR-C#K*QDm zL6%vkLJ`*dRjhD2dBU=!rd&IJMPQ;t?=`P^4QES5yY5sZKJVZlu01c}rI*g*70(;Q zmFMcVMlIc$4a;4;ifX-qM`b#aen(qJZ2*iUr@ zhV+=B8~sV#^}r(j_WO^=Vyq>6NEqjUdgen*`6g{D%s-n%v{JJnhpT9%!cwxX902{7 z96m7qndb$Uw2)8W4KF@F_WqT3E5#~I$jV<)H^25xwdrdDdBtK1AWQBpC6)_!p~|Tb z>a=@zsf_($Nx1aVOW$i{&BDGS`{dR%9y~mc-@k7fzw?z@-2XUF28VI!S^2|oeD2Yw zbsJ5K*~rFq0l|_w^uBY*v=`8BqC#6bA@fUBF2cc%#f~uE*24CWf8%5veWtJ5aLM^6 zdlb-xpvaea{4kSpUyCR&A|=nXJ~)X2Lv1lxiAOe}X7evg1yYWt2U_LN?7TESUyWw@EF^mXJ5^ zn0bj-Q$!LL(h-YrO$W~R{n5#|_i!(Gd@)yG9!OIGVboQTgo zz+-7DnQBmU|0aEgPA1Gl+*VzvBoh^^BrJ_x%Iko=E1BZ+5ULJVr}i}iAAGzYzxahk z@I5R3!?V93ZosefflEp$+X34Kbt$xc_9DLsR0hy#5S65PsZjIa3W&)%GjI~|S;4nw zZ!9jnFs5_<{V7_Mq92lNY@~q%ge9Z0s|ZvIbc>T}bmfQ7HcC`kWop_oC^B98wZL4n zkwLZ+KbWe!6#|6cwwn*8v3GqD_dgc#w|;pm{=;qg^UUn~vsl-ioc2w%-^-BQQ-VMf zCFM>c3%=%;JfPARB(YQKMyS)dH?xKO+84Itgtis_?YHwV;7ZbNQWa@XSK09k*0dr6 zltIA>oq;pDUqF1IIJ%VzDTZ-FGIccpQvj+L=$PYj_=zKI%2F@=TI9dB^ahmQ%t{U)eE4N+k_XH+-e?@Lny=~ZWg|wcBs!0< zij3s(f4KFT_>uQdcd{put(SiZfNWIiNA0#29}7_3q+rpX#9gt(?pK`vD-U(3*`s6ci>8i4SFf&3QN z{LZh-&>AX^M+UEHr1ad@CMZ*lxHuCOHG_*6>_SbuDp9s;n5-{l&TE*I4=z1)>3a!` zL2n%2`=UYowb!r3pT2n*Z@+#R7ww`vvqrS2ttAkBa7hXWMa#|n@Tng;sO_S%; zlDJ-5r33~PA1w2mgKFo_IC_^{68#I#)ru^cS6X?+o{Vk@1bWAAxE@3xZRjm5S@MITsGn@_42@fft_Fi|@K_9>-?A;K%lRQ|-Uo!`R;57iaH@c<(!V z@z>t4?(ehoXWDNxP;9w-M)Np)EaLC|`Xv6~YqL0OecR7U7Cmi8)Kq~+Krn#vK z?a?Vnm%#8EC`kD9*4GZ}mK)>l0H_e?@&eedx#td5`wXRIyvb#S*mVGkOoYd9PO5(= z{D1PMwB%w*HCVG)`WpfiUyin!s> zT5RgT$zTog4Hq>yzsb2X8A-erfALk*_$S|eFcy1wTc4ko)Uv2k&PH!1#>W=%Pk&=4 ze*25FI5;>F^O^2s7P^x$)QT(3>fIL0kb>01qY3yt>7(#c7@@%GU zQU%Ip4Pd^`2w7!;!c+rGd4(-`z6*dApT3Y;fjs9bpz&Kh`^`sVHqqolSy}n^z4BOW zOJ5|RY(eS}@*XeGrL!%G8JJaqehZ}seFdwS55SB-8o10u<4MmUIzKCX0CB2=BJeBx^g7D7Q`rO0H=) zYent!Pz&y2n>?~T_Ntus_&k;9D|k~ffkI^?AE>D>$C^$@kGpSaAHATKn$L%TN|&wy z?1C;8x$OGFUOHv8>PlJO9Hj49b@PrW`BS$1;lyFkncOW6UHx+YQt& z4K&eoa=aEB3aEejU3=oMykSoqSL?>JHLWe24Yp%bMgR4OPsV@!ln$vQer|wmi)SHp zMsdv*WVo0uSA*HiK_4Ga?kr+Uh#$@?jYvMFwr>JW-g~OG&iq0z_uot>WJ&Cv9*bIm zCfNzp=ACR(k}r;(luWl<^fjJC%i+ALEk#TtOwz5^yvM2X6r~;T(3;oEY{m&_8Y)B= z^cfc(f+?5(FP|EXN_Ms`R`Uvigo3s30`wzg$zv@qK$<;1 zAE!H4*XRDqGC~H+EL6yh0883iN6o8cDyisXvD(ph8^`%icnlDu@;gZDXk#6y9OUF_ zC9Ap-p8N&@bc&sh{p6G4SJZigrQ;-F3I_`=Z5M0m741Y_WofF`pGB(1}2| zK2`2FtYA|jTDcB1qf%(qDdfKkI{u{39kaXIZ-wS`sS@I>uE-3A`nw2JEuSu(v&lHq~7I{N$RmcP@GDylaikzCaw4ZxzsGCtK(+rfC#UjF}jc`QO zcA`A9`sA4?V4&(?S-qfhbs@_#((q@%)50#9bte0^S_;|K=~Dwr zrmQQMF`r^fDeU+Kt-h2BJs#45HqV5z-fR>7oIRET3tKjmT6oh3c!T?nv}g?s_ipyE zN`U5&!Y`BF-A}J=E=(_H-9hz6P;WPpKJnSQl~1?`I4=T@_)D}vKd6kBg-Lc(@1r877G)~b>oP>YlYOXWKF!tzJ@gr{=#ov0} zy3%|la3p(LLHaxK;~zg7Kkm1&WoXp4J)(~L8cQLhKg)AdlypVA}zMv9W z;I}9yI*0Hj;~#v*DE^OkpBrm?7jayx$UtQdC<=aB0rF!XT*T&l6l)3?p8C~#(_?6n zl+I#*-qb>KzE-CEpiFjp3lv(pCi%AElwuMfGpes_x44TmC}VPI{SPz z@W{ztOm)ZN139myzz}*HDM%V(E<4Bjrn5BE3J}gA+q!dk!xcO6Q{R6uUUAt_0Wyr~ zbP@YTz4*!BKNA1^W0TnSw!*)a(gsy*H&xJhD1jg!MWqrY)rxyqt+R0l}^LNNvEOwL3L zlr-gn0jESYu<5BqG=c!3(i1ytarwS!{OG$5#NU47*|D}hRUm3RQBd6b$W}b_RK#S= z)>P_lY!)oOvI8g` zDD~l22}prgL(us^>X^Iv=2tH^M~nEs-?I^y?C;0aktgdYFv66`QVCg3AO=S&bdof{ z|LIY-utcx)wL(0-9dYM3_?gAEc-bZUV&B?Uj1``1y3JkVi>Ct|#0Zs?fKgoVd6VH_ z5)V8ziNE_xy2sH9#K$ANEDLIh+TbR3R-wwf?EzW?E$zUndKa>;Q!DKH;BnTaH_@v4 zs#nM4jjxZ*aehB22UJSdcW;SL0p~cx{wIFwhv`uFhupSNQsw$Ho!Vy7k!@B~zG~@V z*5KPj8ck=YO02uA<6LF&CCf-A+VAm$HQEEWrV&R@s4@*A74gF9I@n9#8idU>bwaw7 zRpXGCEZ@n@XX+G1s?Htz*9LLR)oby_D|NVBKPkOwjCiu8bIN!}H?>4Obz`7-nm+IV ztQQxZ-H%Jp$t{rjntWkN8NHG;sTQ(jZO1fFMXs7l&Z5=wZ8~*~=y#PWSUGiaY;;)@ zUiCbk&E%i%*8G&z?@i?j*{s?s$NMa-7JMszXEcgQe=TN5o{ZVu_e6Z*D-mCRAQrmK z9QQ}Dqo6>K&xlYjWnF)XHG|Ulz^3dm*2MMXDl3dXKb*OK&E?bJvdb=eFaNCghKmPr z?fL3>7s4{mmTMV^Wgw@@Q#X@E-W0(@IZm4JFIx~!v8UN7FLRn5ER_n@exC>N)j-hQqdVmANVz?Q-2Of;+hkhq^KKAigeBrK`fBBx6 z-F0`&@472`$Bsqs+zVp1Z?9Gu-8K5KuKrXV40hTU$}ZbU`c-fxC><;Y1&3BB-K?bg zgHM#rOC9dFle0GkM7i}_pb;K)GeTWzlJbgN#}kfron>XBqttZV^yyeV!~-?%W z-I;mY$c6zJRaxOo=b|@Uv(T;ZwE4n!PLlF+r5&irLcO9;paZo(s4a?20 zhla~8vw8VC(Cz--FeDHabt8r#FY*$0dTbC7yEn1f%Du@Nn39pv~V-)4NG z&yCQ4J#=)URf8b|N|Qy*aiLNpe>wYeEYuN&@>dec>*C-upN-BzrxwW_C<5}OTiYBg>@;rcc3WH1C1)?kt&jY6^mcTv zSX<-QKQ)`RTGCg&nSUo_G2Dp7SuEjK%)_(f3bB69ni{Zy6N(fv(y(T-SMG zC&st^o(`OAI;#w|>T={nD<>E)doKBWqyRbcRP;abiCF0ThNkcEuq*p{m(vcu``9jK zy-oeNgdVwa-a0(%IK0)1ho8#59H3&Uie|xl709gYmjbo3tmFJr=@M2solro@l2Pm> z&sk!j?Pa1>gl`hEI?(LNY#3KwG>W%hGmLHaam`*{HdCOn-7pE>VhtT_>2%AU7M5&f zq79IgWana!oRT|}^A}zm^B2F;cNQ9X4^GZ(kpAF=kx1!jPv?xU+!_6+o{R;7A*0>1 zM1@?HHHb{K!A6X~u7m2~$79y#;}KF&ULHJ4U5?gTr-Fw3CY}0Fjuk!iyK*GZbw~Tz zR~}W&d5ULYgB^o{C66+q$-#>jtWdO8u)ex{c}WN+WN7-ZDZeITZFvd=PVap_Sfp9; z=Wpt1i<$Zt`y9{IuNTlU)A9lj-jXDty4`WVg|5)$I|8v<&xl*uRt^=A5HJq@fwGb2 z_^aO%^Gyx7{AV|GAF3VAVBr&kr8GZ9!#Cs>_ur=h=d-$bLUUx-v5~&bz>x%Wo4e3} z_O!*!xdSQ+^}LbCNyEBdYh4l2fCT5P;B$6N~F1{bG1j$C)#HCCig^jk9m`C5r6%)>(L)--N0q` zU~fUSd^e~I+A(Mg)J$u$AKJPBx2f=e0|P-tLDr%2_}~sG?=$Q0JXb{buYXlcFS{m2 zQx4HN0L@`kn1h$p+XZ(N9LP_e&@gD#kV{P13opc=_eM`#{ zmDI&IizN@Cw{s!>bMEl(!7CPq-+ah{>4F1o?Drj+#o^;PLYU#Sh?hbY5cOl+N>xk# z_7`V?S*C^jGZ){jR2}n~XXFq^_sO_lQ0X+$M%op_;u%eoe{`lAL69u8Qu8L?>#y#| zpSf`qTk@5st~{rq&6G7Vaz1hkvv&(1YdhD~EP--XWcb_u zuXv;6I&)}+{(qbDQod7J|(4Wu-qg^^OaP)xedf#O;1 z`h*W~R=o@k2L7yz|;=Y^x0fCFc_Cq&wIX z-=wQaQg8$!e49?FS{?$wR-u-v357uIM@gdpOIIxl!Q@7IWi2`DLb0Gcx+2?33XMo~1ru})2iYTj&dbdJ8 zkdM(>@U$g8^Hj_qeWZ?Y4)|1^`1J>T|u_ElJyiE@6t7pvsJm zK_-$~L8p%u7#Cd`@%FzE^8;tch~NLx-HBDD>EB^D=D--m=a2uZyxiqnGMcCz7hV;M zYhI}(o-JNwG)AnPxnks9jRr|$tHx`a{G_^$L_kG;Uq4njLnja%kzN5>}G5_6L_QjvQai}|jotVzJi=l!H0$=36+bUZQ4whf_P|z%*WPj3c4p6qdm%?WhA-gNC1oqPhKB zz9%METr0T_nJoK!ywLACP$`9_s};0A-;U9XUJ>K#Umt_1>Qw+{5Ts4>Za4PrM#>9% z4k=@*?QHSXQ!#t!LD|;|eCef^z1P}q0-y5ca2N4rO#pu2J%a|mfaem%d!xY8} zx_w}++AR~G)OoZ`ladc`&)4_F;PMy6Y-cNGPduie(MqIA;90H1eSfAvSl@`=jjxNv zYrmW2GWcmU4!${cid8PITfArnNY-qbwdXM&?TO)6Zjag5zN88?x%``8fb?iKKlpn1 z#58WXd=O{t;mkor9B`D6Ee5Al)CICYsxmIAl*FmU1QKHJG%8NlJhxIvyOSd_%<(%e zIZGCC#o2>+?NxhXD!cbTIq`o-;1kMu@GG9G9chO0q@AclOv5RcG6LETXkdD}HC^bi zxw!hJ(R=+5ME}Yc$%mcvV==Oibh-y4N5^SQIW%p)TSxL9GU@XLvH>g7y6#%8cySC5 zU9FK{Q*))cCi@4^i{7<2#NajWirKX<*Q%fIaQnB>R32+tg}s0y(Qw(mM9voc>)>Q3GbO7*oP4ONz8 z8H&xq6}E+1)Im_dY?D#By3*=UC7(yxQD1v}JAUquB0l%XRvuKfEG`CG?!8~5o`pKy zW^jrNN)Yu+{?MCNsg3WHI?kT*SV6eE5m#b=Eg9I{s$-2(Z!j5#Pu zy$!S;8A+XjCGV6Bh|3qOJfwiTRn_PFHYwxaH&N$aeAYOg(mncTzcGnD7hD=^dk@BJ zrhE3C6T$wu;9p#*SbZkLsz4y|)TX+9UT;CTs&0jq;n`MCnaW0O`AiVb{$ zNP-Q(57QVs+Xuwx4_jmT-~0XFjrkF6U%Xw9m78yVjWrw;sMAp4_H-71|CY^o*R}oF zk#(M3q=tBwZ@0dHS=<1WsBA5Pmk1jJgc-6G8`kT9l9nvVt1#IFIwCg-O)Uipk-{$# z_2cQSLHwg%ekeXadO@7~J%1^Bd-g>fKN`cQ9*g18$D)7yNGwh~9gCggexhkVv|Ysd zX7m+Ei?c3_{<()D4qOnisQ}Ty^mS*z57)73(GuUSblT#SeJiph|I12OM4sKyObRli zWGlbn{8yjCGEVS}iaoFa4HRnF?2J!x(ktWOQpGGkZ7~_HNAK{%G5htO)r66rRw_^R zCOEiKA-rDW$vmEaUO#^9?L+@ZB32X6C~3H;DyK|0MwUR8lZ6ld01GnLBw2B+kW*l( zFAbdnWKyqKH_%zSI5^0l;e4xZ9Gh$X_=(?rDt`X1J+b%YIxxQGmgrBOk=D8&H1%|d z^$c<2x&IR~6RE??wz}QE^YkRY<(F+>@D&(#G@WU-5MKd=g|)OvEVa-2PG=vjXl5Hb zKz}nn2FAm_GcL{$Fq1nrJU~i0FZt#!i=-yg&Tu38xBg1Z@47=1gP-q`FDl}E53(qR zXgDdp>-yCr^Z4Y${Bj`QmPd|u$B{ySq}A;|4#gqa88cPg?RrT9@XvozF52Zg%RhRs{`ItD~1k@91!VH4z45>$1-=~8(ynw<)?G&M+9%C#CPdWG1eva(~7ryQh7 zqhu-1J2&%928?nKa#HSrEG(4Sc@4vVq3$7hf#@wOJJKx-Kv^)xwM&fs(peb`%$SF_cmhm z_yaNj`sd2sP^rLXIFwefpcpTd&wT0(8^3&~PW&hNlmOccw`(~A>;#u4pbEM{@BkED zWT@)mnUQH<#JeFSc`A}8geTd^bupDeRx>UAGo1^1<8l1z9mnFSi*AbktKJjSwFA1p z9mh;726lXSb#=vV!8*{;#0(hM&mVbUX^v-$>nD(ko-kK|mZ!bm9;_?74WF2N%Bq~D zzvT-p>87qCw@v&-=Ab4YTci`o2e_HwQTa@(=9EVicl@sI+_uywxl&**HD#$=Uq)c6 zz@f(3z<`e`>iN zllbyCcj9Bcm&N9*-xGtg&hsN>yhW8yyHoel?Qw&&J^Ad3B8L<{w-ddv;aA$*4Qqf< z&Tpf4>^sPmm$Nx#Kz&by-tzedURg~XkV9|@6H5Iqk9{E1)>oc=wGpVKV#m5e8Q%Z- zm_GDnZMFHKq6B3+4yv_U50U~FVNidY3XtFY>b4Ge{8+7=)+Uot$zx(Un##s%s(};> zi}5DiL7<%$PG)b2UlBvIV-qt?N6J<0qy3$e@$2{RkIBpbOst>1Ux!W|G_8Z5@_{mH z1D#*@U-;U1(v=zsA~Dv7?t-PLf#fPSm!?pX%2%wiq!q~!ZJ_nFX%FerzYahG42th1 z&u#Rdw%UPiT~BVs^!ATN{S-e~nUvJvC>;RS48XIELz{x*=+0XF>=*gew~jSDwd26% zDr-!q<)$i}^&zEVffZ2>P!Z4wneqpOc)`nu${3wSPk)6r*iLuhO1WCLU{jW{ zKqNjVof7EM2;NX@-c+l!BI$ZIqFAmzAVt%@wq2bqCVkz)fA)hh&|L~2FLVqk-#V~` z*UbcjK&ob9u2$fr{QCn*A3SMD>NXuox(3WDSP$$BT1S>;y5%zcZNKbG z(p8=pHre;PH31G#VWlmqJsxSsrj_HiOG&mf*o^)|cg6fGpNhq3L%I1vC$+iiZcm-% zBN{#60hG|8!CS*n_a^E}OA|+b?k?@=Px9=8|CpfYbdb1cqJUyX^Vx)|khh!2l%`Ha zv-iQSfkG0{0h47KWS!Xv-!`hU4dLe=8^nhn8bv&;d-f+D*KNxh6G--%Q3MI?!moT` zBRxr*rk-ZmuB@lUw4;*p1GEoib+C)N)N@4Ra+9|^a>;T<#;R$|bo(i;l5b=iEp?P^ znv*(`n@u5n8NryaooqcFi%0HIqh$1kNZD+({ z^(x=Rc?pul*3aUrF=eh7J;sc-DTqs!k{T1`O>{gMYq;m1{!LAsZ)oroDAHog&{aZz zTrlEfnMzVXmh$uhMMnHgIwXgr@J0mtmd}vlqDdK31we5TS6y(zPI;lT6@{JdZzoY!siBU;ICoHTggL*1ZbeY#<$wb<=@~fP;;y zLHj^EY`&m$T^CfnvXo~7i9m6un@`y`L1yZh`XB_7^e`EbC6Am}nr_l!z#=e7itojS z6ri-5&v)=%$#iWq2KRh2;+{W>0fC_bX#zt~0|TFPb!SznxwUmD2^uk=&SY>Yz^Byr zsKK7#_SAdHTf2oWala&gT-Zg){kHQ z(kyzDg&%0XB>jOkDld_Ak-A*LZdwDrq+jLE zld5^B5GbRbx`}Q2R6E^t^Qyesk@?cqR$!hjSSGjD_r>6`d$nr(c76=N`Vi$OqwYX% zu7Q-;L|0saYFR(1Py=Ue-Mz@@bT*8i`oc8sK01kgBb`4u9n;Uv6jB))V!llq8|c;v zzoH{*w#b_0vjib))uw{s4<3rR>#?c-2MbN|_dT|rir79O9i2hwsHU#$9Iy>qWJQk5 z@77#W0x>Wm3{Xmg52#DsM?-V|)`j@~QPu^YS_M$e6F^A4$ zha+zL#TcnSc*oiAnE)=5{g5w`)uya6SC^V&>p~20-oQ7DN`?y4Ve12(KaMTp-~RqI z9z8Mi53sPH`{=_1GGV@rPMUIAHY=}KuL;zUIXMs@7ihbrC&R&!-??~tXA%GPP6dYQ zA^80XCf-2evlv^)Rh{lw@L4wNA+8#y6VpG^x+uDxPyIEYGFDiDT|_NlB+D9WoAJ9M zFZ)sTO0fnh)8Sbe8k`UnT1jTw`**a0Xr@|Kns{v^61Y)h zbotXksks)H9pBLic|uFa5-b}rjSt^Hi~F8b1Jx3DjD6Fe6lT+{+}g9KZ51;@r}Bke z=lfzF+QnrVf^K>loy{s&d0i^)2&J5DX@aHuVx?Ysl_I5V+60TN)aN;<`^fQdQM~ z4>^1A{-(AVf9hHh?ZQGvNTfEHgkNO2!bDWfLfu&DXpp^X=#nRRmGP>f6>F;(zjzmK zmGQwFN@jWH7=QlmiVLUF{KlOU_(8t2u-m1DuM`vL7E?y$waA@N7p04xQpRnTz`jdh zl%8j~)6_wMS|e9bg*|tnK<3%LvDhi;>?4|%Z^MuKn=$(A@5KDB+hQ@~Km0RxS(p38 zV<{|W4WQOkq0K2kMG2TQDPZ${q2&*RcpcZiuUPo4`)2XepXZ%i?eaa|4Tbg{7em>aFcjs&t?R!mD4& zPNA^NQ(;9b>TfB(>QuT5dX&1jTE1Yl3(a>SlCQ{zg=H%zMI!d9*}No$Bfk8T;~En_ z*)_WJBQgK%Z)=Qn{?cBOz0g8#|D08_>fPX!;K*p|44wefHij9zfU}qAYp<7#JDB(1 zwG}`6nT5_HL!AM%=W7V-3c^f*$1N8u09X5|wwGH+gNbUdnRJB6nrwgV>3;nBS0}Nq zZ6-q_Lk>^bf)?wW+IJ3Wd*N9OGF0#Z)SoIvvnRV0X^ z>BzB_t3=TS$<$w6k*e58J778;gc*QGROGQ*rF`lilj8|!?~A{yJCpZILwO1o|D1*R zM5Se~jzq=Xpm}_LD!R@@DN2%7OvLDqnQRBRMU-P3nyo*7_cVU`bMx5Xd4pCE{sov- zr0p(GV~G_yY3fd#jGxwEKH&KOk$?hLep`yC)V!# zaKxv7H3ob@T4PdTu|TQE{gs_YvWmc(#{6l6Lzf2I$J=QF&Y&c-ww_!1x?|xT++Y0C zPWNXQ4Xm@dR8k$Umz9RD&nlSr1O$jW}NcK=9iG~d1?^1J+$zF6kElbKnes9 ziu=w{;3#M*Ck^b_7AiGiUU}warIBU2)k7%i%uc!@&`k^5wj^zB2`zvYaAtwRXO9Y$ z%)_`+^jGn#1{A;8$lLFHaHp?rgcXCE#n9@_orx!u?a(ixUBhX}SfBPbGUao0$dwJG zT%ma>u*9npuSufpS;}*OXz=-62jm;Nm3-eNh8WDvb4&l#`!T|o@208j6U=Jh}(Z7zX_+UgaENUyI1;0 zzA|R{VW;Xh6l74r7SIwY2mzqgu#I#Ps5G;^##akZyx8sJ=3=N$)Ah(f)1Y=PQI{3 z`{^~uu8NQbY9A$#-=sCla@6>LVC)!doTAV$9A*#W*0`Qp_> z0v}{mDbq`PYizCWjlqdWWAMBGKKft1O`XK~OT-f|ZMcYh!5uFH8WXTi245IEw}t)$ zOJN~J#GDQ*RKCbd(v`tbJCz7{LkuZ{pLa3Sc<9MR{P0J{@mpWh7NbKd-vO!5Lek6P z7(B^Uuns?Qy@;l(GuF@k{%B* zi6?LwqlDA(E%>IjK|5>Lk`}gGwqXfNko`@_CzKp2`l|ur6-0+Zo_%m<@vlBLkAL?^ zYM=&f&tOaWG=p;rqm8{Z-3*NE=Yt#4*z3pr#}p)lG<8y-mH`US_b&!dKN`K`Ps#)* zcHOV{^Hp_D1GlIljKJZ+yLUD|+fLb9Y)l)N*Xhb_K#Iab?`kM>3!I}-7+{}i)7 z`amppwxdU2NWb~bQQBVu!*xm29@+(-v|Xqj(1DJ^;NnXzeQ&1QSOcm~m3bT*JDE${ zD)8V8om{5nocUDnm4{&>S{38*lWTG716oa{!+6noi`c(Djh(X1u>SDKkU(f}rFhVm z4gT%>Bc43Ti9G8uD6en@RFm%WXXBGGeBR6KhnHI%5JJ1YQCA`s%dDbaTTPz)^hH?O zmDtV&iq70N&P z<)_xzF)$t+;i1@d3!F~a)v+bWcW>2L7cte#Bio_m!dnYW$kl>8k<#;79%<&exlB>z zBk5}iTpyIrdwy{e|MQ0?@$rXw>wQP7%T!{5NUMl#=a5xP{#gJzK!Thh&OpuXaoB~Y zu9>!-*%J@N^zr**5_|=6>Qg?qjtMSpz;+e{N+(uPnOtrYeZgbXI^nwLQo=^2i~f-E zya8Oz%b-n4fA|64jK0#=s{lAL+@ssG2crM6{}7Ac|M^&)crxZ|8>MdmQFjIeS(Rtn zSw)nj=HtY(gI111`Qt4OV4yAR6cv%E;#x-qBC{4Ny2*;8;iM4?`QC_mg+1SiIjURJ zk7_lz|Cxv@&K|}kdnPK&!{G7|2Yb@zt9xudAAe{Oj~<^jD@QR~P}kz4$B+Nts_iA7 zccXH2G*!hO`l7R18Z4nvRZ?td7_s8J3SAw`5i~-vHT*ginwa_gy3R1h>wBVi z@@TAm;e#>w%==?;_(6@7wnsiGt`a;B$Axkc$(B^8f#T;-)Ii#u4m6HGD-15a_>%Y9 zaxGI2hXt~&RFSVUgPV$9V$B+Y&p}L2D%Y{08c+_fO*Z&MYoH(2Mi-%)N^E zYkCTcMStY?R6g~{G#-40;K&WgfJxgdcA0$U)s@dY5&iQni^+jYV>ILc>l2)r>w@k` z@uEnaMr15Zk(E@*LQqhWDqjNSA>$bAysSXfjKRlttrR;tL~rpU_tWDsxcm2F@Q3e< z*~4E_VKrtnay8yI0L~!F7f)8@$e`!nHUI2m{rLDJ{Wz*gfAPMEvp4g1u%?TFf~Xg_f0Jh> zxy8`QB?bjqi~GZ%JZ2cbqjmgn^e=y@dY9kUV6dd=zg#Iw$t>1TcJyVycABp`H4UUJ z!$1}r6*N?j3a4+SHeJ}$$7`e5(Yd0xb1c^G{eu{N`d4Cc?`I+=TJe_77QDoj!g;F)*2ug0`k3Sms2TANp;nis+NKlGMUyKu#)6jM8D`-vG}$#R8S1o zV{!7S7=HDWF}VE$F~9eAe|l}f_Mww|4T`iYj;+*x>Mtruv0*tdvJT2-`J%K7oIXc+ zFMq|&X{i9pb%1SF7m~=l%?sFgR*gC>9S=^|06@BkOv)uinMZ?3cb9xV)Wgr6^NF)- z&t1fKUek+{<6iv7+qYwlj+G~#kyL~kux^VY+|%<>3Epq;n{c=MP{gILh;=R9^M!&% zTT?F8D(?tjhO2H2AR#Q{l855-NGK=B#c;r2J^5Gah@Y#q5 zKNquSj_A%rb>ojZxvh@TPkVqr0?DiKO?gtWOfUY>=IV3d75wI&u{skVtCFK3K0GQ-!T7O71h|FFij~hnH+26FgEX;Ou@@v3w7bonVch3 zugdY9W#a8@9D`>L$NXDgiG|J*y(e@E-#MvZ7{~`%Q91j8MH1p6_8pt9iE9Q(U5&|e zj+JP4VNVOLf)Rm(Ph-;12epj^&_A;E_k#2Cn z(WQmyn6Wfvf~xJ#V8Dwsp<3#4qUdS%qFp;QgHc+#V;Nla>X_a1Kd8_9F<9u%hjWQ| zI=Y56gKdkYd=7|K1P_L^G`KvRA|R|X--+J%MEH^YlaIvw@B^_ps$e*FBPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&W}`_&K~#8NwY>@a zbyrp2z3%uQo*_>XAPFQP$RuDHVgd+a0hK!9&|0;A>TB(+wjXV4tG@Ov+S1xq+dB1q z+rF>0)V5B5TB@SeP(VtN8Nw6^31lM4lPAycpYHhnzQ48iIp^O0|9KL?u6x(nYp=cb z+H0@9&ffc+d+xoxm%r>wm(h#Q8mPKV@)Cf=r6p@guMo>h6ytn^CG3$gcFIV}tDL&M zSeUm|vRL$DCjM|Zk5k9`@uVwz@$@GQ;%Qe8;@ZdcB*xHO3^{L*E1v-|}AYw_I zv_QL}Qfmj?RzGd%Eut?SJ*D7MmFM$b>`e!8_S_=wejwuG_buWh_blV%4;;klb4#@` zjNzakg8}u_UMe+a+X*s9eaWG!Z1fkZq+PH@9UaQI&UHe232Mv7M+VCj!8UN(_EFh; z`OCko&?Hml^&ii`tuG<#zo=?o<&Ib=-??Az&sH9rIullIP9P3Y7q3SfVg=l!y z0-%=Fe3llXKwEYQ*3}5;VHcYA*VH`9pz6X(D+xzwxKvpKwXn6S8oFlZVLh6ad{z)( zLS~5NysseX#pZYsPr0fWFZuj&-29YbT=SS&jK;l~F9w=96gEsn0?u@|gAQ{_yUMh) z0Gw(~lGJ`PnQQukFmqOU;g8slkI?(LYSAdNM^O$NTyZ7`o-tp08y!~Sb@v(bm zae)BS^yNUXJ`Sm(>Taxdl7;`ff-1AC@~zhdoubb$s4gNZh1TifVtQ?)8JtT&D|57X znx86(9?_irB6>QlXIf%rqOa02cH@&b;uX&u$LBvjVskY0Otg%l#+=#=Ji4U7?Z8`a zFnJAk#h@y`RwoS;te?vjuvI0Ftg=*w0tSL`NswZ_PgPC6Fmuwa6M0icAZc=h*4Jp{-L=!KH>(L8U#_=LjqI zmEP7)U$XTE+MP;@QyC;v>PumABr5`%{mM*@Kjo@Dc=z zYszWDtz^i<6%^GSLXfQ_M@JddmX;x^eX{Z-TR6lphZ;F+Ne8Q91ImlRzHF)To|nI+ z_IHywdp6>=Z{3ey`k#9`afae&4_f;Ux0MCzWhp8a7pS$G!UC;KrH*W&WU@ri5UcRV z6IAt3G&Sdgd5>0o%GEP3&+V!ZN;Df_(K9V!bDh1che|d^o&8AJf8cbxi-G+ zw2KABxCEAv_5_f=s$MUfD$G{108`S2BG^^-XrLpWfn%z*!9=#|Lic^3EtvLr?5hSd z<>v9G_x9t}uRj~}nL=++ZAox|RDDfRH>m2dt+!IAfv)6w8!c45Ya%OfL{P0~iu~7?RHzbiS_w4R(38 zF`$y`bs9gE^hoF`s$gElghq!5Z@`(IbiQ7g4&&spS^Slk58_{a`*wWkP0QHW9K=kU z+@AI!ebzc5GZ{hBY;3I?A~iQHDVxLAL6Re&wN9{Br9q%JRbZtaP|I9L2j8;Lf({Lj zc=4!`*D}7GX&KitKbyrXZ&cYht9dqGuoNN-z^oK6d||;XTY*DXwL`Nm`dNZj?}XYs zrslbx=BB_E*bZGsBuHdLWHzp3;nq3Wu} zb+3;a17CzZoaAald&yiC1jy#j}QcF_O%lX8I{7tYmPPH_zy!4S1wJ zC{bBOLkTQH!z;pC0Z8WVcRN=OKP&bc8wp*XLor4asZsK5Gan=h(sFsDA8g zSNiPhm+`k>u^rc5J&fI%F0U8dcglfF4OuH4&>B~DSE}omgmuQDj&-10b{JgR5joUU zIaTRl25~)iMHj=mE!bah%p}L4;}=3`5XVOQ@lRg67q9)ph;41wnY#um-|LU!8KX&j z&#}F@VWhUy%tZdWbGnSz9c;&2_m9O;jvHzA=VHfps445m|2PrHmUc-nuN&lfEU=Qf zIAm|vg)dsUG^8Y#g2Rvwvh9tUZt8x3g+o^tTJ9z~CBOc;5kL0L$Ku+@_u@dCa5n1P zNTla*=yB0eFS1ayGtn zz-nu%ZNW&%JrDNdzkg&F8~(hK({B-TMbHT?Z$EJ2LOgp*SHPoVF&`X@(QqrCxiyaO zKQ)c-xqLr1wLI=EM|iNrbB4OFlAAr68*NNC@i{;}g$_fu(?X{q2gM^ayj~rkO6ij7 zYq^tibW+7YQ}=hjtQUXdYmUcYV;lzuV;QCbZw`#Sjz%UGkH*=)JQ2%@&cAn2EQr9N5g6S&ii-b+=ZdH2fkXYbFfSlN zW|%W89amj%-fIA?Kz149>s0IU1wA9BF=eb)0jA}e3JC--bzP?&+KL9-lJ%OJRZTIV zzIYo8*c+}Zi``TPSgSkf%yUF`7H2N>;(mxu9myyoW;;WN@N<2@)TW+FNyU) zy3-}I0!Q&WkRHpl(v7vWUC5)L)2R-5NyrxJz_meNlX58iN*bxruov(CqiNiIdKtr^ z_zoP+MA}Pz|>bH?>bJIzt4%Ai|``f8y{PB z@^pU-iBNBGkL%6WA}{Wy?61%f_wl<^q@D07aW_!b!rQmQ@2zpP+CDP_Yruc zM!uhFv%b_`>)TE);=4}mL~k||kJUqg=lawGl~Gc2c)z7v1ezurPC`5HRq0l;fi_T6 z$Vc&DgKpTfjKa#oq|8%U(Hl_BLf}Ki-8dS!L#jjCb#c>QIV+|_n&-Tnz zv3Oa70IF#Ux~hLSp_S{z?9b!tHuiL-H}ZsD*8|&8Ovyw(vo3($ z>Ri`>+Gq9Hz(;(~6$dd~%(Oh>VT?*icT0zob6OEgD{V+&h|DX+|9wxl>$qs?MWJiD zUfyB`l-nUl00oHyPUcLshdQ;r6F>B|<9O#vkY0!P$sCL1ftXzpszX`w0?Ll zO@OAjLbt4f%Q;ju93{C17Ey(cX!Z%>kir68UP(JF`j}M<13!uO=K@m9Fh6jv7r*zB z-54wHdsg!CR7>B}N7H!5XyAKP_|*ZSsm3-*2Wbs---e++%cf>N9%bZspr!CDPb}hZ zJZ3+}i;1olHDhUCmd>RjQg2yQH>&J!w-yrMo~fbm>ff%AYg= zO-!4X9Y?*aqtsbNin_GW%1BF@GERy=GT{ibVHZew*D2*b>X11}+esa}lpiX5-uv-s zJovDdCT+L}iZni+nkfC+;|E&A2C_js`8J_yPrVsfnKwhS_?T&u+YZcoJGwIbip@p* zl~WUUaZ2Eoj`@RXQ8fi>O6Q@QJkS>U$o9_duj2}I8LGG16j+QVrBV8-VBpaW_q(?n zfAuBHc+qoCYKG#hK%TqkwKeIeXZ>2^*0;tK%c3;=bTZ>kwe-XYlN?usfh z&A>n>W(zP&TaXnB%S`yS{^tldubPm0K^Wb%g9R$tVXZ==6gm?_Q&Ij=B3`&Vo5#&J%;P&> zcHB>FY8h4;&p)XaB8a>5V5yvhAX`nU6cJAIdKSe5LS5_>}j35{egL0*yRdPJlU|&1DFl0r|0vU#LEGHdvJRNMxYI#ZRkR;dPBJ4G|n2)I4ZA11sm3%33X-!R*f-YK~rKukeoRx$|J7*ki ztb2oa?&d6RP+r$;?8_VIkR3?wk$x&Rg1!LIQpghxTbi}L`{X399n8EeanoGCF5wgR9R~9QHP$QoFMNl_Tsx=GK_1lQh>3KVwyrAC$W?#$lSTMeiCXAzR_es z_=&zrYP&$O*3t4J424(^Itvw2NkZzY{Di_=gB6hil~?&r>2H_WnB5R5pf`cAIreTz z)z~Je@^GjP`ds^}vBbD)?)XecQs(K*w_uf3&~*Bg{S>=IX%Po)R-vO>x zXA-#nihhhnp{qX4@cm&tc{Giil-c8ECwo=S+HU2d>(E3E8cL?&v)@&kQKfeC&ii@I zST}F?HAGV6p;b#zie(|;+gL*Qtj zpqm1nSUNheAf&r({M0}?|R87P9E3%C3^-KWWz1w&J;2aP78QlgqP@P{xd=A z;7I*OO|ptppgGZNQ>$|5XkQfio*T5va<7!xM@Aitbu_>NBGY~4Re}QvzUepY&Ei|1 zerCpyEOi=ilriZK z?yEsdf9CnPdg>z`uM_&ID3!B_xRk^rA#yW0jEYVh3=#vE%`0CU5TC zSihWK!>cQ2SkqSlIc)8_zVcw@LlYIpyJI}jDOA1MUk=PxTm(%Q z!}vyBaXxE2jeWlLE$|Yjdfk`fpkU>cJL+pMjT|qa$@_*|;gYu(#Uo~9#AH5?Z+*dL zJnnK$p|iX~@qmyBoS0X@WVX?8t+U_}(5ZcKv32G}bR7vq)*;2+R*wcG5_Mb=uZpTt zAwgNO_}Pz4!?LJm3ysQrx)o0zjN4iRp43ybOt~b(D88 zbj5~byG}E@U{G*hCOf|6#8k_%uIOFD1sRaX7RYC8fO$%DEGJ~WkK{LzgH(l#q$Ep< zL-?@xnU7z_S3kF}C2(NVY@|feSRLJqt};NpqO*1qrx+>5=~7aB-n8jDW{BhZrSb~4 z(Av=jD-bVJPA>#KFy?h(OFqhVjC!nKtb_EuS{lap1@U zdFCcdkYBcIl{E#I0Lxfi@S9N79gHUN=U=!L8ylnOX+Pi&+gVk%n>LnUX-vR>|^yx18&cq%|7#8 zz2Pu+@0-NN{n{pLf8$^(SZz+!k?N+D7FTtOo7l>&2DCHlVhvICdA3qr?&^Q*v00q# z^Mr%=vY|1D1JX_fCC#7$&_uZknz3F77ich*a$xLMRm5owt_N7M1@p4Fv_PGTaH-hIqbuvFsPcur zrNID@*GM$FU7l*ZuLNydktubpP@7uY4^r24z@$~nU8n`-+u?ebl|rMaOTa-)K6E-Z z79$0j3iPgV2Vq@gAlyeKRt&3c*LKloUPY{OU=TQr6J=&`D1*-(b#?;>%TYXaV-SCG zd+xjWc$$4OF~G=rrEq=5n-iTy^fLwNKoO6xqKq#(e#^~UG16Wx4W|VRO=E3@3o>o7 z$Ri_kwSo+yX`I5_*sZ731IHjIpMsLKNHB1EiEi2eOe0X~5;Yzf__Y8?Cm#Y8*Zua2 zZh=Yjbf~(_T!T6w0up@1FYQh4pGWWBJq4IH5*k_0`kj$#RTbO1x=pK&iJD#vsJ~uL z9!oMn+=BY>HQTeeyg!kL7<gyLu4@#hunw09U>59_=Y5kFGS}@|0qm)DOR9L!)W|E{mnT98OL;;~ z6OOVux3RSzY3AJ^pn^18c@GF=%D{KvEc&s3+qvjXb(SJl>l(T=>ZnvQ4Uz39q;5lH zlCIQgr6DWF{g+XUGhYY0ZrqPA+2*rHjBI+AvLZTKE;3UUkNH?egrq8g@Dia@^&4*7 zjL}H3DUT4Zb!tpW1fjt^Hka)spCzfkRx#FmML=nqvgnc;MxQ#{Q6{ruDkyY^G<4|( zj$$^vP9dbw_rB<0>0?O@#T-KsH^QbjNs|iYO!8f*dB;fs{Lmg-nFQseyyd4{yJ-Tt z779wX7vtEwU7PbAS=1QbYFdTL7nVS-HkK9*4P9C5X#+X?v><^Z!yWR;Vi-4Q^0;}M zFHz)dwF=Zu4dthVL{$VD`85Vn@08mJi+I_yHshEY;d!4dP`N}ix+||qtOazwA=Uu? z8nmp{!g?0c6wad`txBlOd3=mIl)-BHT;)Z)S*rnf&FLtXLl`<~r;#q$RDRj-9?2J?iV0NX^EZqYn|1U2wVzLYqv zytbtTw;(20f-l>e$B0?AE7!D1>dlY2ekGMqfui$N_}ksu>%dC6#WuRylY9TddcJo9c>S3*bH;PEvc(N2@CLJ3f{e_5yG z+NPVd*B{0Ho%=C3t6*Y-UTUPjO|&SWYF@pGaL|{cI&c+%ngWGxnpQqBPtdMu4tUGc z4j*U_;%VbvJbA=pIBa=TC~R#_%#FICs6#F(5#o_g&2E%d_${PoUek-~u2{x=%FQl> zO08NMQNJo(p-_@5YLn%j60YxbTKwA3feWlBUdN2C@m`?_AaNGG9=@Py|)l$J*61Sl@qW~_93+@F$<*2%D`Dko2&rhV4W(8!;X{{BwI(dNxRL!RH*vE z3e|>^a%@GEEA}@*=~N6x4XC=1(ScIi>4Gvew!2{MjA&mt7)T|Vl{pB~7N^WoclBcQ zz|=m)btzi_b-szFw{+G!AQ?!7=d>VI%zKo$B3~{x4CGTM{lZ7w`?_gk5tk2WpWw(( zEW3~&D!F1R;#m7`h4@H_Ldy7X`Ep%ae&G$nnDN^OFeT{fY7nWeaeh&ka!S!j6(eO- zC#|S@(gVK{WO^^<=}|hUJcXnRcF(4uE0hGJuKUm#B?p)Z$)rQ9%N=zl6Q$T*_bv;$ z3r8-r4DbXdG{1o7zaRm{b6cnqkvg+E^w~UL9V_J$NkmV&hO<$exoszgOYWXi2&BIg z)+sd8kjYf+24J|e5Cz1P?JZD2NaqZc$)DmiE!t4opI1Q2s|34Lhp(kRzCVv=Zt}$m z%Ka#x>b7mzqqXw{3`I4ci7KiQ1{(%XBRuo!UR-n8OhJVqI4|X}y~@=fsU6AzO3A!S zO?k^B1D*Q>7dT(GM&c$bfzobiDvAB=nto{F`mXy$d?xE5j#R|mLB|L{pC(+oxMB=3a|~) z58OMC{j+ob>qC~XT&5g(-e9TPl(a<77)N6!?Vv05nAEgeCWR)m+_QHr0{93?!L=dY zO`FBH9f3;qUh4P#;+2{jD6U!2rMUv7kn&cIp%p1qnSs6Rt^+a_!x|B_4F?qYbP&(i^OHRbE$!OauL2VFlB)+wPNdtc(GhB?~Cw~2*c+u`Wo;^Q^y^v3J!tlzIOTxCVbU}nq z{o?QRmrDvz0U#*4Ie=VOHX*AsTFjy;Q>Cn%jQzvZ(TlN8kb88pfB%D<4vh^JpS)=W2y$#TQ(SqH;nU8C6Q z9mEGdK8Wvp%|r1`k6pxfpV*HJvE_lxuc6Zp4e`cimhFXFT= zmYvZ-3RfB2l{a^k(8#A;YcX2^+EpmN<5w|OS&I}p`578Z2lFCKUR8Z zXAtlGqn}oP-oMXGRjlIV z(tGg4>#u*66_+!jo{7XqiB%mPqp`0&)K@)cGj4hkPb6eXN(efqOPbJuhLHqEG@5Eg zzt$)0D=(qRwM`_rfI~_&s>~`p2bAn|7D_`YJzGOfvzluE%O6~bSN+x`-twVIO!l>; z$w7((|LRJMLYpF84&C9IOXS&*_9lYXYav3K_ z)41)9N&LmvoR6QnWgh3x_B3M+V?+lBBZ+BHCF>s&6J3L*V(LoFCt}m7xqs4?VP98q znz=@s{4mKN-hKB*eBUoe{PSO*#o3)+Y;Nvq^*iT)+n;R2VxT2N#=hmkQZv>_`(gG| z*$0v&l3IbnN-uEgCta}-a9YrV0a;UFg*9G7RzjG0X48l#=nQ$R_KLo>!HY9j0`juO z8cVXc=5bY;M|%0zGM;pW0+3q?DNs-~ihN?~Y&P$92zt4aD*;TAvCvZBs|m`D@KvK= z=3Bnr>RTsYbr=0U3jpPrrpWeslh_{Y$7}!RZv3@hJ&4=x9mbZrG9GCLDQ0s$LRb7m zW9?2$7)i3cD?=XuErqVHK*P!M@RszCwN(7-J0iaKHD}_zA33YCMZEFDJ4H?>tS*4= z*YtmzHtzfwe-0En=^q3QB!@OYv(zvtEK)U7_(#HX~04_FER7=-cN1E(3EvihX$1g zx-`(G4UJ%%tjX8gE4a#zlH*7GB+sHBKmJ?O_{YCDkJ*0T|MkKY&OImOJdp_q7TnDY zR5->AA_W10rfa^^LKR^S8qz0yZE7{Ui@z}*#BC2Ai+}j~Y5c2Si@1AdsO3_|_L!&o zF;V1y_&`+k!J03+tcG1P9YiK0E%PgwmL=(aH3gkxQievPBjX6vUQ;XBlkj1wWB-Y) zUONmbv@1*Gafy8SwyuKs(;ZFk=~yWeVx+6MBh?CynF5t^DiPA;)jAc5Nv%LjYtUNR zZXH39%_&$dtHaD-+%p<15281j$3K0;`S`^@+>dPy-dNK%D*Q)DlFO^x+62LoLBg#R zc;>ISSwIp#)^h4m!RHn_8^3UsIg5MGkK$L}t*r%ry(_l;#~Hbt#N7u|&r<$nLZ2L^ zW0rz$TWg9sKxs-8sANgGoXD_(RTPw@$s1P745HJfvO9V;$*ppiAKZ3s>$feNE@y$CRO>WQhcxle(WSX&Ha71kHYUDb!(%Ysrn(Z#iwLztQw)l4tXU_tj7a4P>!WCZSFr;q z>{f*{DzysY9;(#F ztWohq%5vN?3sDjcd%Szni+d(grvQWJ`&24E67uRTO(If#A4b8lzcY)E-#d%n`{+D= z>qCq9*y%v7@)K7rkZk6 zUtvP4d?fnTX+Lh`zl4gUEzK&RgdK?qd6Ma%H*_u-qP1BcjJaDpi#-L{e|^s){_<<~ z;-9{;7w7i}S{k+IQgAJ_=fYvGDZTcQvh_-_Jxfblh!Sif@rSo-NgPXFS2Gz{IGmZHnCPam0pIr^hjU9i2$@O)5-nuGlyO!DHAT>Q zvzA}?eg7T3c*BR6{>rxHYdxiQ7=01gg+<303N)Hfm&6ib_sEdiSS_R z&Dp=9nf(d{*3<@-!NcD*r@9oGHm_6W^p6jLngZ)Q(moej*^Qt6A6i>Apd0-? zm2)2my*f&F?lWXivCsx`W|>Opp6#_H&pZeY=n|nM%_d|h&;aVJf6Y7gW2SX}KyR5< zvPSAN0V4z5Wu^bcKX~RrlX`i(W z{>lPVvMq;75=LUAgpZ`w3JPRk6&|WOWn{jM4RQc^-_f{ z-34hWI?$JPJ_>t<_YF8olB@xReh;M5(o{oN zOY`LHlnc7~Lo}+3dcb9kuQDDWVI7ySultMq;QH&XJ9?uoL8e=GSJEh*XjZ!E`iQ^! z#pC$)7mee~p52ef9ACsIPA}rzPT&7dz&Gw$9XI-e`0%F}@s4|X@%$$a;_4F-dkQT6 zw8y%w5i8sUp`aKAq{9jy=tM+ALC_e{E^%hNL4O{<@U~gpdXL)TgI(`+Qk1=r7YyFX z5DAgAlfpTK988NSbcZllE=faM2dt&pcVfc=vYP?V@zQK13tzgijN{6(Bm%DG3K~q; zkudUx>dT}nzYZ|9JEAQus5B`7oMSE8$RW$EqoILr8GoqMi(52#94O@iXmH(i*RMYM zV&e|Eio+4AHmdh61PoIp+%L$FXBpPT3Uos^STg;rP7r3#AIpph38=>~x=-9jqr z9urc!l_!{r28-!*mQ5qA6dSTP{pqE+s3H+IQA|B+(*|7u@&%6@#&NFbw1*nP;O{0B zIsTo<*(j#Vas0)br}1~c;L@U<7>w{PvoWn=DVDX^9V z7N8&~wr0w5RtzXMbpeq~^`cIB5jG#X8`~5@TJ~~AOC%ayuk^Em`)kbEj;0(4Nx<BIx#6(+i` z(#0Ty;#H)MUqz;=Lw}tjQc{<7A!S|EfOLt$f9LR#xT_00r|)5~QIf*Jr;h3DQRVsx zdK!w50!snL&)@7%hVja$UWlK3F|NUo1@vIyA zaaMaMO^~iPiv1W*X7Q@ucsPFTy^A=tF;%<#na@~ybT$*>v{7T-?b!9^Hwe_!hDt(J z_NV>0_nekx2b8pkiKbLrFL|9=144-sq3l75dCMGF>SQUsC^%TaHRU#02U7crjEIz_ zf3!^j0=eYvs{C%s5fvvl=ai>dOH^iCSW7Cn$s|>nxh4;kfp2-DQmn&7YxM|elJo(n z-br8a5D#EEI3?w%8rfdveJ2^`ikV_%AZ(~7Y8_`WRDO518P}ia#lQHvWqjT9MsZ%z zGM^L6($SyBNXy=j{MKIl`umn~h4xsB9>Jx+vo2{WS91+=psdMvQh=aR@!9=|3kPb2 znF9q{zOIILvBVYNI`BHs_jy@Ej#Azz za^smN!zcbGfx@><1+jym=xN3xQg^k_Iwrk8@KSBkUw$I?2Rzrl>AlXNcMzM>|Brri zH-72e{kU>N`=BL(#m{78W;bAI0H|pf;1THRh#K8H2whz=Lt#vH{NVxcKsTj8m(%VI z5|i&PmjN-|#ah0CX_rBS12{8&6|zvp#u`M*Kde1xa*ITf&0sLACJoUo%QSn}K*?IH zF>b9&C#|q9nR_);PC3pyfu^Cz#ldHEGZ28NlEK*NM70(m{8oypPrPz7jvbrF&HBdFPz%s>1i-H2S462&hZQ>8@j;Llt$^Fg zVd1Klll$mlBcLf-lW~(ts!0ATc6XtA)of4ODZ}sPbC0T8;pGoNrg5x_?eI>zughG*xdv3z zz8FqcR2SM>%i(qMgM{5kMrbd<~ zICULY>L7PK6_btM!-XSP5S))xWpBTJwz@sb*!A4lA=x(;AkeOweX@+}Ri#V8! z;?(9ie(b9@Jhy)lx z(yit0x|x=@+HOl*R0m_SlGj0?s|i?utYuQT(YPB?;g`IA7aEV&55BX>bp zR+X++R{6$iPy+sl1t>v~(W~WfK94YDrgEJ0)yo`r6zfEn` ziqK(jIUPbwb(OZaA{1Esa*CF{-Nkl%%b$q&v9CE5TgQiSR{N-tt^lvmzUtqz!!^V+gS*O9<9d}hDrKi1~z&asFrV_NFf;7J$IR3>Scc)Y#W;-j6Z z;-McGG;4kF4ZHEP-#Cb;T{(}3wSk{aW^ws&7(e&+o%pG@Pol3$s@La?>koa#wg+r)*kW!b#W!3(}?E?5|Q) z(I-fW)MMo&Hd;{HB@19{5mL^lsdjLqltPBEZ z3`o%4XEBkj{Ww265ubM=;@^G4D8BQBTQS^1{(RhUd@uUDJF&kjrzlALzkv!Y^fXNp zOxCSBbM|2oPk$W0Ln?QOu1{Oq2TE;#Qrkg(9ggBzn1hLIyTVH5k-^eZ<7%C%HOrvQ zgjZ{Cc(r_<_kL8uz!#E3Zn9BD8KdA(GEHzgP%N8vr*wiZeDb}*_i2V+k6%Sf(3J}s zRneUpS{JJ5K8;U(8Uy(<PQ70GNDU98mMh6C6F8l@(;nmHQyI#3$P`n zzN7AbN;DH=1_n!hY1#q6ClY;aFP7Rya8qWk3!tg|%Ln&prp?-JR&-qfsY~3kguEf% zsngWe+ji%CG!=cHPGWyIvdA=_{Z)WnsvDfwftzukKF8;NoIa}L0@9SW10ae%$8lq% zWK0W{)|+GucuyVgYYCej3}de4Z+kR~$DA6)cq6odpL*6F^4%qo69v{nr>~opv#g|; zgNOMCiqE^MACJ9^+Z7B5h1pID7Qp6ww^;J)%(^tT%mg&9pbpvHDpyNd=xXu66lM;R zJ?1N?7wYPlPte>pGCDSz++X@e8UBMF#7HMB_XQtN`cC!z_cRH-bJma3syOORg!BB7 zKsqX(HS!jgc?d&n4`~Lv3(RurKoVa@!lRznllZjS;pebjU6}fg0<~c%n%T2_>LD}I z63QzgB3=_j>yg?hgQ^29l+HYh%IAMfMN`c@LPbRknE%;z<6pz7W(- z`?S4W4C3VGB3^i1cwa>$EP=QHEkO20kj3RtQWZAkhFS>Jk}mHvfmO{0`!*Y8kmZiJ zelU%vYWX|hR*FioKHC)Pjcb{`a<-yu;4jSHwwT2~-y6hVKf4t_bb2Fx?BVVB`wt(B z?|NuE{^ia%?vQV`@H3kH8(9E)Nzf-RIg8GwL{O+?8{iO}%t#N*&kxTPg0)zW|S;cDK8mAgo;INN<3}4!zq_EsostcNm@tFAFJi?2owTD6!Bt_ z507g3`@V$99MkzT#OrJ2%*qG*;3QTAdnT3B6q~oic#4c5?b4Yjvs4 zORS1bnHeazrh)XG{odJ$}0r(nDtQo)_cX8EPKJI^d)k8dH@`K@WB0D1I~P}NM*`s&bb zCwZ**wf$sJt`snl`zC^iH{agnTRhW)nU+Jk!kL#2;_pqK@wi3Y_;>{$A1(P|Ky)A{ zDUB34x7VcE$EJOFhcInwX(2&hX`u%T+PdJS{0d-%pt7+_;bFPQ4(9Q)@iHdC1CA2p zT}*vfln$xEwW6V9n&vw1%M4W>qrZ z^o0ukaXt%{ZPtcK6-H)fYK6uQ<<8WcIgK41mXbmk5FpW^sh{iy1uHjLl@jRutNKf| zbU$7N)4oH>K)`$GT_0g}Tj@~C&V6#vzunu=>M@P6e8tRaIr$))=Oc5zY|@Ku%}@`^ zf4^|9A3Ks~Uhw_!+E8iH`JyJTGSzxBi@=vf5(2s9@$vGNGOVo7N&^ial?muYh-Z{` z6_U3<$QLxl)Z0?_GLXCmY*j@aELPJ57bTfsMv);A?QF^WK+xeaF*)J*Y8dynrW0nQ z3^x9N>3L7=#Y;c00of)d*`FVTvsd%kDJM$CzOvHN3DB^TIRaM8R|86Ls45|mDbTuy zLC@15ca*)jrnetoyETa!zrvRWRzqC_b7_zHnvv(K`EAod+@%?Nvm=`?`U+B4q2v8o zFSdHKxOK9O4^Jg4e^@i>q|f?OJQ02H8ks^%kM~nzoL3W{ny4=hy6g>5ZdD7cu>uuS zuSMB-@D}4k_sAG20qfNOHH{5{3JyRwt=J|8(V3M)pp7^ud3ns#KpE)Zl3lWIt}8@l zEjIYfU`YR^7cJw;lUgPfWbQW3z;-&Hom2fn8%Qf%Tkb$32V}q`rz=@Fg_X&w6sc7) zun1}i|HiF(TrD~Np^Es={??;V6)@EY1=L)9zf~s_KRo6~Y}`hXw(qk|hKM$}V&gGu z_QbbpcHskS%OaYG0*t5X*7dW2N~>Hp@}u5&Nd;ek%^-rG68O5wRD!NxCU0o}uBAFP z8usJX2NtoT0pyV-??GI_f=OnQKrxKwq$zUh7;UlC<^HLrDnqOw2lriNIGTQf$XTYT zz?q{0)_2WV+%=p}hH=BGW&HIQYQKe(#pY{cn3O|MY;hx`l;}v3va>n=qVY7oTo)D>mi&ggB-B?VYdr?peKwPmoX1UiaT-nBTCt4Xlz@y9 zcSF3q2S)SEaLag5=U(a(He&<2hJkUfyjq-nhb4U?Z=LDFfZzM#K8PDgbWk;p6jGT0 zvQjZ}^Mz50PDRpv=jL(GSzU!$ajCEdweyYPfKwexn(SIwpcWqi@NuSZEhq;KqNzH7 z84JhFr@F$KL|oYK$Cp2S7~k*(W0Aii^(XUK-Wo8I#+lmf0w9i=6qubfz{8oE#vji#(q?WaF=Kg8RZ z2dm=;OYlY=A5#0U@Un|_{A!7S%Hs1wxBF`IeFu0{eM!}Vl+2(K-C$|lm7%StC{wzx zb^O+Qxf)F8GcZ}Iml{nS*dl_rG7TmRGdhNLunUEUt_B)82BwgOm;W_Ph8jX$8O=3w zO|*abYhT3vY90p)G%gDKA@?29K(33GgS^ z*Y&3HH@6Pr@}AE4rOtRyI!z^0Mhr}X63UKbR)j_hPkeMa4v(Z4xo_EYp`9n8dsGy>7#+h8bR4mgT+Am(P#BC z_7p@{$pPP`fVyFzS(I;VTRdkp3I$6(gB9xxGa-rnSnn_0L(m@8~ zuAUraKF4A>=*I`Oue#?Pf6WHFZIlr7Wol97yy!004(RPOpwcZ&wR8l zr3V_D8#E=ne54>%9e*)}Sy*Mv6!-^0-_uhN@M}H0YWs!5Wjs~em;-J*C^9W)8)Y5! zXaH#PsL9??0v<@`I}a47YN&33QbuiwPS2ZJA&m!6Q^rw{)d(bhrtux0%%A3CaO``x zF2ag33`@q)s4>7td+E9Bw&)WLRB5f(*7xwQVwG)D5e1l$hRW|v2EG;Yw_kc9{``$2 zo$1=gl&eC#N{yV#6FlSdl2W53R-xf^iabjot;Cc@P1jt$Rj|7l$5VTg_*o2YD}zrYO5V-n$?XH<32i=k7eGn87h?tIoeJKM9cY4aNs3g@Vdvlp*Yc|`unJp_ ztpb2)2M$dur}x4S*)8JbPg0g&rgbMUKq(1TTn~2T!=Xt|i_D`j1zQj&foe@z<-%C4 z(8zZQXcF5+o6MhF6e_QAeBQO%k341^AAR5;PG8`@TYlL!T}LlzocdPN@J&Hp1gPoS zYS%i@DJ48IJ<@*R6{DT_ZY_CN^+yUQ4T+ScbqSefI|c@wYz671O8~PGx8ROT#}{b! zxqC5>d(}TaG(TKaZ1%W)NG8w;e~qP#XDK!R-ci~pdX#~UrT+2vC}`EbI6NxxwR~aBcqTODS*9)@;xNQ-Crm@)-C-d&_vvHNCjzBWM@Gb!!TsO^7 zqYFCMZj&wp3L%f$RA+Ul@?tVz%v)TF4@TUu>Bk@4yNqA^Sj1aC$$cyWPqlnS#hXLw zt^18twRv=2a-3keVJv)-^ndAK7GI?0=~!ULGNI?)*{NnL<_NTKrlXu-Dh zy-5{*;$ba);`#oiUhN(-d!ps<+La$YOGQ9Kbla4EAN(=F>D^hp==x!t*pMSVBS})_ zX%dhQXc#VUv)Ka2qyW@sW6pN$0cv4E4@%PY)#OPGMUmU(MX+dhpoSK+e(Wzc;z`GM zVtYP||Ne=Ht2TOZOiRgmb?89nCQA&@U!w){QS5Wan0LULk@z%Ct57^n8~+!K=J8Ei zv-tYKK|EE1JkWs57(JCUs9e#zpV*5|28Gm|+-!3)nunmv()t7jGXZbAuh!4SM?bbz z@iHM-hT*+dej_PsF;GfdwJnJD{!t2>$$(IlZu?6c{(ryQkNb2@QTNjo?0bXkx%v4o zY;6^^gV9!KpeXW_eQK0{rTh+E*Zzg)gf7+9um*#xmNW(sExF9pv`LO?p|!IJwe|q3 zHELPI6{FQH?y7j|bOW5TyjY%&#rAAJzVCMq;+^-5mdUe=r13vdxMi0$%Mz zW#>bX%Hg-lC80hCx8AUfRzx)c)=^q&iXqB61+vp^Qp;&3nBcT(r3#dUX^n3*ZKxmb z6Z0ROWmTHRh>ujLfgmaJ)}q|aTK-HGD18((L<6}Qs|GLlx_EbOnm4i6G)mL66 zz5Md1d!Xsk$~o&u*I}jQgvx5|XyK@(89Q@uGIzM4%8-zi%T1bv7+{vF6SDV~J0kwp zn@`5gqy2dG_8DD#47B0h&=R)qDue}>;0NjlpUfwR$9D5qOot4XI12^JT(bfLS@)vM zJXS&wnImvNs8OKwEAuw8KvTnzB@7+>BIlqHtv5T5W%wP`+}jJW$;#2as0_|F%cXQ~xU zX-Zn~IhTO0l3D>Lr8yUYQeIJc?DG__{Ah6yJJVVG{0ApmDt6+lH_s?YBKCR0 z+cVQf>@PR8ybXgN7TH#RFVie`nS$#YKOtK-&-weO1h)kV_X!YzY8%&4y}d z4KR+_Xyfd$)?9qt%~xo3RGQ@pc>+1>iQg6%UJKUOC~kx-Za(J$J`%w$bF2WnRTIWL zce$I+O$tfUx12p(w+rlD9c>j;wTYuaMKqVjx~XTuGwJu4 zg9gN?*&@e!3O#B_T~yBM{4MM!&ky3Y{1Co2a&Clqn4P<5U#0LasWmvQ!1<7RSJ)M* z@nEg$OjFe48*By!Y|m5M?1s2;H;vtCKYsDUi@0pI7vFMB_G^Y>pEZ!Jbi>1=z;L@x z!Mt+h_Yqj`{5uKctvKbIIy8lzf*g`o`5MpeF)eiaMWFI@7G{zJy2l257=b^a?V>0q5!rgPS%RC~Y=r0e6lHCJIJ{{AR%S;2cNq`u&b9tdeR=K3*M>Od ztf)yEq~`_mwgI$~0$5hha2K!v@g{`QbUz(+wgQ=^BdH8YzOj3Dz8P=*qNFawq%6Hrgl<}ZhEq~Ps8h)6ad_^77 z3C>foGy)GbDumq7Y;}kBRj+xsE<=0ysW}_ptU<;VoHsft{EJ`?gTRd)#*T!cTLO4? zA}0^9EN>6{@tYrC#veVf6DKDJ{;sTwt)n@ez- z1K_ljxk^bv`{_v3tl@TAUe)3Hh3rD7Sja2=lU^uDiBX&GF`=3uJ2 z2owFT&|u9rK;<=b2P~A1t#w-&XdOr~60(bO47W3|l?T+uI{WV18N|=Me>d*BFp2x8 zJj5$KRMc#h`y}#tY$gQhaN3l1Kn&U{q`_Go3R|#RtI>l%LF+J&cY&|CgQPg92kdY5Yni%fU9{E4+jC9GB`?9>cwRGX2quNBMW&H|x z@d#)IO4}C)HAvs6!6tFopT}a_i+}UZdEE7|)@JrpJmz7LHV=N)S`AC1G0!hI52a(% zAvlLIp_?lyo~r%u0Q7?2zk1zA_v7@1zGkRp+^Vy3z(-4nAXnOTrmDLX6!q!kwo0R~ zq!&}S&d(lKSSu|)>q@jBZaUI*zLMQV^JHA6N#G_n>b@tX`qSY&{=-2(?$!R1f1k)3 znOU#-M5EZ^Y~=}(yAo8Tri;pe3RghI@TwY|nR^}a9r}4^cRXCiC(lOw?0W_pOa5Sj z@9?XsI?r=I1aT`%Z5)lxN@rT!$`!1$M$KDYLC?0ltzV0s1DZuot!s~W`}qw8)iRFB zivwLuynC)vp5x)I_WW`RaIAq@+$7x%P)GUpN=l3sw3JiJ6|DS{WLuO$tDd`HG^Z5= zD5%ioyLMryULBJ|P(+I6;%mlQTa?~F7cjGUqXOz}`@yoLL&~JjF337OexG|B(V)F(1qpfQ3_O^gALgZ)G{Zz8&lduwpm7Wh_3(ZQl;C~f&A7T7`xubqN5ePn1QWl|@wu$QPO zKbHFc_<{YnMWc7wXdXPJ%^heWiomlyD@~?_D|RB_j&!h&NG*~V(Vi&d-L zu>#_ox7w;%u1t?8(@}j)-@wz!z8v|tu8zs8H$yRdqG0K{4x>BrT9IUJhK<_}Z=NM5N~?Mhex=tC89uG@CsrLSlczF?Ri^UlIg?kT>X9qz?R=)|SB2h}cJe^_ zR)NHLKsuo4q%!i$T&L5f8r_jk{_So*?o#LY9V^T8u60X&L&*}PR-;3Tv@$gk9vO11onYaB;N$7{WR`La1onz8Y%}k^(1~FakfTGAbb$u8^ZN_K1u=+W^$ij!? z>`pXhWhATz+W8tZuAX%3ik1S}pvtxysK#5qVv%VYGPYoGg2^c;1HFHl#$69B;?-}C zcwl#^Jr=hbw9Bb8mLegiOwB5)ms2lF;Gs9?AB*VV!LI=TxG;sQW4&3|l^wtD{hIfS zp)1mSxG-fMFd}*6Y&oj~Skk89qEq>-RtKho=vwEkqtuWx&ZHGm?hbMt^^4xH&N*t$Np+?lMYXSqQRLvMcCtN@L1gCpu4IjC3LO%i2J_ZpN?7u!&HqR~kTL z=iq6LFIRMe4u6FQWV>xpbz}i_HbGg0yRgcs!ZyvM{}5YmE@`7pCQp%w^JSa10OmUD$Db@-Fb!Bi($Oyc!>)A;2He$NXP+t3JS-TJB}&6A!L zi{8xZAf)Y;k7Z2hSX=7HJMSOH55Gm1^ZOAe zwa1z(=<-x3owF{|)R6#P^PCH9KHC}~GyTTx%edn#-=x;=nhsYnQGA(_`&B2^ zHg}G()8IBij15H_^!7u103cY=C%3S zKc|pQQ7e;;sqGSsm}oN#H2bHFt5P%TFzas4byX)n|AO{V|7EJVNmqP48cexejFVYLZ1=L**2YA6sUojZ+E7erN57=FzS@}q(#@v@9W<9i863V7R$tj1RXH`d%g!Ea z5g$9#j~}>Y9v?lkh*M+sSd#Q#JV+6zn)2>&xjOXKAWn7XNp;k18Qq66k{65 zeDzTSD>eXahMCA7SHr%!t1`EvH`=J0j$?-E$F_{ylOO)g`DMI*HsUwoG#32gi)yKY zPby(M=6Qidefrn%oAS;J0e2ddtX}x^a|Wp^$3)rz+@Le0^pwsg4=x`I+{y zkR(C1$ZJsjpT>IG5lcS66|GJ!G;8sx__@hA{;xMj{L+U8aePCo|6t#nN}HYsh>@m`#l4g1!e{07kHwCFa?J9m@Gq%S%O z^V}&~$hQ)Dsl6ixh8vsB*`30PxV5+z$o{6B0|%@PyN>J^ugXy3OqgM(UW-kHEl2G*27-qHQKO2>>01Slt^ll-*pv=-z*!yi zrVi%XgTS`$!AVOf$q$Y}|2v#D%8wKpQRv;Oo7k^mYb-BGwSu(=1P> z^Na>v+x%pd*lx78%UXi%)CcD#J?3L1-se8h!_AzNWUuK}lMXzGiWW;cODG-kHZ67eieWaXMm6@dfpDATDi-qSNvOk?6@YBs&Sy;bkZBk_%L4thN9A{wV(8Tl?|DZ|=u^ zJBv6z-t*NVKZN1nQXu77ielawNWA%fB$Eo@wlyJ9l$1>4p}h!AjB!7@BugNqMC#1L zI(DcIJ7*5i2eBCZ4q7ZvCI?uNC57pBp$!d@P-F;KpFpOyfa^+`E9q_d@4PO0{@s4W zKbGHa)0Tk;?C1?$=4<}>gq>M(bY;I7^{Q}oN1xc ztf9$6)J&$SN1&_&t;-Z9PefUw={uio@)dplVDlCQ%|F;(#;?uzTu<8w_D|^WB{M{6 zwKR(^&&>+<9E;U3@WXf%J6BK1Ja(yz!6OD$t=uXp4IZKOQVnsIr8xpQDX%Qh1vg7_ zf2T6<4>aUrZfiQZpyljey?q&f^LKjj_D>IEdw3Azkv8(Ws^n*K>Qy4HWPrztOZ3q> z`;<1a0p~N=+`3--!o#d4kWz)RJ@7N8s>E@5S=kXD37k*-Y9{=KC7Y;#G*Yx0<@nm z#v@CS%X?qS*$)VpdTEZkVD?2|aLqN3U-^Bi28x18J`$8>J5UY5f{SS&2vlZKb%svZ zYVrgZY=w-bcD{Rd|G8!S{_WHF=>3bhV!I#Lp2+9R*>Bl3aylPezvo^#{EQaUz5)aR zABy9u_Xs(q=shjsn6l3m@@*2gPvfMvi9GM5YhZD-siG`uQc99&(K=ep0dDK&F?D2) zGFs6~Oh1aPK;b`TM!jj=A>2`3d3RzB4zaRxwK~Ogl)l=j&A{fY#dq{@ z*&PoL;&(qWh+9whiMDko90_PLTzHYXN zpPvrmgPNV0sr?|N8bv;XHI?NzrqjR4hgmyL|9AoLl43H2TA4K~IFqGasFGEdx)%>B zq`G(rTBcQUh6cjNAJ^LX1`a=13K*n!Kf!wyy(&ghNP^+MNm#{04+KiuL0NA^e`Th8LOnwkFdG~)ep&CEK1 z2qypQMtz}1TA9uA8!+-|QSSn1Z1at1@{Q#JbIOr4U&#?RN`MYuSS2fvdsH*kBZE}A zjaGdn51TIN$QjDu8ahR*yrh$-FpH{vWomD}ZBqi4n z4OCTG#s-jiG3$8Oq<&pkPU8>fTIME;_?2ltZqsZ%m0iPuY?VAGqU}JL^`Q;EGtQGH zFDdsMqib2Ib4hrF;-jGVyc=)wkbd?+-RjK_SS6a}A1T*kgVsk60ikU2B!2DVXL+I7nEseqLH_l*|u{QgE< z=6kpQd+eC>{4aOV5shweu@AE`VBzR7N zbmy!WADk$acwtYZq zs->7;J-$b?(I095cAHk#PpbZD1pvQ??k6j|vr;``s*|*tgM+Dn`-CsZ5IGXAuLMe< zYuW!^coad^8q}KjS(tTHm2S(XCB&fR=y<>>$Q0-(u~|BF29=Z*j~HRA3oGLViy=Do z1=L8PS`LTy^5?FfEB$|Idl=Vp^{D{xf+ewh3ZN{B*ozIq`nwG*n0wN3Rw=hDJ}v2c zRdBavqfd*+_YL`JxE>!+N*|$~A)yROQUZLTQtT_UoeL~eEN-SBff$@P4LE-(NM(m* hlAmyC4TmA({|CK`K@#oC*oXiC002ovPDHLkV1g~#z2X1> literal 0 HcmV?d00001 diff --git a/libs/Sortable.min.js b/libs/Sortable.min.js new file mode 100644 index 0000000..bb99533 --- /dev/null +++ b/libs/Sortable.min.js @@ -0,0 +1,2 @@ +/*! Sortable 1.15.2 - MIT | git://github.com/SortableJS/Sortable.git */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function e(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function I(o){for(var t=1;tt.length)&&(e=t.length);for(var n=0,o=new Array(e);n"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&p(t,e)||o&&t===n)return t}while(t!==n&&(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode))}var i;return null}var g,m=/\s+/g;function k(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(m," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(m," ")))}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function b(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[K]._onDragOver(o)}}var i,r,a}function Bt(t){V&&V.parentNode[K]._isOutsideThisEl(t.target)}function Ft(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[K]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Pt(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Ft.supportPointer&&"PointerEvent"in window&&!u,emptyInsertThreshold:5};for(n in W.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in kt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&Nt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),Dt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,x())}function jt(t,e,n,o,i,r,a,l){var s,c,u=t[K],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function Ht(t){t.draggable=!1}function Lt(){Tt=!1}function Kt(t){return setTimeout(t,0)}function Wt(t){return clearTimeout(t)}Ft.prototype={constructor:Ft,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(mt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,V):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){xt.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&xt.push(o)}}(o),!V&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=P(l,t.draggable,o,!1))&&l.animated||tt===l)){if(ot=j(l),rt=j(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return q({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),G("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return q({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),G("filter",n,{evt:e}),!0}))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!V&&n.parentNode===r&&(o=X(n),Q=r,Z=(V=n).parentNode,J=V.nextSibling,tt=n,lt=a.group,ct={target:Ft.dragged=V,clientX:(e||t).clientX,clientY:(e||t).clientY},ft=ct.clientX-o.left,pt=ct.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,V.style["will-change"]="all",o=function(){G("delayEnded",i,{evt:t}),Ft.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(V.draggable=!0),i._triggerDragStart(t,e),q({sortable:i,name:"choose",originalEvent:t}),k(V,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){b(V,t.trim(),Ht)}),h(l,"dragover",Yt),h(l,"mousemove",Yt),h(l,"touchmove",Yt),h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,V.draggable=!0),G("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():Ft.eventCanceled?this._onDrop():(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){V&&Ht(V),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._disableDelayedDrag),f(t,"touchend",this._disableDelayedDrag),f(t,"touchcancel",this._disableDelayedDrag),f(t,"mousemove",this._delayedDragTouchMoveHandler),f(t,"touchmove",this._delayedDragTouchMoveHandler),f(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(V,"dragend",this),h(Q,"dragstart",this._onDragStart));try{document.selection?Kt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;wt=!1,Q&&V?(G("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Bt),n=this.options,t||k(V,n.dragClass,!1),k(V,n.ghostClass,!0),Ft.active=this,t&&this._appendGhost(),q({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(ut){this._lastX=ut.clientX,this._lastY=ut.clientY,Rt();for(var t=document.elementFromPoint(ut.clientX,ut.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(ut.clientX,ut.clientY))!==e;)e=t;if(V.parentNode[K]._isOutsideThisEl(t),e)do{if(e[K])if(e[K]._onDragOver({clientX:ut.clientX,clientY:ut.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=(t=e).parentNode);Xt()}},_onTouchMove:function(t){if(ct){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=$&&v($,!0),a=$&&r&&r.a,l=$&&r&&r.d,e=Mt&&yt&&E(yt),a=(i.clientX-ct.clientX+o.x)/(a||1)+(e?e[0]-Ct[0]:0)/(a||1),l=(i.clientY-ct.clientY+o.y)/(l||1)+(e?e[1]-Ct[1]:0)/(l||1);if(!Ft.active&&!wt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))D.right+10||S.clientY>x.bottom&&S.clientX>x.left:S.clientY>D.bottom+10||S.clientX>x.right&&S.clientY>x.top)||m.animated)){if(m&&(t=n,e=r,C=X(B((_=this).el,0,_.options,!0)),_=L(_.el,_.options,$),e?t.clientX<_.left-10||t.clientYt.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.2"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?n(i.trim()):null}return e},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"

    "},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=".dropdown-toggle",zs=`:not(${Bs})`,Rs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',qs=`.nav-link${zs}, .list-group-item${zs}, [role="tab"]${zs}, ${Rs}`,Vs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Ks extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Ks.getOrCreateInstance(i).show())}_getChildren(){return z.find(qs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(Bs,Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(qs)?t:z.findOne(qs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Ks.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,Rs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Ks.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(Vs))Ks.getOrCreateInstance(t)})),m(Ks);const Qs=".bs.toast",Xs=`mouseover${Qs}`,Ys=`mouseout${Qs}`,Us=`focusin${Qs}`,Gs=`focusout${Qs}`,Js=`hide${Qs}`,Zs=`hidden${Qs}`,to=`show${Qs}`,eo=`shown${Qs}`,io="hide",no="show",so="showing",oo={animation:"boolean",autohide:"boolean",delay:"number"},ro={animation:!0,autohide:!0,delay:5e3};class ao extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ro}static get DefaultType(){return oo}static get NAME(){return"toast"}show(){N.trigger(this._element,to).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(io),d(this._element),this._element.classList.add(no,so),this._queueCallback((()=>{this._element.classList.remove(so),N.trigger(this._element,eo),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Js).defaultPrevented||(this._element.classList.add(so),this._queueCallback((()=>{this._element.classList.add(io),this._element.classList.remove(so,no),N.trigger(this._element,Zs)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(no),super.dispose()}isShown(){return this._element.classList.contains(no)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Xs,(t=>this._onInteraction(t,!0))),N.on(this._element,Ys,(t=>this._onInteraction(t,!1))),N.on(this._element,Us,(t=>this._onInteraction(t,!0))),N.on(this._element,Gs,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ao.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ao),m(ao),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Ks,Toast:ao,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/libs/bootstrap.min.css b/libs/bootstrap.min.css new file mode 100644 index 0000000..8562e9a --- /dev/null +++ b/libs/bootstrap.min.css @@ -0,0 +1,6 @@ +@charset "UTF-8";/*! + * Bootstrap v5.3.2 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#a7b9b1;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#c6c7c8;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;-webkit-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown),.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:not(:-moz-placeholder-shown)~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control-plaintext~label::after,.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.form-floating>.form-control:disabled~label::after,.form-floating>:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:0 0 0 #000;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color:#86b7fe;--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-underline-offset:0.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10{--bs-link-opacity:0.1}.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25{--bs-link-opacity:0.25}.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50{--bs-link-opacity:0.5}.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75{--bs-link-opacity:0.75}.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100{--bs-link-opacity:1}.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1{text-underline-offset:0.125em!important}.link-offset-1-hover:hover{text-underline-offset:0.125em!important}.link-offset-2{text-underline-offset:0.25em!important}.link-offset-2-hover:hover{text-underline-offset:0.25em!important}.link-offset-3{text-underline-offset:0.375em!important}.link-offset-3-hover:hover{text-underline-offset:0.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0{--bs-link-underline-opacity:0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10{--bs-link-underline-opacity:0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25{--bs-link-underline-opacity:0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50{--bs-link-underline-opacity:0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75{--bs-link-underline-opacity:0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100{--bs-link-underline-opacity:1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/libs/controls.css b/libs/controls.css new file mode 100644 index 0000000..9202501 --- /dev/null +++ b/libs/controls.css @@ -0,0 +1,54 @@ +/*! @license + * Shaka Player + * Copyright 2016 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +.shaka-hidden{display:none!important}.shaka-video-container{position:relative;top:0;left:0;display:flex}.shaka-video-container .material-icons-round{font-family:"Material Icons Round";font-size:24px}.shaka-video-container *{font-family:Roboto-Regular,Roboto,sans-serif,TengwarTelcontar;-webkit-font-smoothing:antialiased}.shaka-video-container:fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-webkit-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-webkit-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-moz-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-moz-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-ms-fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:-ms-fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-controls-container{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;z-index:1}.shaka-video-container:not([shaka-controls=true]) .shaka-controls-container{display:none}.shaka-controls-container *{flex-shrink:0}.shaka-controls-container[casting=true] .shaka-fullscreen-button{display:none}.shaka-canvas-container{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;pointer-events:none}.shaka-bottom-controls{width:96%;padding:0;padding-bottom:2.5%;z-index:1}.shaka-controls-button-panel{padding:0;margin:0;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;overflow:hidden;min-width:48px;font-size:12px;font-weight:400;font-style:normal;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s}.shaka-controls-container[casting=true] .shaka-controls-button-panel,.shaka-controls-container[shown=true] .shaka-controls-button-panel{opacity:1}.shaka-controls-button-panel>*{color:#fff;height:32px;line-height:.5;margin:1px;padding:0 5px;background:0 0;border:0;cursor:pointer}.shaka-controls-button-panel .shaka-overflow-menu-only{display:none}.shaka-play-button-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center}.shaka-statistics-container{overflow-x:hidden;overflow-y:auto;min-width:300px;color:#fff;background-color:rgba(35 35 35 / 90%);font-size:14px;padding:5px 10px;border-radius:2px;position:absolute;z-index:2;left:15px;top:15px;opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s}.shaka-controls-container[casting=true] .shaka-statistics-container,.shaka-controls-container[shown=true] .shaka-statistics-container{opacity:1}.shaka-statistics-container div{display:flex;justify-content:space-between}.shaka-statistics-container span{color:#969696}.shaka-context-menu{background-color:rgba(35 35 35 / 90%);border-radius:2px;position:absolute;z-index:3}.shaka-context-menu button{padding:5px 10px;width:100%;display:flex;align-items:center;color:#fff;background:0 0;border:0;cursor:pointer}.shaka-context-menu button:hover{background-color:rgba(50 50 50 / 90%)}.shaka-context-menu label{padding:0 20px;align-items:flex-start;color:#fff;cursor:pointer}.shaka-context-menu .shaka-current-selection-span{align-items:flex-start;color:#fff;cursor:pointer}.shaka-scrim-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s;background:linear-gradient(to top,#000 0,transparent 15%)}.shaka-controls-container[casting=true] .shaka-scrim-container,.shaka-controls-container[shown=true] .shaka-scrim-container{opacity:1}.shaka-text-container{position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;bottom:0;width:100%;min-width:48px;transition:bottom cubic-bezier(.4, 0, .6, 1) .1s;transition-delay:0.5s;font-size:20px;line-height:1.4;color:#fff}.shaka-text-container span.shaka-text-wrapper{display:inline;background:0 0}.shaka-controls-container[shown=true]~.shaka-text-container{bottom:15%;transition-delay:0s}.shaka-spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%;flex-shrink:1;display:flex;justify-content:center;align-items:center}.shaka-video-container:not([shaka-controls=true]) .shaka-spinner-container{display:none}.shaka-spinner{position:relative;top:0;left:0;margin:0;box-sizing:border-box;padding:calc(15.6% / 2);width:0;height:0;filter:drop-shadow(0 0 2px rgba(255 255 255 / 50%))}.shaka-hidden-fast-forward-container,.shaka-hidden-rewind-container{height:100%;width:40%;flex-shrink:1}.shaka-hidden-fast-forward-container{position:absolute;left:0;right:0;top:0;bottom:0;left:60%}.shaka-hidden-rewind-container{position:absolute;left:0;right:0;top:0;bottom:0}.shaka-play-button{box-sizing:border-box;padding:calc(15% / 2);width:0;height:0;margin:0;border-radius:50%;box-shadow:rgba(0 0 0 / 10%) 0 0 20px 0;border:none;background-size:50%;background-repeat:no-repeat;background-position:center center;background-color:rgba(255 255 255 / 90%);opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s}.shaka-controls-container[casting=true] .shaka-play-button,.shaka-controls-container[shown=true] .shaka-play-button{opacity:1}.shaka-play-button[icon=play]{background-image:url("data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M8%205v14l11-7z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E")}.shaka-play-button[icon=pause]{background-image:url("data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M6%2019h4V5H6v14zm8-14v14h4V5h-4z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E")}.shaka-current-time{font-size:14px;color:#fff;cursor:pointer}.shaka-current-time[disabled]{background-color:transparent;color:#fff;cursor:default}.shaka-controls-container button:focus,.shaka-controls-container input:focus{outline:1px solid Highlight}.shaka-controls-container button:-moz-focus-inner,.shaka-controls-container input:-moz-focus-outer{outline:0;border:0}.shaka-controls-container:not(.shaka-keyboard-navigation) button:focus,.shaka-controls-container:not(.shaka-keyboard-navigation) input:focus{outline:0}.shaka-fast-foward-container,.shaka-rewind-container{height:100%;width:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;flex-direction:row;justify-content:center;align-items:center;margin:0;border:none;color:#fff;background-color:rgba(0,0,0,.5);cursor:default;font-size:20px;opacity:0;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.shaka-fast-foward-container{border-radius:40% 0 0 40%}.shaka-rewind-container{border-radius:0 40% 40% 0}.shaka-forward-rewind-container-icon{font-family:"Material Icons Round";font-size:34px}.shaka-range-container{position:relative;top:0;left:0;margin:calc((12px - 4px)/ 2) 6px;height:4px;border-radius:4px;background:#fff}.shaka-volume-bar-container{width:100px;padding:0}.shaka-range-element{-webkit-appearance:none;background:0 0;position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;height:12px;top:calc((4px - 12px)/ 2);z-index:1}.shaka-range-element::-webkit-slider-runnable-track{width:100%;cursor:pointer;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-webkit-slider-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-moz-range-track{width:100%;cursor:pointer;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-moz-range-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-seek-bar-container{opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s}.shaka-controls-container[casting=true] .shaka-seek-bar-container,.shaka-controls-container[shown=true] .shaka-seek-bar-container{opacity:1}.shaka-ad-markers{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%}/*! + * @license + * The SVG/CSS buffering spinner is based on http://codepen.io/jczimm/pen/vEBpoL + * Some local modifications have been made. + * + * Copyright (c) 2016 by jczimm + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */.shaka-spinner-svg{position:absolute;top:0;left:0;right:0;bottom:0;animation:rotate 2s linear infinite;transform-origin:center center;width:100%;height:100%;margin:0;padding:0}.shaka-spinner-path{stroke:#202124;stroke-dasharray:20,200;stroke-dashoffset:0;animation:dash 1s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}.shaka-spacer{cursor:default;flex-shrink:1;flex-grow:1;margin:0}.shaka-overflow-menu,.shaka-settings-menu{overflow-x:hidden;overflow-y:auto;white-space:nowrap;background:#fff;box-shadow:0 1px 9px 0 rgba(0 0 0 / 40%);border-radius:2px;max-height:250px;min-width:180px;opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s;display:flex;flex-direction:column;position:absolute;z-index:2;right:15px;bottom:30px}.shaka-controls-container[casting=true] .shaka-overflow-menu,.shaka-controls-container[casting=true] .shaka-settings-menu,.shaka-controls-container[shown=true] .shaka-overflow-menu,.shaka-controls-container[shown=true] .shaka-settings-menu{opacity:1}.shaka-overflow-menu button,.shaka-settings-menu button{font-size:14px;background:0 0;color:#000;border:none;min-height:30px;padding:3.5px 6px;display:flex;align-items:center;cursor:pointer}.shaka-overflow-menu button:hover,.shaka-settings-menu button:hover{background:#e0e0e0}.shaka-overflow-menu button label,.shaka-settings-menu button label{cursor:pointer}.shaka-keyboard-navigation .shaka-overflow-menu button:focus,.shaka-keyboard-navigation .shaka-settings-menu button:focus{background:#e0e0e0}.shaka-overflow-menu i,.shaka-settings-menu i{padding-left:10px;padding-right:10px}.shaka-overflow-menu.shaka-low-position,.shaka-settings-menu.shaka-low-position{bottom:15px}.shaka-overflow-menu span{text-align:left}.shaka-overflow-button-label{position:relative;display:flex;flex-direction:column}.shaka-current-selection-span{color:rgba(0 0 0 / 54%)}.shaka-settings-menu span{margin-left:54px}.shaka-back-to-overflow-button span{margin-left:0}.shaka-back-to-overflow-button i{padding-right:20px}.shaka-auto-span{left:17px}.shaka-controls-container[ad-active=true]{pointer-events:none}.shaka-controls-container[ad-active=true] .shaka-bottom-controls{pointer-events:auto}.shaka-client-side-ad-container,.shaka-server-side-ad-container{position:absolute;left:0;right:0;top:0;bottom:0}.shaka-video-container[shaka-controls=true] .shaka-client-side-ad-container iframe,.shaka-video-container[shaka-controls=true] .shaka-server-side-ad-container iframe{height:90%}.shaka-server-side-ad-container{width:100%;height:100%;flex-shrink:1}.shaka-server-side-ad-container:not([ad-active=true]){pointer-events:none}.shaka-ad-controls{display:flex;flex-direction:row;z-index:1;padding-bottom:1%}.shaka-video-container:not([shaka-controls=true]) .shaka-ad-controls{display:none}.shaka-ad-controls button,.shaka-ad-controls div{color:#fff;font-size:initial}.shaka-ad-controls div:not(.shaka-skip-ad-counter){margin:1px}.shaka-ad-counter,.shaka-ad-position{display:flex;justify-content:flex-end;flex-direction:column;text-shadow:1px 1px 4px #000}.shaka-ad-controls .shaka-ad-position:not(.shaka-hidden)+.shaka-ad-counter{margin-left:.75em}.shaka-skip-ad-container{position:relative;right:calc((100% - 96%)/ 2 * -1);display:flex;flex-direction:row;margin:0}.shaka-skip-ad-button{padding:5px 15px;background:rgba(0 0 0 / 70%);border:none;cursor:pointer}.shaka-skip-ad-button:disabled{background:rgba(0 0 0 / 30%)}.shaka-skip-ad-counter{padding:5px;background:rgba(0 0 0 / 70%);margin:0}/*! + * @license + * The tooltip is based on https://github.com/felipefialho/css-components/ + * Local modifications have been performed. + * + * Copyright (c) 2017 Felipe Fialho + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */.shaka-tooltips-on{overflow:visible}.shaka-tooltips-on>[class*=shaka-tooltip]{position:relative}.shaka-tooltips-on>[class*=shaka-tooltip]:active:after,.shaka-tooltips-on>[class*=shaka-tooltip]:focus-visible:after,.shaka-tooltips-on>[class*=shaka-tooltip]:hover:after{content:attr(aria-label);font-family:Roboto-Regular,Roboto,sans-serif;line-height:calc(32px / 2);white-space:nowrap;font-size:13px;background:rgba(35 35 35 / 90%);color:#fff;border-radius:3px;padding:5px 10px;position:absolute;bottom:calc(32px + 5px);left:calc(32px / 2);-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%)}.shaka-tooltips-on>.shaka-tooltip-status:active:after,.shaka-tooltips-on>.shaka-tooltip-status:focus-visible:after,.shaka-tooltips-on>.shaka-tooltip-status:hover:after{content:attr(aria-label) " (" attr(shaka-status) ")"}.shaka-tooltips-on button:first-child:active:after,.shaka-tooltips-on button:first-child:focus-visible:after,.shaka-tooltips-on button:first-child:hover:after{left:0;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}.shaka-tooltips-on button:last-child:active:after,.shaka-tooltips-on button:last-child:focus-visible:after,.shaka-tooltips-on button:last-child:hover:after{left:32px;-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);-ms-transform:translateX(-100%);-o-transform:translateX(-100%);transform:translateX(-100%)}#shaka-player-ui-thumbnail-container{background-color:#000;border:1px solid #000;box-shadow:0 8px 8px 0 rgba(0,0,0,.5);min-width:150px;overflow:hidden;position:absolute;visibility:hidden;width:15%;z-index:1}#shaka-player-ui-thumbnail-container #shaka-player-ui-thumbnail-image{position:absolute}#shaka-player-ui-thumbnail-container #shaka-player-ui-thumbnail-time{background-color:rgba(0,0,0,.5);bottom:0;color:#fff;font-size:16px;left:0;position:absolute;right:0;text-align:center}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype')}@font-face{font-family:'Material Icons Round';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialiconsround/v108/LDItaoyNOAY6Uewc665JcIzCKsKc_M9flwmM.otf) format('opentype')}.material-icons-round{font-family:'Material Icons Round';font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr}/*# sourceMappingURL=controls.css.map */ \ No newline at end of file diff --git a/libs/fontawesome/css/all.min.css b/libs/fontawesome/css/all.min.css new file mode 100644 index 0000000..cd555f1 --- /dev/null +++ b/libs/fontawesome/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/libs/jquery-3.7.0.min.js b/libs/jquery-3.7.0.min.js new file mode 100644 index 0000000..0f24b5b --- /dev/null +++ b/libs/jquery-3.7.0.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.0",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},R=function(){V()},M=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&z(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function X(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&M(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function U(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function z(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",R),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Me(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return R(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return R(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 .particles-js-canvas-el");this.pJS={canvas:{el:t,w:t.offsetWidth,h:t.offsetHeight},particles:{number:{value:400,density:{enable:!0,value_area:800}},color:{value:"#fff"},shape:{type:"circle",stroke:{width:0,color:"#ff0000"},polygon:{nb_sides:5},image:{src:"",width:100,height:100}},opacity:{value:1,random:!1,anim:{enable:!1,speed:2,opacity_min:0,sync:!1}},size:{value:20,random:!1,anim:{enable:!1,speed:20,size_min:0,sync:!1}},line_linked:{enable:!0,distance:100,color:"#fff",opacity:1,width:1},move:{enable:!0,speed:2,direction:"none",random:!1,straight:!1,out_mode:"out",bounce:!1,attract:{enable:!1,rotateX:3e3,rotateY:3e3}},array:[]},interactivity:{detect_on:"canvas",events:{onhover:{enable:!0,mode:"grab"},onclick:{enable:!0,mode:"push"},resize:!0},modes:{grab:{distance:100,line_linked:{opacity:1}},bubble:{distance:200,size:80,duration:.4},repulse:{distance:200,duration:.4},push:{particles_nb:4},remove:{particles_nb:2}},mouse:{}},retina_detect:!1,fn:{interact:{},modes:{},vendors:{}},tmp:{}};var i=this.pJS;a&&Object.deepExtend(i,a),i.tmp.obj={size_value:i.particles.size.value,size_anim_speed:i.particles.size.anim.speed,move_speed:i.particles.move.speed,line_linked_distance:i.particles.line_linked.distance,line_linked_width:i.particles.line_linked.width,mode_grab_distance:i.interactivity.modes.grab.distance,mode_bubble_distance:i.interactivity.modes.bubble.distance,mode_bubble_size:i.interactivity.modes.bubble.size,mode_repulse_distance:i.interactivity.modes.repulse.distance},i.fn.retinaInit=function(){i.retina_detect&&window.devicePixelRatio>1?(i.canvas.pxratio=window.devicePixelRatio,i.tmp.retina=!0):(i.canvas.pxratio=1,i.tmp.retina=!1),i.canvas.w=i.canvas.el.offsetWidth*i.canvas.pxratio,i.canvas.h=i.canvas.el.offsetHeight*i.canvas.pxratio,i.particles.size.value=i.tmp.obj.size_value*i.canvas.pxratio,i.particles.size.anim.speed=i.tmp.obj.size_anim_speed*i.canvas.pxratio,i.particles.move.speed=i.tmp.obj.move_speed*i.canvas.pxratio,i.particles.line_linked.distance=i.tmp.obj.line_linked_distance*i.canvas.pxratio,i.interactivity.modes.grab.distance=i.tmp.obj.mode_grab_distance*i.canvas.pxratio,i.interactivity.modes.bubble.distance=i.tmp.obj.mode_bubble_distance*i.canvas.pxratio,i.particles.line_linked.width=i.tmp.obj.line_linked_width*i.canvas.pxratio,i.interactivity.modes.bubble.size=i.tmp.obj.mode_bubble_size*i.canvas.pxratio,i.interactivity.modes.repulse.distance=i.tmp.obj.mode_repulse_distance*i.canvas.pxratio},i.fn.canvasInit=function(){i.canvas.ctx=i.canvas.el.getContext("2d")},i.fn.canvasSize=function(){i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i&&i.interactivity.events.resize&&window.addEventListener("resize",(function(){i.canvas.w=i.canvas.el.offsetWidth,i.canvas.h=i.canvas.el.offsetHeight,i.tmp.retina&&(i.canvas.w*=i.canvas.pxratio,i.canvas.h*=i.canvas.pxratio),i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i.particles.move.enable||(i.fn.particlesEmpty(),i.fn.particlesCreate(),i.fn.particlesDraw(),i.fn.vendors.densityAutoParticles()),i.fn.vendors.densityAutoParticles()}))},i.fn.canvasPaint=function(){i.canvas.ctx.fillRect(0,0,i.canvas.w,i.canvas.h)},i.fn.canvasClear=function(){i.canvas.ctx.clearRect(0,0,i.canvas.w,i.canvas.h)},i.fn.particle=function(e,a,t){if(this.radius=(i.particles.size.random?Math.random():1)*i.particles.size.value,i.particles.size.anim.enable&&(this.size_status=!1,this.vs=i.particles.size.anim.speed/100,i.particles.size.anim.sync||(this.vs=this.vs*Math.random())),this.x=t?t.x:Math.random()*i.canvas.w,this.y=t?t.y:Math.random()*i.canvas.h,this.x>i.canvas.w-2*this.radius?this.x=this.x-this.radius:this.x<2*this.radius&&(this.x=this.x+this.radius),this.y>i.canvas.h-2*this.radius?this.y=this.y-this.radius:this.y<2*this.radius&&(this.y=this.y+this.radius),i.particles.move.bounce&&i.fn.vendors.checkOverlap(this,t),this.color={},"object"==typeof e.value)if(e.value instanceof Array){var n=e.value[Math.floor(Math.random()*i.particles.color.value.length)];this.color.rgb=hexToRgb(n)}else null!=e.value.r&&null!=e.value.g&&null!=e.value.b&&(this.color.rgb={r:e.value.r,g:e.value.g,b:e.value.b}),null!=e.value.h&&null!=e.value.s&&null!=e.value.l&&(this.color.hsl={h:e.value.h,s:e.value.s,l:e.value.l});else"random"==e.value?this.color.rgb={r:Math.floor(256*Math.random())+0,g:Math.floor(256*Math.random())+0,b:Math.floor(256*Math.random())+0}:"string"==typeof e.value&&(this.color=e,this.color.rgb=hexToRgb(this.color.value));this.opacity=(i.particles.opacity.random?Math.random():1)*i.particles.opacity.value,i.particles.opacity.anim.enable&&(this.opacity_status=!1,this.vo=i.particles.opacity.anim.speed/100,i.particles.opacity.anim.sync||(this.vo=this.vo*Math.random()));var s={};switch(i.particles.move.direction){case"top":s={x:0,y:-1};break;case"top-right":s={x:.5,y:-.5};break;case"right":s={x:1,y:-0};break;case"bottom-right":s={x:.5,y:.5};break;case"bottom":s={x:0,y:1};break;case"bottom-left":s={x:-.5,y:1};break;case"left":s={x:-1,y:0};break;case"top-left":s={x:-.5,y:-.5};break;default:s={x:0,y:0}}i.particles.move.straight?(this.vx=s.x,this.vy=s.y,i.particles.move.random&&(this.vx=this.vx*Math.random(),this.vy=this.vy*Math.random())):(this.vx=s.x+Math.random()-.5,this.vy=s.y+Math.random()-.5),this.vx_i=this.vx,this.vy_i=this.vy;var r=i.particles.shape.type;if("object"==typeof r){if(r instanceof Array){var c=r[Math.floor(Math.random()*r.length)];this.shape=c}}else this.shape=r;if("image"==this.shape){var o=i.particles.shape;this.img={src:o.image.src,ratio:o.image.width/o.image.height},this.img.ratio||(this.img.ratio=1),"svg"==i.tmp.img_type&&null!=i.tmp.source_svg&&(i.fn.vendors.createSvgImg(this),i.tmp.pushing&&(this.img.loaded=!1))}},i.fn.particle.prototype.draw=function(){var e=this;if(null!=e.radius_bubble)var a=e.radius_bubble;else a=e.radius;if(null!=e.opacity_bubble)var t=e.opacity_bubble;else t=e.opacity;if(e.color.rgb)var n="rgba("+e.color.rgb.r+","+e.color.rgb.g+","+e.color.rgb.b+","+t+")";else n="hsla("+e.color.hsl.h+","+e.color.hsl.s+"%,"+e.color.hsl.l+"%,"+t+")";switch(i.canvas.ctx.fillStyle=n,i.canvas.ctx.beginPath(),e.shape){case"circle":i.canvas.ctx.arc(e.x,e.y,a,0,2*Math.PI,!1);break;case"edge":i.canvas.ctx.rect(e.x-a,e.y-a,2*a,2*a);break;case"triangle":i.fn.vendors.drawShape(i.canvas.ctx,e.x-a,e.y+a/1.66,2*a,3,2);break;case"polygon":i.fn.vendors.drawShape(i.canvas.ctx,e.x-a/(i.particles.shape.polygon.nb_sides/3.5),e.y-a/.76,2.66*a/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,1);break;case"star":i.fn.vendors.drawShape(i.canvas.ctx,e.x-2*a/(i.particles.shape.polygon.nb_sides/4),e.y-a/1.52,2*a*2.66/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,2);break;case"image":if("svg"==i.tmp.img_type)var s=e.img.obj;else s=i.tmp.img_obj;s&&i.canvas.ctx.drawImage(s,e.x-a,e.y-a,2*a,2*a/e.img.ratio)}i.canvas.ctx.closePath(),i.particles.shape.stroke.width>0&&(i.canvas.ctx.strokeStyle=i.particles.shape.stroke.color,i.canvas.ctx.lineWidth=i.particles.shape.stroke.width,i.canvas.ctx.stroke()),i.canvas.ctx.fill()},i.fn.particlesCreate=function(){for(var e=0;e=i.particles.opacity.value&&(a.opacity_status=!1),a.opacity+=a.vo):(a.opacity<=i.particles.opacity.anim.opacity_min&&(a.opacity_status=!0),a.opacity-=a.vo),a.opacity<0&&(a.opacity=0)),i.particles.size.anim.enable&&(1==a.size_status?(a.radius>=i.particles.size.value&&(a.size_status=!1),a.radius+=a.vs):(a.radius<=i.particles.size.anim.size_min&&(a.size_status=!0),a.radius-=a.vs),a.radius<0&&(a.radius=0)),"bounce"==i.particles.move.out_mode)var n={x_left:a.radius,x_right:i.canvas.w,y_top:a.radius,y_bottom:i.canvas.h};else n={x_left:-a.radius,x_right:i.canvas.w+a.radius,y_top:-a.radius,y_bottom:i.canvas.h+a.radius};if(a.x-a.radius>i.canvas.w?(a.x=n.x_left,a.y=Math.random()*i.canvas.h):a.x+a.radius<0&&(a.x=n.x_right,a.y=Math.random()*i.canvas.h),a.y-a.radius>i.canvas.h?(a.y=n.y_top,a.x=Math.random()*i.canvas.w):a.y+a.radius<0&&(a.y=n.y_bottom,a.x=Math.random()*i.canvas.w),"bounce"===i.particles.move.out_mode)(a.x+a.radius>i.canvas.w||a.x-a.radius<0)&&(a.vx=-a.vx),(a.y+a.radius>i.canvas.h||a.y-a.radius<0)&&(a.vy=-a.vy);if(isInArray("grab",i.interactivity.events.onhover.mode)&&i.fn.modes.grabParticle(a),(isInArray("bubble",i.interactivity.events.onhover.mode)||isInArray("bubble",i.interactivity.events.onclick.mode))&&i.fn.modes.bubbleParticle(a),(isInArray("repulse",i.interactivity.events.onhover.mode)||isInArray("repulse",i.interactivity.events.onclick.mode))&&i.fn.modes.repulseParticle(a),i.particles.line_linked.enable||i.particles.move.attract.enable)for(var s=e+1;s0){var c=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+c.r+","+c.g+","+c.b+","+r+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(a.x,a.y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}},i.fn.interact.attractParticles=function(e,a){var t=e.x-a.x,n=e.y-a.y;if(Math.sqrt(t*t+n*n)<=i.particles.line_linked.distance){var s=t/(1e3*i.particles.move.attract.rotateX),r=n/(1e3*i.particles.move.attract.rotateY);e.vx-=s,e.vy-=r,a.vx+=s,a.vy+=r}},i.fn.interact.bounceParticles=function(e,a){var t=e.x-a.x,i=e.y-a.y;Math.sqrt(t*t+i*i)<=e.radius+a.radius&&(e.vx=-e.vx,e.vy=-e.vy,a.vx=-a.vx,a.vy=-a.vy)},i.fn.modes.pushParticles=function(e,a){i.tmp.pushing=!0;for(var t=0;t=0&&"mousemove"==i.interactivity.status){if(i.interactivity.modes.bubble.size!=i.particles.size.value)if(i.interactivity.modes.bubble.size>i.particles.size.value){(c=e.radius+i.interactivity.modes.bubble.size*n)>=0&&(e.radius_bubble=c)}else{var r=e.radius-i.interactivity.modes.bubble.size,c=e.radius-r*n;e.radius_bubble=c>0?c:0}var o;if(i.interactivity.modes.bubble.opacity!=i.particles.opacity.value)if(i.interactivity.modes.bubble.opacity>i.particles.opacity.value)(o=i.interactivity.modes.bubble.opacity*n)>e.opacity&&o<=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=o);else(o=e.opacity-(i.particles.opacity.value-i.interactivity.modes.bubble.opacity)*n)=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=o)}}else s();"mouseleave"==i.interactivity.status&&s()}else if(i.interactivity.events.onclick.enable&&isInArray("bubble",i.interactivity.events.onclick.mode)){if(i.tmp.bubble_clicking){a=e.x-i.interactivity.mouse.click_pos_x,t=e.y-i.interactivity.mouse.click_pos_y;var l=Math.sqrt(a*a+t*t),v=((new Date).getTime()-i.interactivity.mouse.click_time)/1e3;v>i.interactivity.modes.bubble.duration&&(i.tmp.bubble_duration_end=!0),v>2*i.interactivity.modes.bubble.duration&&(i.tmp.bubble_clicking=!1,i.tmp.bubble_duration_end=!1)}function p(a,t,n,s,r){if(a!=t)if(i.tmp.bubble_duration_end)null!=n&&(o=a+(a-(s-v*(s-a)/i.interactivity.modes.bubble.duration)),"size"==r&&(e.radius_bubble=o),"opacity"==r&&(e.opacity_bubble=o));else if(l<=i.interactivity.modes.bubble.distance){if(null!=n)var c=n;else c=s;if(c!=a){var o=s-v*(s-a)/i.interactivity.modes.bubble.duration;"size"==r&&(e.radius_bubble=o),"opacity"==r&&(e.opacity_bubble=o)}}else"size"==r&&(e.radius_bubble=void 0),"opacity"==r&&(e.opacity_bubble=void 0)}i.tmp.bubble_clicking&&(p(i.interactivity.modes.bubble.size,i.particles.size.value,e.radius_bubble,e.radius,"size"),p(i.interactivity.modes.bubble.opacity,i.particles.opacity.value,e.opacity_bubble,e.opacity,"opacity"))}},i.fn.modes.repulseParticle=function(e){if(i.interactivity.events.onhover.enable&&isInArray("repulse",i.interactivity.events.onhover.mode)&&"mousemove"==i.interactivity.status){var a=e.x-i.interactivity.mouse.pos_x,t=e.y-i.interactivity.mouse.pos_y,n=Math.sqrt(a*a+t*t),s={x:a/n,y:t/n},r=clamp(1/(o=i.interactivity.modes.repulse.distance)*(-1*Math.pow(n/o,2)+1)*o*100,0,50),c={x:e.x+s.x*r,y:e.y+s.y*r};"bounce"==i.particles.move.out_mode?(c.x-e.radius>0&&c.x+e.radius0&&c.y+e.radiusi.canvas.w||t.x-e.radius<0)&&(e.vx=-e.vx),(t.y+e.radius>i.canvas.h||t.y-e.radius<0)&&(e.vy=-e.vy)}}()}else 0==i.tmp.repulse_clicking&&(e.vx=e.vx_i,e.vy=e.vy_i)},i.fn.modes.grabParticle=function(e){if(i.interactivity.events.onhover.enable&&"mousemove"==i.interactivity.status){var a=e.x-i.interactivity.mouse.pos_x,t=e.y-i.interactivity.mouse.pos_y,n=Math.sqrt(a*a+t*t);if(n<=i.interactivity.modes.grab.distance){var s=i.interactivity.modes.grab.line_linked.opacity-n/(1/i.interactivity.modes.grab.line_linked.opacity)/i.interactivity.modes.grab.distance;if(s>0){var r=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+r.r+","+r.g+","+r.b+","+s+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(i.interactivity.mouse.pos_x,i.interactivity.mouse.pos_y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}}},i.fn.vendors.eventsListeners=function(){"window"==i.interactivity.detect_on?i.interactivity.el=window:i.interactivity.el=i.canvas.el,(i.interactivity.events.onhover.enable||i.interactivity.events.onclick.enable)&&(i.interactivity.el.addEventListener("mousemove",(function(e){if(i.interactivity.el==window)var a=e.clientX,t=e.clientY;else a=e.offsetX||e.clientX,t=e.offsetY||e.clientY;i.interactivity.mouse.pos_x=a,i.interactivity.mouse.pos_y=t,i.tmp.retina&&(i.interactivity.mouse.pos_x*=i.canvas.pxratio,i.interactivity.mouse.pos_y*=i.canvas.pxratio),i.interactivity.status="mousemove"})),i.interactivity.el.addEventListener("mouseleave",(function(e){i.interactivity.mouse.pos_x=null,i.interactivity.mouse.pos_y=null,i.interactivity.status="mouseleave"}))),i.interactivity.events.onclick.enable&&i.interactivity.el.addEventListener("click",(function(){if(i.interactivity.mouse.click_pos_x=i.interactivity.mouse.pos_x,i.interactivity.mouse.click_pos_y=i.interactivity.mouse.pos_y,i.interactivity.mouse.click_time=(new Date).getTime(),i.interactivity.events.onclick.enable)switch(i.interactivity.events.onclick.mode){case"push":i.particles.move.enable||1==i.interactivity.modes.push.particles_nb?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):i.interactivity.modes.push.particles_nb>1&&i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb);break;case"remove":i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb);break;case"bubble":i.tmp.bubble_clicking=!0;break;case"repulse":i.tmp.repulse_clicking=!0,i.tmp.repulse_count=0,i.tmp.repulse_finish=!1,setTimeout((function(){i.tmp.repulse_clicking=!1}),1e3*i.interactivity.modes.repulse.duration)}}))},i.fn.vendors.densityAutoParticles=function(){if(i.particles.number.density.enable){var e=i.canvas.el.width*i.canvas.el.height/1e3;i.tmp.retina&&(e/=2*i.canvas.pxratio);var a=e*i.particles.number.value/i.particles.number.density.value_area,t=i.particles.array.length-a;t<0?i.fn.modes.pushParticles(Math.abs(t)):i.fn.modes.removeParticles(t)}},i.fn.vendors.checkOverlap=function(e,a){for(var t=0;t=i.particles.number.value?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):null!=i.tmp.img_obj?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame))},i.fn.vendors.checkBeforeDraw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type&&null==i.tmp.source_svg?i.tmp.checkAnimFrame=requestAnimFrame(check):(cancelRequestAnimFrame(i.tmp.checkAnimFrame),i.tmp.img_error||(i.fn.vendors.init(),i.fn.vendors.draw())):(i.fn.vendors.init(),i.fn.vendors.draw())},i.fn.vendors.init=function(){i.fn.retinaInit(),i.fn.canvasInit(),i.fn.canvasSize(),i.fn.canvasPaint(),i.fn.particlesCreate(),i.fn.vendors.densityAutoParticles(),i.particles.line_linked.color_rgb_line=hexToRgb(i.particles.line_linked.color)},i.fn.vendors.start=function(){isInArray("image",i.particles.shape.type)?(i.tmp.img_type=i.particles.shape.image.src.substr(i.particles.shape.image.src.length-3),i.fn.vendors.loadImg(i.tmp.img_type)):i.fn.vendors.checkBeforeDraw()},i.fn.vendors.eventsListeners(),i.fn.vendors.start()};function hexToRgb(e){e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(function(e,a,t,i){return a+a+t+t+i+i}));var a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return a?{r:parseInt(a[1],16),g:parseInt(a[2],16),b:parseInt(a[3],16)}:null}function clamp(e,a,t){return Math.min(Math.max(e,a),t)}function isInArray(e,a){return a.indexOf(e)>-1}Object.deepExtend=function(e,a){for(var t in a)a[t]&&a[t].constructor&&a[t].constructor===Object?(e[t]=e[t]||{},arguments.callee(e[t],a[t])):e[t]=a[t];return e},window.requestAnimFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)},window.cancelRequestAnimFrame=window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout,window.pJSDom=[],window.particlesJS=function(e,a){"string"!=typeof e&&(a=e,e="particles-js"),e||(e="particles-js");var t=document.getElementById(e),i="particles-js-canvas-el",n=t.getElementsByClassName(i);if(n.length)for(;n.length>0;)t.removeChild(n[0]);var s=document.createElement("canvas");s.className=i,s.style.width="100%",s.style.height="100%",null!=document.getElementById(e).appendChild(s)&&pJSDom.push(new pJS(e,a))},window.particlesJS.load=function(e,a,t){var i=new XMLHttpRequest;i.open("GET",a),i.onreadystatechange=function(a){if(4==i.readyState)if(200==i.status){var n=JSON.parse(a.currentTarget.response);window.particlesJS(e,n),t&&t()}else console.log("Error pJS - XMLHttpRequest status: "+i.status),console.log("Error pJS - File config not found")},i.send()}; +//# sourceMappingURL=/sm/989ad3d344a46ad94354c16dc2512d23ddb937054ab7980adb822f74145374a7.map \ No newline at end of file diff --git a/libs/shaka-player.compiled.js b/libs/shaka-player.compiled.js new file mode 100644 index 0000000..9e84ace --- /dev/null +++ b/libs/shaka-player.compiled.js @@ -0,0 +1,1738 @@ +/* + @license + Shaka Player + Copyright 2016 Google LLC + SPDX-License-Identifier: Apache-2.0 +*/ +(function(){var innerGlobal=typeof window!="undefined"?window:global;var exportTo={};(function(window,global,module){/* + + Copyright The Closure Library Authors. + SPDX-License-Identifier: Apache-2.0 +*/ +var p;function ba(a){var b=0;return function(){return b>>0)+"_",e=0;return b}); +ha("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;cc&&(c=Math.max(c+e,0));ce||1114111=e?c+=String.fromCharCode(e):(e-=65536,c+=String.fromCharCode(e>>>10&1023|55296),c+=String.fromCharCode(e&1023|56320))}return c}}); +function Sa(a,b,c){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e=f}});ha("Object.entries",function(a){return a?a:function(b){var c=[],d;for(d in b)Pa(b,d)&&c.push([d,b[d]]);return c}}); +var Ta="function"==typeof Object.assign?Object.assign:function(a,b){for(var c=1;cb||1342177279>>=1)c+=c;return d}});ha("Number.EPSILON",function(){return Math.pow(2,-52)}); +ha("Number.MAX_SAFE_INTEGER",function(){return 9007199254740991});ha("Number.isFinite",function(a){return a?a:function(b){return"number"!==typeof b?!1:!isNaN(b)&&Infinity!==b&&-Infinity!==b}});ha("Object.values",function(a){return a?a:function(b){var c=[],d;for(d in b)Pa(b,d)&&c.push(b[d]);return c}});ha("Math.log2",function(a){return a?a:function(b){return Math.log(b)/Math.LN2}}); +ha("String.prototype.endsWith",function(a){return a?a:function(b,c){var d=Ra(this,b,"endsWith");void 0===c&&(c=d.length);c=Math.max(0,Math.min(c|0,d.length));for(var e=b.length;0=e}});ha("Math.trunc",function(a){return a?a:function(b){b=Number(b);if(isNaN(b)||Infinity===b||-Infinity===b||0===b)return b;var c=Math.floor(Math.abs(b));return 0>b?-c:c}});var Ua=this||self; +function T(a,b){a=a.split(".");var c=Ua;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c[d]&&c[d]!==Object.prototype[d]?c=c[d]:c=c[d]={}:c[d]=b};/* + @license + Shaka Player + Copyright 2016 Google LLC + SPDX-License-Identifier: Apache-2.0 +*/ +function Va(a){this.g=Math.exp(Math.log(.5)/a);this.i=this.h=0}Va.prototype.sample=function(a,b){var c=Math.pow(this.g,a);b=b*(1-c)+c*this.h;isNaN(b)||(this.h=b,this.i+=a)};function Wa(a){return a.h/(1-Math.pow(a.g,a.i))};function Xa(){this.h=new Va(2);this.j=new Va(5);this.g=0;this.i=128E3;this.l=16E3}Xa.prototype.configure=function(a){this.i=a.minTotalBytes;this.l=a.minBytes;this.h.g=Math.exp(Math.log(.5)/a.fastHalfLife);this.j.g=Math.exp(Math.log(.5)/a.slowHalfLife)};Xa.prototype.sample=function(a,b){if(!(bb)throw Error("Bad port number "+b);a.rd=b}else a.rd=null} +function Fb(a,b,c){b instanceof Hb?a.g=b:(c||(b=Ib(b,Nb)),a.g=new Hb(b))}function Gb(a,b){return a?b?decodeURI(a):decodeURIComponent(a):""}function Ib(a,b,c){return null!=a?(a=encodeURI(a).replace(b,Ob),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),a):null}function Ob(a){a=a.charCodeAt(0);return"%"+(a>>4&15).toString(16)+(a&15).toString(16)}var Jb=/[#\/\?@]/g,Lb=/[#\?:]/g,Kb=/[#\?]/g,Nb=/[#\?@]/g,Mb=/#/g;function Hb(a){this.g=a||null} +function Pb(a){if(!a.fb&&(a.fb=new Map,a.Hd=0,a.g))for(var b=a.g.split("&"),c=0;c=c+2&&192==(a[c]&224)&&128==(a[c+1]&192)?(d=(a[c]&31)<<6|a[c+1]&63,c+=1):a.length>=c+3&&224==(a[c]&240)&&128==(a[c+1]&192)&& +128==(a[c+2]&192)?(d=(a[c]&15)<<12|(a[c+1]&63)<<6|a[c+2]&63,c+=2):a.length>=c+4&&240==(a[c]&241)&&128==(a[c+1]&192)&&128==(a[c+2]&192)&&128==(a[c+3]&192)&&(d=(a[c]&7)<<18|(a[c+1]&63)<<12|(a[c+2]&63)<<6|a[c+3]&63,c+=3);if(65535>=d)b+=String.fromCharCode(d);else{d-=65536;var e=d&1023;b+=String.fromCharCode(55296+(d>>10));b+=String.fromCharCode(56320+e)}}return b} +function bc(a,b,c){if(!a)return"";if(!c&&0!=a.byteLength%2)throw new U(2,2,2004);c=Math.floor(a.byteLength/2);var d=new Uint16Array(c);a=Yb(a);for(var e=0;e=c[d]}if(!a)return"";var c=Tb(a);if(239==c[0]&&187==c[1]&&191==c[2])return ac(c);if(254==c[0]&&255==c[1])return bc(c.subarray(2),!1);if(255==c[0]&&254==c[1])return bc(c.subarray(2),!0);if(0==c[0]&&0==c[2])return bc(a,!1);if(0==c[1]&&0==c[3])return bc(a,!0);if(b(0)&&b(1)&&b(2)&&b(3))return ac(a);throw new U(2,2,2003);} +function ec(a){if(window.TextEncoder&&!qb().jh()){var b=new TextEncoder;return Ub(b.encode(a))}a=encodeURIComponent(a);a=unescape(a);b=new Uint8Array(a.length);for(var c=0;c",""":'"',"'":"'"," ":"\u00a0","‎":"\u200e","‏":"\u200f"},c=/&(?:amp|lt|gt|quot|apos|nbsp|lrm|rlm|#[xX]?[0-9a-fA-F]+);/g,d=RegExp(c.source);return a&&d.test(a)?a.replace(c,function(e){return"#"==e[1]?(e="x"==e[2]||"X"==e[2]?parseInt(e.substring(3),16):parseInt(e.substring(2),10),0<=e&&1114111>=e?String.fromCodePoint(e):""):b[e]||"'"}):a||""}T("shaka.util.StringUtils",$b);$b.resetFromCharCode=function(){gc.g=void 0}; +$b.toUTF16=fc;$b.toUTF8=ec;$b.fromBytesAutoDetect=dc;$b.fromUTF16=bc;$b.fromUTF8=ac;var gc=new pb(function(){function a(c){try{var d=new Uint8Array(c);return 0",e);g=a.substring(g,e);var k=g.indexOf(f);if(-1==k){var l=f.indexOf(".");0",e+1);-1===e&&(e=a.length)}else if(91===a.charCodeAt(e+2)&&91===a.charCodeAt(e+8)&&"cdata"===a.substr(e+3,5).toLowerCase()){k=a.indexOf("]]\x3e",e);-1==k?(h.push(a.substr(e+9)),e=a.length):(h.push(a.substring(e+9,k)),e=k+3);continue}e++;continue}a:{l=g;e++;var m=d(),n={};for(k=[];62!==a.charCodeAt(e)&&a[e];){var q=a.charCodeAt(e);if(64q||96q){q=d();for(var r=a.charCodeAt(e);r&&39!==r&&34!==r&&!(64r||96 +r)&&62!==r;)e++,r=a.charCodeAt(e);var u=e+1;e=a.indexOf(a[e],u);u=a.slice(u,e);if(39===r||34===r){if(-1===e){l={tagName:m,attributes:n,children:k,parent:null};if(b)for(m=0;m/= ".indexOf(a[e])&&a[e];)e++;return a.slice(f,e)}var e=0;return c("")} +function od(a){return"string"===typeof a}function pd(a){var b=[];if(!a.children)return[];a=t(a.children);for(var c=a.next();!c.done;c=a.next())c=c.value,"string"!==typeof c&&b.push(c);return b}function qd(a,b){var c=[];if(!a.children)return[];a=t(a.children);for(var d=a.next();!d.done;d=a.next())d=d.value,d.tagName===b&&c.push(d);return c}function rd(a){if("string"===typeof a)return hc(a);a=a.children.reduce(function(b,c){return"string"===typeof c?b+c:b},"");return""===a?null:hc(a)} +function sd(a){if(!Array.from(a.children).every(function(b){return"string"===typeof b}))return null;(a=rd(a))&&(a=a.trim());return a}function td(a,b,c){c=void 0===c?[]:c;a.tagName===b&&c.push(a);if(a.children){a=t(a.children);for(var d=a.next();!d.done;d=a.next())td(d.value,b,c)}return c}function ud(a,b){a=qd(a,b);return 1!=a.length?null:a[0]}function vd(a,b,c){a=wd(a,b,c);return 1!=a.length?null:a[0]} +function xd(a,b,c,d){d=void 0===d?null:d;var e=null;a=a.attributes[b];null!=a&&(e=c(a));return null==e?d:e}function yd(a,b,c){b=ld(b);return a.attributes[b+":"+c]||null}function wd(a,b,c){var d=ld(b);b=[];if(a.children)for(c=d?d+":"+c:c,a=t(a.children),d=a.next();!d.done;d=a.next())(d=d.value)&&d.tagName===c&&b.push(d);return b}function zd(a,b,c){b=t(b);for(var d=b.next();!d.done;d=b.next())if(d=yd(a,d.value,c))return d;return null} +function Ad(a){if(!a)return null;/^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test(a)&&(a+="Z");a=Date.parse(a);return isNaN(a)?null:a/1E3}function Bd(a){if(!a)return null;a=RegExp("^P(?:([0-9]*)Y)?(?:([0-9]*)M)?(?:([0-9]*)D)?(?:T(?:([0-9]*)H)?(?:([0-9]*)M)?(?:([0-9.]*)S)?)?$","i").exec(a);if(!a)return null;a=31536E3*Number(a[1]||null)+2592E3*Number(a[2]||null)+86400*Number(a[3]||null)+3600*Number(a[4]||null)+60*Number(a[5]||null)+Number(a[6]||null);return isFinite(a)?a:null} +function Cd(a){var b=/([0-9]+)-([0-9]+)/.exec(a);if(!b)return null;a=Number(b[1]);if(!isFinite(a))return null;b=Number(b[2]);return isFinite(b)?{start:a,end:b}:null}function Dd(a){a=Number(a);return 0===a%1?a:null}function Ed(a){a=Number(a);return 0===a%1&&0Math.abs(a.startTime-b.startTime)&&.001>Math.abs(a.endTime-b.endTime)))return!1;for(var c in a)if("startTime"!=c&&"endTime"!=c&&"payload"!=c)if("nestedCues"==c){if(!Wc(a.nestedCues,b.nestedCues,ce))return!1}else if("region"==c||"cellResolution"==c)for(var d in a[c]){if(a[c][d]!=b[c][d])return!1}else if(Array.isArray(a[c])){if(!Wc(a[c],b[c]))return!1}else if(a[c]!=b[c])return!1;return!0} +function fe(a,b){b=void 0===b?new Map:b;var c=a.payload;if(c.includes("<")){0===b.size&&ge(b);var d=c;c=[];for(var e=-1,f=0;f"===d[f]&&0",'
    '),d+="
    ";a:{f=d;e=[];var g=-1;c="";d=!1;for(var h=0;h",h);if(-1===k){c=f;break a}if((k=f.substring(h+1,k))&&"v"==k){d=!0;var l=null;e.length&& +(l=e[e.length-1]);if(l){if(l===k)c+="/"+k+">";else{if(!l.startsWith("v")){c+=f[h];continue}c+="/"+l+">"}h+=k.length+1}else c+=f[h]}else c+=f[h]}else"<"===f[h]?(g=h+1,"v"!=f[g]&&(g=-1)):">"===f[h]&&0","<"+g+">"),c=c.replace("",""),d||(c+="")}c=ie(c);a.payload="";try{var m=jd(""+c+"","span")}catch(n){}if(m)if(m=m.children,1!= +m.length||m[0].tagName)for(m=t(m),c=m.next();!c.done;c=m.next())je(c.value,a,b);else a.payload=hc(c);else a.payload=hc(c)}else a.payload=hc(c)}function ge(a){for(var b=t(Object.entries(ke)),c=b.next();!c.done;c=b.next()){var d=t(c.value);c=d.next().value;d=d.next().value;var e=new Qd(0,0,"");e.color=d;a.set("."+c,e)}b=t(Object.entries(le));for(c=b.next();!c.done;c=b.next())d=t(c.value),c=d.next().value,d=d.next().value,e=new Qd(0,0,""),e.backgroundColor=d,a.set("."+c,e)} +function ie(a){var b={"< ":""," >":" >"},c=/(< +>|<\s|\s>)/g,d=RegExp(c.source);return a&&d.test(a)?a.replace(c,function(e){return b[e]||""}):a||""} +function je(a,b,c){var d=b.clone();d.nestedCues=[];d.payload="";d.rubyTag="";d.line=null;d.region=new Qc;d.position=null;d.size=0;d.textAlign=Sd;if(a.tagName)for(var e=t(a.tagName.split(/(?=[ .])+/g)),f=e.next();!f.done;f=e.next()){var g=f=f.value;if(g.startsWith(".voice-")){var h=g.split("-").pop();g='v[voice="'+h+'"]';c.has(g)||(g="v[voice="+h+"]")}c.has(g)&&(h=d,g=c.get(g))&&(h.backgroundColor=me(g.backgroundColor,h.backgroundColor),h.color=me(g.color,h.color),h.fontFamily=me(g.fontFamily,h.fontFamily), +h.fontSize=me(g.fontSize,h.fontSize),h.textShadow=me(g.textShadow,h.textShadow),h.fontWeight=g.fontWeight,h.fontStyle=g.fontStyle,h.opacity=g.opacity,h.rubyTag=g.rubyTag,h.textCombineUpright=g.textCombineUpright,h.wrapLine=g.wrapLine);switch(f){case "br":d=ae(d.startTime,d.endTime);b.nestedCues.push(d);return;case "b":d.fontWeight=ne;break;case "i":d.fontStyle=oe;break;case "u":d.textDecoration.push(pe);break;case "font":if(f=a.attributes.color)d.color=f;break;case "div":f=a.attributes.time;if(!f)break; +if(f=dd(f))d.startTime=f;break;case "ruby":case "rp":case "rt":d.rubyTag=f}}e=a.children;if(od(a)||1==e.length&&od(e[0]))for(c=rd(a).split("\n"),a=!0,c=t(c),e=c.next();!e.done;e=c.next())e=e.value,a||(a=ae(d.startTime,d.endTime),b.nestedCues.push(a)),0=a.l&&r.startTime=c.h||(a<=c.g&&b>=c.h?c.g=c.h=null:a<=c.g&&bc.g&&b>=c.h&&(c.h=a));G(d)})};function Ve(a,b,c){a.l=b;a.m=c}function We(a,b,c){a.C=b;if(b=a.o.get(b))for(var d=t(b.keys()),e=d.next();!e.done;e=d.next())(e=b.get(e.value).filter(function(f){return f.endTime<=c}))&&a.j.append(e)} +function Xe(a,b,c){b.startTime+=c;b.endTime+=c;b=t(b.nestedCues);for(var d=b.next();!d.done;d=b.next())Xe(a,d.value,c)} +function Ye(a,b,c,d,e){var f=c+" "+d,g=new Map;b=t(b);for(var h=b.next();!h.done;h=b.next()){var k=h.value;h=k.stream;k=k.cue;g.has(h)||g.set(h,new Map);g.get(h).has(f)||g.get(h).set(f,[]);Xe(a,k,e);k.startTime>=a.l&&k.startTimey?(y=B,A=[E.Lf]):B==y&&A.push(E.Lf);m.push.apply(m,x(A))});h=m}c=new Set;b=new Set;h=t(h);for(e=h.next();!e.done;e=h.next())e=e.value,e.audio&&c.add(e.audio),e.video&&b.add(e.video);h=Array.from(c).sort(function(y,z){return y.bandwidth-z.bandwidth});var n=[];c=new Map;h=t(h);for(e=h.next();!e.done;e=h.next()){e=e.value;k=g(e);l=c.get(k)||[];if(l.length){var q=l[l.length-1],r=Ie(q.codecs),u=Ie(e.codecs);r!=u||e.bandwidth&&q.bandwidth&&!(e.bandwidth>q.bandwidth)||(l.push(e),n.push(e.id))}else l.push(e), +n.push(e.id);c.set(k,l)}var w={vp8:1,avc:1,"dovi-avc":.95,vp9:.9,vp09:.9,hevc:.85,"dovi-hevc":.8,"dovi-p5":.75,av01:.7,"dovi-av1":.65,vvc:.6};h=Array.from(b).sort(function(y,z){if(!y.bandwidth||!z.bandwidth||y.bandwidth==z.bandwidth){if(y.codecs&&z.codecs&&y.codecs!=z.codecs&&y.width==z.width){var A=Ie(y.codecs),B=Ie(z.codecs);if(A!=B)return(w[A]||1)-(w[B]||1)}return y.width-z.width}return y.bandwidth-z.bandwidth});b=Gc();var v=[];c=new Map;h=t(h);for(e=h.next();!e.done;e=h.next()){e=e.value;k=f(e); +l=c.get(k)||[];if(l.length){q=l[l.length-1];if(!b&&(r=Ie(q.codecs),u=Ie(e.codecs),r!==u))continue;r=Ie(q.codecs);u=Ie(e.codecs);r!=u||e.bandwidth&&q.bandwidth&&!(e.bandwidth>q.bandwidth)||(l.push(e),v.push(e.id))}else l.push(e),v.push(e.id);c.set(k,l)}a.variants=a.variants.filter(function(y){var z=y.audio;y=y.video;return z&&!n.includes(z.id)||y&&!v.includes(y.id)?!1:!0})} +function rf(a,b,c){b=t(b);for(var d=b.next(),e={};!d.done;e={videoCodec:void 0},d=b.next())if(e.videoCodec=d.value,d=a.filter(function(f){return function(g){return g.video&&g.video.codecs.startsWith(f.videoCodec)}}(e)),d.length){a=d;break}c=t(c);b=c.next();for(d={};!b.done;d={audioCodec:void 0},b=c.next())if(d.audioCodec=b.value,b=a.filter(function(f){return function(g){return g.audio&&g.audio.codecs.startsWith(f.audioCodec)}}(d)),b.length){a=b;break}return a} +function sf(a,b,c){a.variants=a.variants.filter(function(d){return tf(d,b,c)})} +function tf(a,b,c){function d(h,k,l){return h>=k&&h<=l}var e=a.video;if(e&&e.width&&e.height){var f=e.width,g=e.height;g>f&&(g=t([g,f]),f=g.next().value,g=g.next().value);if(!d(f,b.minWidth,Math.min(b.maxWidth,c.width))||!d(g,b.minHeight,Math.min(b.maxHeight,c.height))||!d(e.width*e.height,b.minPixels,b.maxPixels))return!1}return a&&a.video&&a.video.frameRate&&!d(a.video.frameRate,b.minFrameRate,b.maxFrameRate)||a&&a.audio&&a.audio.channelsCount&&!d(a.audio.channelsCount,b.minChannelsCount,b.maxChannelsCount)|| +!d(a.bandwidth,b.minBandwidth,b.maxBandwidth)?!1:!0}function uf(a,b,c,d){c=void 0===c?[]:c;d=void 0===d?{}:d;return Q(function(e){if(1==e.g)return F(e,vf(a,b,0=a&&e.width>=b){a=e.height;b=e.width;break}c=fg(this,this.g.restrictions,d,a,b)}a=this.getBandwidthEstimate();d.length&& +!c.length&&(c=fg(this,null,d,Infinity,Infinity),c=[c[0]]);b=c[0]||null;for(d=0;d=g&&a<=f&&(b.bandwidth!=e.bandwidth||b.bandwidth==e.bandwidth&&b.video&&e.video&&(b.video.width=b.i))return;a.I=!0;a.s-=1E3*(a.g.switchInterval-a.g.minTimeToSwitch)}Date.now()-a.s<1E3*a.g.switchInterval||(b=a.chooseVariant(),a.getBandwidthEstimate(),b&&a.G(b,a.g.clearBufferSwitch,a.g.safeMarginSwitch))} +function fg(a,b,c,d,e){if(a.C){var f=a.C.Uh();f&&(c=c.filter(function(g){return g.bandwidth&&f?g.bandwidth<=f:!0}))}b&&(c=c.filter(function(g){return tf(g,b,{width:e,height:d})}));return c.sort(function(g,h){return g.bandwidth-h.bandwidth})}function gg(a){var b=[];a=t(a);for(var c=a.next();!c.done;c=a.next())(c=c.value.video)&&c.height&&c.width&&b.push({height:c.height,width:c.width});return b.sort(function(d,e){return d.width-e.width})}T("shaka.abr.SimpleAbrManager",eg);eg.prototype.configure=eg.prototype.configure; +eg.prototype.setCmsdManager=eg.prototype.setCmsdManager;eg.prototype.setMediaElement=eg.prototype.setMediaElement;eg.prototype.playbackRateChanged=eg.prototype.playbackRateChanged;eg.prototype.setVariants=eg.prototype.setVariants;eg.prototype.getBandwidthEstimate=eg.prototype.getBandwidthEstimate;eg.prototype.trySuggestStreams=eg.prototype.trySuggestStreams;eg.prototype.segmentDownloaded=eg.prototype.segmentDownloaded;eg.prototype.disable=eg.prototype.disable;eg.prototype.enable=eg.prototype.enable; +eg.prototype.chooseVariant=eg.prototype.chooseVariant;eg.prototype.init=eg.prototype.init;eg.prototype.release=eg.prototype.release;eg.prototype.stop=eg.prototype.stop;var ig=1;T("shaka.config.CrossBoundaryStrategy",{KEEP:"keep",RESET:"reset",RESET_TO_ENCRYPTED:"reset_to_encrypted",RESET_ON_ENCRYPTION_CHANGE:"RESET_ON_ENCRYPTION_CHANGE"});function jg(a,b){if(a===b||!a.length||!b.length)return!0;a=t(a);for(var c=a.next();!c.done;c=a.next()){c=c.value;if(kg(c))return!0;for(var d=t(b),e=d.next();!e.done;e=d.next())if(e=e.value,c.keySystem===e.keySystem||kg(e))return!0}return!1} +function lg(a,b){if(!a.length)return b;if(!b.length)return a;var c=[];a=t(a);for(var d=a.next();!d.done;d=a.next()){d=d.value;for(var e=t(b),f=e.next();!f.done;f=e.next())if(f=f.value,d.keySystem==f.keySystem){e=new Map;for(var g=t((d.initData||[]).concat(f.initData||[])),h=g.next();!h.done;h=g.next())h=h.value,e.set(h.keyId,h);e=Array.from(e.values());g=d.keyIds&&f.keyIds?new Set([].concat(x(d.keyIds),x(f.keyIds))):d.keyIds||f.keyIds;c.push({keySystem:d.keySystem,licenseServerUri:d.licenseServerUri|| +f.licenseServerUri,distinctiveIdentifierRequired:d.distinctiveIdentifierRequired||f.distinctiveIdentifierRequired,persistentStateRequired:d.persistentStateRequired||f.persistentStateRequired,videoRobustness:d.videoRobustness||f.videoRobustness,audioRobustness:d.audioRobustness||f.audioRobustness,serverCertificate:d.serverCertificate||f.serverCertificate,serverCertificateUri:d.serverCertificateUri||f.serverCertificateUri,initData:e,keyIds:g});break}else kg(d)?c.push(d):kg(f)&&c.push(f)}return c} +function mg(a){return a?!!a.match(/^com\.(microsoft|chromecast)\.playready/):!1}function ng(a){return a?!!a.match(/^com\.apple\.fps/):!1}function kg(a){return(a=a.licenseServerUri)?a.startsWith("data:application/json;base64,"):!1}var og=new pb(function(){return Ub(new Uint8Array([0]))}),pg=new Map;function qg(a,b){var c=rg();this.l=null==a.maxAttempts?c.maxAttempts:a.maxAttempts;this.j=null==a.baseDelay?c.baseDelay:a.baseDelay;this.o=null==a.fuzzFactor?c.fuzzFactor:a.fuzzFactor;this.m=null==a.backoffFactor?c.backoffFactor:a.backoffFactor;this.g=0;this.h=this.j;if(this.i=void 0===b?!1:b)this.g=1} +function sg(a){var b,c;return Q(function(d){if(1==d.g){if(a.g>=a.l)if(a.i)a.g=1,a.h=a.j;else throw new U(2,7,1010);b=a.g;a.g++;if(0==b)return d.return();c=a.h*(1+(2*Math.random()-1)*a.o);return F(d,new Promise(function(e){(new $e(e)).ha(c/1E3)}),2)}a.h*=a.m;G(d)})}function rg(){return{maxAttempts:2,baseDelay:1E3,backoffFactor:2,fuzzFactor:.5,timeout:3E4,stallTimeout:5E3,connectionTimeout:1E4}};function tg(){var a,b,c=new Promise(function(d,e){a=d;b=e});c.resolve=a;c.reject=b;return c}tg.prototype.resolve=function(){};tg.prototype.reject=function(){};function ug(a,b){this.promise=a;this.i=b;this.g=null}function vg(a){return new ug(Promise.reject(a),function(){return Promise.resolve()})}function wg(){var a=Promise.reject(new U(2,7,7001));a.catch(function(){});return new ug(a,function(){return Promise.resolve()})}function xg(a){return new ug(Promise.resolve(a),function(){return Promise.resolve()})}function yg(a){return new ug(a,function(){return a.catch(function(){})})}ug.prototype.abort=function(){this.g||(this.g=this.i());return this.g}; +function zg(a){return new ug(Promise.all(a.map(function(b){return b.promise})),function(){return Promise.all(a.map(function(b){return b.abort()}))})}ug.prototype.finally=function(a){this.promise.then(function(){return a(!0)},function(){return a(!1)});return this}; +ug.prototype.Va=function(a,b){function c(h){return function(k){if(e.g&&h)f.reject(g);else{var l=h?a:b;l?d=Ag(l,k,f):(h?f.resolve:f.reject)(k)}}}function d(){f.reject(g);return e.abort()}var e=this,f=new tg;f.catch(function(){});var g=new U(2,7,7001);this.promise.then(c(!0),c(!1));return new ug(f,function(){return d()})}; +function Ag(a,b,c){try{var d=a(b);if(d&&d.promise&&d.abort)return c.resolve(d.promise),function(){return d.abort()};c.resolve(d);return function(){return Promise.resolve(d).then(function(){},function(){})}}catch(e){return c.reject(e),function(){return Promise.resolve()}}}fa.Object.defineProperties(ug.prototype,{aborted:{configurable:!0,enumerable:!0,get:function(){return null!==this.g}}});T("shaka.util.AbortableOperation",ug);ug.prototype.chain=ug.prototype.Va;ug.prototype["finally"]=ug.prototype.finally; +ug.all=zg;ug.prototype.abort=ug.prototype.abort;ug.notAbortable=yg;ug.completed=xg;ug.aborted=wg;ug.failed=vg;function V(a,b){if(b)if(b instanceof Map)for(var c=t(b.keys()),d=c.next();!d.done;d=c.next())d=d.value,Object.defineProperty(this,d,{value:b.get(d),writable:!0,enumerable:!0});else for(c in b)Object.defineProperty(this,c,{value:b[c],writable:!0,enumerable:!0});this.defaultPrevented=this.cancelable=this.bubbles=!1;this.timeStamp=window.performance&&window.performance.now?window.performance.now():Date.now();this.type=a;this.isTrusted=!1;this.target=this.currentTarget=null;this.g=!1} +function Bg(a){var b=new V(a.type),c;for(c in a)Object.defineProperty(b,c,{value:a[c],writable:!0,enumerable:!0});return b}V.prototype.preventDefault=function(){this.cancelable&&(this.defaultPrevented=!0)};V.prototype.stopImmediatePropagation=function(){this.g=!0};V.prototype.stopPropagation=function(){};T("shaka.util.FakeEvent",V); +var Cg={fl:"abrstatuschanged",hl:"adaptation",il:"audiotrackchanged",jl:"audiotrackschanged",kl:"boundarycrossed",ll:"buffering",ol:"canupdatestarttime",ql:"complete",rl:"currentitemchanged",ul:"downloadcompleted",vl:"downloadfailed",wl:"downloadheadersreceived",xl:"drmsessionupdate",zl:"emsg",Fl:"itemsinserted",Gl:"itemsremoved",Wl:"prft",Error:"error",Al:"expirationupdated",Bl:"firstquartile",Cl:"gapjumped",Hl:"keystatuschanged",Ll:"loaded",Ml:"loading",Ol:"manifestparsed",Pl:"manifestupdated", +Ql:"mediaqualitychanged",Rl:"mediasourcerecovered",Sl:"metadataadded",Metadata:"metadata",Tl:"midpoint",Ul:"nospatialvideoinfo",Vl:"onstatechange",Xl:"ratechange",$l:"segmentappended",am:"sessiondata",bm:"spatialvideoinfo",cm:"stalldetected",dm:"started",em:"statechanged",fm:"streaming",gm:"textchanged",hm:"texttrackvisibility",im:"thirdquartile",jm:"timelineregionadded",lm:"timelineregionenter",mm:"timelineregionexit",nm:"trackschanged",pm:"unloading",rm:"variantchanged"};function Dg(){this.Ya=new ib;this.xe=this}Dg.prototype.addEventListener=function(a,b){this.Ya&&this.Ya.push(a,b)};Dg.prototype.removeEventListener=function(a,b){this.Ya&&this.Ya.remove(a,b)};Dg.prototype.dispatchEvent=function(a){if(!this.Ya)return!0;var b=this.Ya.get(a.type)||[],c=this.Ya.get("All");c&&(b=b.concat(c));b=t(b);for(c=b.next();!c.done;c=b.next()){c=c.value;a.target=this.xe;a.currentTarget=this.xe;try{c.handleEvent?c.handleEvent(a):c.call(this,a)}catch(d){}if(a.g)break}return a.defaultPrevented}; +Dg.prototype.release=function(){this.Ya=null};function Eg(){this.g=[]}function Fg(a,b){a.g.push(b.finally(function(){Uc(a.g,b)}))}Eg.prototype.destroy=function(){for(var a=[],b=t(this.g),c=b.next();!c.done;c=b.next())c=c.value,c.promise.catch(function(){}),a.push(c.abort());this.g=[];return Promise.all(a)};function Gg(a,b,c,d,e,f,g){Dg.call(this);this.i=null;this.j=!1;this.s=new Eg;this.g=new Set;this.h=new Set;this.o=a||null;this.m=b||null;this.A=c||null;this.B=d||null;this.C=e||null;this.G=f||null;this.F=g||null;this.l=new Map}pa(Gg,Dg);p=Gg.prototype;p.configure=function(a){this.i=a};function Hg(a,b,c,d){d=void 0===d?!1:d;c=c||Ig;var e=Jg.get(a);(!e||c>=e.priority)&&Jg.set(a,{priority:c,tf:b,xk:d})} +function Kg(a,b){for(var c=t(a.g),d=c.next();!d.done;d=c.next())b.g.add(d.value);a=t(a.h);for(c=a.next();!c.done;c=a.next())b.h.add(c.value)}p.Ak=function(a){this.g.add(a)};p.Wk=function(a){this.g.delete(a)};p.hj=function(){this.g.clear()};p.Bk=function(a){this.h.add(a)};p.Xk=function(a){this.h.delete(a)};p.ij=function(){this.h.clear()};p.Ih=function(){this.l.clear()}; +function Lg(a,b,c){return{uris:a,method:"GET",body:null,headers:{},allowCrossSiteCredentials:!1,retryParameters:b,licenseRequestType:null,sessionId:null,drmInfo:null,initData:null,initDataType:null,streamDataCallback:void 0===c?null:c}}p.destroy=function(){this.j=!0;this.g.clear();this.h.clear();this.l.clear();Dg.prototype.release.call(this);return this.s.destroy()}; +p.request=function(a,b,c){var d=this,e=new Mg;if(this.j){var f=Promise.reject(new U(2,7,7001));f.catch(function(){});return new Ng(f,function(){return Promise.resolve()},e)}b.method=b.method||"GET";b.headers=b.headers||{};b.retryParameters=b.retryParameters?ed(b.retryParameters):rg();b.uris=ed(b.uris);f=Og(this,a,b,c);var g=f.Va(function(){return Pg(d,a,b,c,new qg(b.retryParameters,!1),0,null,e)}),h=g.Va(function(q){return Qg(d,a,q,c)}),k=Date.now(),l=0;f.promise.then(function(){l=Date.now()-k},function(){}); +var m=0;g.promise.then(function(){m=Date.now()},function(){});var n=h.Va(function(q){var r=Date.now()-m,u=q.response;u.timeMs+=l;u.timeMs+=r;q.Xj||!d.o||u.fromCache||"HEAD"==b.method||a!=Rg||d.o(u.timeMs,u.data.byteLength,Sg(c),b,c);d.F&&d.F(a,u,c);return u},function(q){q&&(q.severity=2);throw q;});f=new Ng(n.promise,function(){return n.abort()},e);Fg(this.s,f);return f}; +function Og(a,b,c,d){function e(h){f=f.Va(function(){c.body&&(c.body=Ub(c.body));return h(b,c,d)})}var f=xg(void 0);a.C&&e(a.C);a=t(a.g);for(var g=a.next();!g.done;g=a.next())e(g.value);return f.Va(void 0,function(h){if(h instanceof U&&7001==h.code)throw h;throw new U(2,1,1006,h);})} +function Pg(a,b,c,d,e,f,g,h){a.i.forceHTTP&&(c.uris[f]=c.uris[f].replace("https://","http://"));a.i.forceHTTPS&&(c.uris[f]=c.uris[f].replace("http://","https://"));0this.h.byteLength)throw ah();var b=Tb(this.h,this.g,a);this.g+=a;return b}; +p.skip=function(a){if(this.g+a>this.h.byteLength)throw ah();this.g+=a};p.Bi=function(a){if(this.ga||a>this.h.byteLength)throw ah();this.g=a};p.Sc=function(){for(var a=this.g;this.Fa()&&0!=this.h.getUint8(this.g);)this.g+=1;a=Tb(this.h,a,this.g-a);this.g+=1;return ac(a)};function ah(){return new U(2,3,3E3)}T("shaka.util.DataViewReader",Zg);Zg.prototype.readTerminatedString=Zg.prototype.Sc;Zg.prototype.seek=Zg.prototype.seek;Zg.prototype.rewind=Zg.prototype.Bi; +Zg.prototype.skip=Zg.prototype.skip;Zg.prototype.readBytes=Zg.prototype.Sb;Zg.prototype.readUint64=Zg.prototype.ud;Zg.prototype.readInt32=Zg.prototype.Sg;Zg.prototype.readUint32=Zg.prototype.T;Zg.prototype.readUint16=Zg.prototype.Aa;Zg.prototype.readUint8=Zg.prototype.X;Zg.prototype.getLength=Zg.prototype.getLength;Zg.prototype.getPosition=Zg.prototype.Ma;Zg.prototype.hasMoreData=Zg.prototype.Fa;var $g=1;Zg.Endianness={BIG_ENDIAN:0,LITTLE_ENDIAN:$g};function bh(){this.i=new Map;this.h=new Map;this.g=!1}p=bh.prototype;p.box=function(a,b){a=ch(a);this.i.set(a,dh);this.h.set(a,b);return this};p.R=function(a,b){a=ch(a);this.i.set(a,eh);this.h.set(a,b);return this};p.stop=function(){this.g=!0};p.parse=function(a,b,c){a=new Zg(a,0);for(this.g=!1;a.Fa()&&!this.g;)this.pd(0,a,b,c)}; +p.pd=function(a,b,c,d){var e=b.Ma();if(d&&e+8>b.getLength())this.g=!0;else{var f=b.T(),g=b.T(),h=fh(g),k=!1;switch(f){case 0:f=b.getLength()-e;break;case 1:if(d&&b.Ma()+8>b.getLength()){this.g=!0;return}f=b.ud();k=!0}var l=this.h.get(g);if(l){var m=null,n=null;if(this.i.get(g)==eh){if(d&&b.Ma()+4>b.getLength()){this.g=!0;return}n=b.T();m=n>>>24;n&=16777215}g=e+f;c&&g>b.getLength()&&(g=b.getLength());d&&g>b.getLength()?this.g=!0:(d=g-b.Ma(),b=0>24&255,a>>16&255,a>>8&255,a&255)} +function hh(a){return 8+(a.has64BitSize?8:0)+(null!=a.flags?4:0)}T("shaka.util.Mp4Parser",bh);bh.headerSize=hh;bh.typeToString=fh;bh.allData=lh;bh.audioSampleEntry=kh;bh.visualSampleEntry=jh;bh.sampleDescription=ih;bh.children=gh;bh.prototype.parseNext=bh.prototype.pd;bh.prototype.parse=bh.prototype.parse;bh.prototype.stop=bh.prototype.stop;bh.prototype.fullBox=bh.prototype.R;bh.prototype.box=bh.prototype.box;var dh=0,eh=1;function mh(a){var b=this;this.g=[];this.h=[];this.data=[];(new bh).box("moov",gh).box("moof",gh).R("pssh",function(c){if(!(1d?h.setUint32(k,0):h.setUint32(k,16777216);k+=4;g.set(b,k);k+=b.length;if(0h&&(h+=Math.pow(2,32));h="0x"+h.toString(16)}a.s(new U(2,6,6006,f.message,f,h))}})}function Zh(a){return Q(function(b){return 1==b.g?a.K?F(b,a.m,3):b.u(0):F(b,Promise.all(a.S.map(function(c){return c.promise})),0)})} +function Ih(a,b){var c,d,e,f,g,h,k,l,m,n,q,r,u,w;Q(function(v){switch(v.g){case 1:c=b.target;a.g.logLicenseExchange&&lc(b.message);d=a.i.get(c);e=a.h.licenseServerUri;f=a.g.advanced[a.h.keySystem];"individualization-request"==b.messageType&&f&&f.individualizationServer&&(e=f.individualizationServer);g=Lg([e],a.g.retryParameters);g.body=b.message;g.method="POST";g.licenseRequestType=b.messageType;g.sessionId=c.sessionId;g.drmInfo=a.h;d&&(g.initData=d.initData,g.initDataType=d.initDataType);if(f&&f.headers)for(h in f.headers)g.headers[h]= +f.headers[h];if("org.w3.clearkey"===a.h.keySystem){var y=g,z=a.h;try{var A=dc(y.body);if(A){var B=JSON.parse(A);B.type||(B.type=z.sessionType,y.body=ec(JSON.stringify(B)))}}catch(E){}}if(mg(a.h.keySystem))if(y=bc(g.body,!0,!0),y.includes("PlayReadyKeyMessage")){y=jd(y,"PlayReadyKeyMessage");z=td(y,"HttpHeader");z=t(z);for(A=z.next();!A.done;A=z.next())B=A.value,A=td(B,"name")[0],B=td(B,"value")[0],g.headers[rd(A)]=rd(B);y=td(y,"Challenge")[0];g.body=mc(rd(y))}else g.headers["Content-Type"]="text/xml; charset=utf-8"; +k=Date.now();wa(v,2);m=a.C.lc.request(2,g,{isPreload:a.P()});a.S.push(m);return F(v,m.promise,4);case 4:l=v.h;Uc(a.S,m);za(v,3);break;case 2:n=Aa(v);if(a.l.g)return v.return();q=new U(2,6,6007,n);1==a.i.size?(a.s(q),d&&d.Ib&&d.Ib.reject(q)):(d&&d.Ib&&d.Ib.reject(q),a.i.delete(c),Oh(a)&&(a.m.resolve(),a.L.ha(.1)));return v.return();case 3:if(a.l.g)return v.return();a.H+=(Date.now()-k)/1E3;a.g.logLicenseExchange&&lc(l.data);wa(v,5);return F(v,c.update(l.data),7);case 7:za(v,6);break;case 5:return r= +Aa(v),u=new U(2,6,6008,r.message),a.s(u),d&&d.Ib&&d.Ib.reject(u),v.return();case 6:if(a.l.g)return v.return();w=new V("drmsessionupdate");a.C.onEvent(w);d&&(d.Ib&&d.Ib.resolve(),Wh(a,d));G(v)}})} +function Yh(a,b){b=b.target;var c=a.i.get(b),d=!1;b.keyStatuses.forEach(function(f,g){if("string"==typeof g){var h=g;g=f;f=h}h=qb();if(mg(a.h.keySystem)&&16==g.byteLength&&h.Zg()){h=Yb(g);var k=h.getUint32(0,!0),l=h.getUint16(4,!0),m=h.getUint16(6,!0);h.setUint32(0,k,!1);h.setUint16(4,l,!1);h.setUint16(6,m,!1)}"status-pending"!=f&&(c.loaded=!0);"expired"==f&&(d=!0);g=oc(g).slice(0,32);a.W.set(g,f)});var e=b.expiration-Date.now();(0>e||d&&1E3>e)&&c&&!c.Ib&&(a.i.delete(b),$h(b));Oh(a)&&(a.m.resolve(), +a.L.ha(ai))}function ph(a){var b=a.W,c=a.ka;c.clear();b.forEach(function(d,e){return c.set(e,d)});b=Array.from(c.values());b.length&&b.every(function(d){return"expired"==d})&&a.s(new U(2,6,6014));a.C.nf(Yg(c))} +function bi(){var a,b,c,d,e,f,g,h,k,l,m,n,q,r,u,w,v,y,z,A,B,E,H,C,D,I,L,K,J,M,O,N,P,R,S;return Q(function(aa){if(1==aa.g){a="org.w3.clearkey com.widevine.alpha com.widevine.alpha.experiment com.microsoft.playready com.microsoft.playready.hardware com.microsoft.playready.recommendation com.microsoft.playready.recommendation.3000 com.microsoft.playready.recommendation.3000.clearlead com.chromecast.playready com.apple.fps.1_0 com.apple.fps com.huawei.wiseplay".split(" ");if(!(window.MediaKeys&&window.navigator&& +window.navigator.requestMediaKeySystemAccess&&window.MediaKeySystemAccess&&window.MediaKeySystemAccess.prototype.getConfiguration)){b={};c=t(a);for(d=c.next();!d.done;d=c.next())e=d.value,b[e]=null;return aa.return(b)}f="1.0 1.1 1.2 1.3 1.4 2.0 2.1 2.2 2.3".split(" ");g=["SW_SECURE_CRYPTO","SW_SECURE_DECODE","HW_SECURE_CRYPTO","HW_SECURE_DECODE","HW_SECURE_ALL"];h=["150","2000","3000"];k={"com.widevine.alpha":g,"com.widevine.alpha.experiment":g,"com.microsoft.playready.recommendation":h};l=[{contentType:'video/mp4; codecs="avc1.42E01E"'}, +{contentType:'video/webm; codecs="vp8"'}];m=[{contentType:'audio/mp4; codecs="mp4a.40.2"'},{contentType:'audio/webm; codecs="opus"'}];n={videoCapabilities:l,audioCapabilities:m,initDataTypes:["cenc","sinf","skd","keyids"]};q=[null,"cenc","cbcs","cbcs-1-9"];r=new Map;u=qb();w=function(W,Fa){var Ga,xa,qa,Da,Ja,ra,da,sa,Za,$a,hb,rb,mb;return Q(function(Ma){switch(Ma.g){case 1:return wa(Ma,2),F(Ma,Fa.createMediaKeys(),5);case 5:Ga=Ma.h;case 4:za(Ma,3);break;case 2:return Aa(Ma),Ma.return();case 3:qa= +(xa=Fa.getConfiguration().sessionTypes)?xa.includes("persistent-license"):!1;u.ji()&&(qa=!1);Da=Fa.getConfiguration().videoCapabilities;Ja=Fa.getConfiguration().audioCapabilities;ra={persistentState:qa,encryptionSchemes:[],videoRobustnessLevels:[],audioRobustnessLevels:[],minHdcpVersions:[]};r.has(W)&&r.get(W)?ra=r.get(W):r.set(W,ra);(da=Da[0].encryptionScheme)&&!ra.encryptionSchemes.includes(da)&&ra.encryptionSchemes.push(da);(sa=Da[0].robustness)&&!ra.videoRobustnessLevels.includes(sa)&&ra.videoRobustnessLevels.push(sa); +(Za=Ja[0].robustness)&&!ra.audioRobustnessLevels.includes(Za)&&ra.audioRobustnessLevels.push(Za);if("getStatusForPolicy"in Ga){$a=[];hb=t(f);rb=hb.next();for(mb={};!rb.done;mb={Qd:void 0},rb=hb.next())mb.Qd=rb.value,ra.minHdcpVersions.includes(mb.Qd)||$a.push(Ga.getStatusForPolicy({minHdcpVersion:mb.Qd}).then(function(Td){return function(ic){"usable"!=ic||ra.minHdcpVersions.includes(Td.Qd)||ra.minHdcpVersions.push(Td.Qd)}}(mb)));return F(Ma,Promise.all($a),0)}Ma.u(0)}})};v=function(W,Fa,Ga,xa){var qa, +Da,Ja,ra,da,sa,Za,$a,hb,rb,mb;return Q(function(Ma){switch(Ma.g){case 1:wa(Ma,2);qa=ed(n);Da=t(qa.videoCapabilities);for(Ja=Da.next();!Ja.done;Ja=Da.next())ra=Ja.value,ra.encryptionScheme=Fa,ra.robustness=Ga;da=t(qa.audioCapabilities);for(sa=da.next();!sa.done;sa=da.next())Za=sa.value,Za.encryptionScheme=Fa,Za.robustness=xa;$a=ed(qa);$a.persistentState="required";$a.sessionTypes=["persistent-license"];hb=[$a,qa];mb=qb();return"MOBILE"==mb.La()?F(Ma,df(5,navigator.requestMediaKeySystemAccess(W,hb)), +7):F(Ma,navigator.requestMediaKeySystemAccess(W,hb),6);case 6:rb=Ma.h;Ma.u(5);break;case 7:rb=Ma.h;case 5:return F(Ma,w(W,rb),8);case 8:za(Ma,0);break;case 2:Aa(Ma),G(Ma)}})};y=function(W,Fa,Ga,xa){var qa,Da,Ja,ra;return Q(function(da){switch(da.g){case 1:return wa(da,2),qa={type:"media-source",video:{contentType:l[0].contentType,width:640,height:480,bitrate:1,framerate:1},audio:{contentType:m[0].contentType,channels:2,bitrate:1,samplerate:1},keySystemConfiguration:{keySystem:W,video:{encryptionScheme:Fa, +robustness:Ga},audio:{encryptionScheme:Fa,robustness:xa}}},Ja=qb(),"MOBILE"==Ja.La()?F(da,df(5,navigator.mediaCapabilities.decodingInfo(qa)),7):F(da,navigator.mediaCapabilities.decodingInfo(qa),6);case 6:Da=da.h;da.u(5);break;case 7:Da=da.h;case 5:return ra=Da.keySystemAccess,F(da,w(W,ra),8);case 8:za(da,0);break;case 2:Aa(da),G(da)}})};z=t(a);for(A=z.next();!A.done;A=z.next())B=A.value,r.set(B,null);E=function(W){return"WEBKIT"===qb().Ea()&&"org.w3.clearkey"===W?!1:!0};H=[];C=t(q);for(D=C.next();!D.done;D= +C.next())for(I=D.value,L=t(a),K=L.next();!K.done;K=L.next())J=K.value,E(J)&&(H.push(v(J,I,"","")),H.push(y(J,I,"","")));M=t(a);for(O=M.next();!O.done;O=M.next())for(N=O.value,P=t(k[N]||[]),R=P.next();!R.done;R=P.next())S=R.value,E(N)&&(H.push(v(N,null,S,"")),H.push(v(N,null,"",S)),H.push(y(N,null,S,"")),H.push(y(N,null,"",S)));return F(aa,Promise.all(H),2)}return aa.return(Yg(r))})} +function $h(a){return Q(function(b){if(1==b.g)return wa(b,2),F(b,df(ci,Promise.all([a.close().catch(function(){}),a.closed])),4);if(2!=b.g)return za(b,0);Aa(b);G(b)})} +function vh(a){var b;return Q(function(c){b=Array.from(a.i.entries());a.i.clear();return F(c,Promise.all(b.map(function(d){d=t(d);var e=d.next().value,f=d.next().value;return Q(function(g){if(1==g.g)return wa(g,2),a.oa||a.B.has(e.sessionId)||"persistent-license"!==f.type||a.g.persistentSessionOnlinePlayback?F(g,$h(e),5):F(g,e.remove(),5);if(2!=g.g)return za(g,0);Aa(g);G(g)})})),0)})}function Dh(a){return(a.video?a.video.drmInfos:[]).concat(a.audio?a.audio.drmInfos:[])} +function qh(a){a.i.forEach(function(b,c){var d=b.Ng,e=c.expiration;isNaN(e)&&(e=Infinity);e!=d&&(a.C.onExpirationUpdated(c.sessionId,e),b.Ng=e)})}function Oh(a){a=a.i.values();return Wg(a,function(b){return b.loaded})}function Nh(a){for(var b=t(a.h&&a.h.keyIds||new Set([])),c=b.next();!c.done;c=b.next())if("usable"!==a.W.get(c.value))return!1;return!0} +function Ch(a,b){var c=[];b.forEach(function(d,e){c.push({keySystem:e,licenseServerUri:d,distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,serverCertificateUri:"",initData:[],keyIds:new Set})});a=t(a);for(b=a.next();!b.done;b=a.next())b=b.value,b.video&&(b.video.drmInfos=c),b.audio&&(b.audio.drmInfos=c)} +function Uh(a,b,c,d,e,f,g,h){var k=[];a=t(a);for(var l=a.next(),m={};!l.done;m={Ha:void 0},l=a.next()){m.Ha=l.value;b.includes(m.Ha.encryptionScheme)||b.push(m.Ha.encryptionScheme);"org.w3.clearkey"==m.Ha.keySystem&&m.Ha.licenseServerUri.startsWith("data:application/json;base64,")?k.includes(m.Ha.licenseServerUri)||k.push(m.Ha.licenseServerUri):c.includes(m.Ha.licenseServerUri)||c.push(m.Ha.licenseServerUri);e.includes(m.Ha.serverCertificateUri)||e.push(m.Ha.serverCertificateUri);m.Ha.serverCertificate&& +(d.some(function(r){return function(u){return Sb(u,r.Ha.serverCertificate)}}(m))||d.push(m.Ha.serverCertificate));if(m.Ha.initData){l=t(m.Ha.initData);for(var n=l.next(),q={};!n.done;q={Eg:void 0},n=l.next())q.Eg=n.value,f.some(function(r){return function(u){var w=r.Eg;return u.keyId&&u.keyId==w.keyId?!0:u.initDataType==w.initDataType&&Sb(u.initData,w.initData)}}(q))||f.push(q.Eg)}if(m.Ha.keyIds)for(l=t(m.Ha.keyIds),n=l.next();!n.done;n=l.next())g.add(n.value);if(m.Ha.keySystemUris&&h)for(m=t(m.Ha.keySystemUris), +l=m.next();!l.done;l=m.next())h.add(l.value)}if(1==k.length)c.push(k[0]);else if(0>10)+96)+String.fromCharCode(((a&960)>>5)+96)+String.fromCharCode((a&31)+96)}} +function Bi(a,b,c){var d=a.T(),e=[],f=null;c&1&&(f=a.Sg());c&4&&a.skip(4);for(var g=0;ga?"0":"")+a};function Hi(a){if(!Ii){Ii=!0;var b=new Uint8Array([105,115,111,109]),c=new Uint8Array([97,118,99,49]),d=new Uint8Array([0,0,0,1]);Ji=Ki("ftyp",b,d,b,c);b=Ki("dref",Li);Mi=Ki("dinf",b)}this.g=a} +function Ni(a){for(var b=[],c=t(a.g),d=c.next();!d.done;d=c.next()){var e=b,f=e.push;var g=d.value;d=Ki;var h=g.id+1;var k=g.stream.width||0,l=g.stream.height||0;"audio"==g.type&&(l=k=0);var m=g.duration*g.timescale,n=Math.floor(m/(Oi+1));m=Math.floor(m%(Oi+1));h=new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3].concat(x(Pi(h,4)),[0,0,0,0],x(Pi(n,4)),x(Pi(m,4)),[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0],x(Pi(k,2)),[0,0],x(Pi(l, +2)),[0,0]));h=Ki("tkhd",h);k=Ki;n=g.duration*g.timescale;l=Math.floor(n/(Oi+1));n=Math.floor(n%(Oi+1));m=g.stream.language;m=m.charCodeAt(0)-96<<10|m.charCodeAt(1)-96<<5|m.charCodeAt(2)-96;l=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3].concat(x(Pi(g.timescale,4)),x(Pi(l,4)),x(Pi(n,4)),x(Pi(m,2)),[0,0]));l=Ki("mdhd",l);n=g;m=new Uint8Array([]);switch(n.type){case "video":m=Qi;break;case "audio":m=Ri}n=Ki("hdlr",m);a:{switch(g.type){case "video":g=Ki("minf",Ki("vmhd",Si),Mi,Ti(g));break a; +case "audio":g=Ki("minf",Ki("smhd",Ui),Mi,Ti(g));break a}g=new Uint8Array([])}g=k("mdia",l,n,g);d=d("trak",h,g);f.call(e,d)}b=pc.apply(jc,x(b));f=a.g[0];c=Ki;d=f.duration*f.timescale;e=Math.floor(d/(Oi+1));d=Math.floor(d%(Oi+1));e=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3].concat(x(Pi(f.timescale,4)),x(Pi(e,4)),x(Pi(d,4)),[0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255, +255]));e=Ki("mvhd",e);d=[];a=t(a.g);for(k=a.next();!k.done;k=a.next())g=d,h=g.push,k=new Uint8Array([0,0,0,0].concat(x(Pi(k.value.id+1,4)),[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0])),k=Ki("trex",k),h.call(g,k);a=pc.apply(jc,x(d));a=Ki("mvex",a);d=[];if(f.encrypted){f=t(f.stream.drmInfos);for(g=f.next();!g.done;g=f.next())if(g=g.value,g.initData)for(g=t(g.initData),h=g.next();!h.done;h=g.next())d.push(h.value.initData);f=pc.apply(jc,x(d))}else f=new Uint8Array([]);a=c("moov",e,b,a,f);b=new Uint8Array(Ji.byteLength+ +a.byteLength);b.set(Ji);b.set(a,Ji.byteLength);return b} +function Ti(a){var b=Ki,c="aac";a.codecs.includes("mp3")?c="mp3":a.codecs.includes("ac-3")?c=qb().ae()?"ec-3":"ac-3":a.codecs.includes("ec-3")?c="ec-3":a.codecs.includes("opus")&&(c="opus");var d=new Uint8Array([]);switch(a.type){case "video":if(a.codecs.includes("avc1")){c=a.stream.width||0;d=a.stream.height||0;if(0>8,f[n++]=g[k].length&255,f.set(g[k],n),n+=g[k].length;f[n++]=h.length;for(g=0;g>8,f[n++]=h[g].length&255,f.set(h[g],n),n+=h[g].length;e=e("avcC",f)}c=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0].concat(x(Pi(c,2)),x(Pi(d,2)),[0,72,0,0,0,72, +0,0,0,0,0,0,0,1,19,118,105,100,101,111,106,115,45,99,111,110,116,114,105,98,45,104,108,115,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]));d="avc1";h=Wi(a);g=new Uint8Array([]);a.encrypted&&(g=Xi(0,a.stream,a.codecs),d="encv");d=Ki(d,c,e,h,g)}else a.codecs.includes("hvc1")&&(d=a.stream.width||0,e=a.stream.height||0,c=new Uint8Array([]),0>>1,h<<7|e<<3,6,1,2]));c=c("esds",d)}d="mp4a";e=new Uint8Array([]);a.encrypted&&(e=Xi(0,a.stream,a.codecs),d="enca");a=Ki(d,Yi(a),c,e)}d=a}a=Ki("stsd",Zi,d);return b("stbl",a,Ki("stts",$i),Ki("stsc",aj),Ki("stsz",bj),Ki("stco",cj))}function Wi(a){if(!a.Wa&&!a.Xa)return new Uint8Array([]);var b=a.Xa;a=new Uint8Array([].concat(x(Pi(a.Wa,4)),x(Pi(b,4))));return Ki("pasp",a)} +function Yi(a){return new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,a.stream.channelsCount||2,0,16,0,0,0,0].concat(x(Pi(a.stream.audioSamplingRate||44100,2)),[0,0]))} +function Xi(a,b,c){a=Ki;c=new Uint8Array([].concat(x(Pi(dj(c.split(".")[0]),4))));c=Ki("frma",c);var d="cenc";var e=b.drmInfos[0];e&&e.encryptionScheme&&(d=e.encryptionScheme);d=new Uint8Array([0,0,0,0].concat(x(Pi(dj(d),4)),[0,1,0,0]));d=Ki("schm",d);e=Ki;var f=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);b=t(b.drmInfos);for(var g=b.next();!g.done;g=b.next())if((g=g.value)&&g.keyIds&&g.keyIds.size){g=t(g.keyIds);for(var h=g.next();!h.done;h=g.next())f=Vi(h.value)}b=new Uint8Array([0,0,0,0,0, +0,1,8]);b=Ki("tenc",b,f);return a("sinf",c,d,e("schi",b))} +function ej(a){var b=[];a=t(a.g);for(var c=a.next();!c.done;c=a.next()){c=c.value;var d=b.push,e=d.apply;var f=Ki;var g=new Uint8Array([0,0,0,0].concat(x(Pi(c.data?c.data.Tb:0,4))));g=Ki("mfhd",g);var h;var k=c.data?c.data.xb:[];var l=new Uint8Array(4+k.length);for(h=0;h>8*b&255);return c}function Vi(a){for(var b=new Uint8Array(a.length/2),c=0;c>24&255;e[1]=d>>16&255;e[2]=d>>8&255;e[3]=d&255;e.set(c,4);c=0;for(d=8;c>8*m&255);a.set(new Uint8Array(l),h);a.set(k,h+4);h=t(g);for(k=h.next();!k.done;k=h.next())k=k.value,mj(a,k.start,k.size+4)}}return a} +function jj(a,b,c,d,e,f){var g=Xi(new Hi([]),a,d.name),h=b.subarray(d.start,d.start+d.size);a=new Uint8Array(d.size+g.byteLength);a.set(h,0);Yb(a).setUint32(4,f);a.set(g,d.size);mj(a,0,a.byteLength);f=new Uint8Array(b.byteLength+a.byteLength);d=qb().Ze()?d.start:d.start+d.size;g=b.subarray(d);f.set(b.subarray(0,d));f.set(a,d);f.set(g,d+a.byteLength);b=t(e);for(e=b.next();!e.done;e=b.next())e=e.value,mj(f,e.start,e.size+a.byteLength);a=Yb(f,c.start);c=hh(c);b=a.getUint32(c);a.setUint32(c,b+1);return f} +function mj(a,b,c){a=Yb(a,b);b=a.getUint32(0);0!=b&&(1==b?(a.setUint32(8,c>>32),a.setUint32(12,c&4294967295)):a.setUint32(0,c))} +function nj(a){function b(e){d.push({start:e.start,size:e.size});gh(e)}var c=Tb(a),d=[];(new bh).box("moov",b).box("trak",b).box("mdia",b).box("minf",b).box("stbl",b).box("stsd",function(e){d.push({start:e.start,size:e.size});for(var f=Yb(c,e.start),g=0;ga.end(0)-a.start(0)}function vj(a){return!a||uj(a)?null:a.length?a.end(a.length-1):null}function wj(a,b){return!a||!a.length||uj(a)||b>a.end(a.length-1)?!1:b>=a.start(0)}function xj(a,b){if(!a||!a.length||uj(a))return 0;var c=0;a=t(yj(a));for(var d=a.next();!d.done;d=a.next()){var e=d.value;d=e.start;e=e.end;e>b&&(c+=e-Math.max(d,b))}return c} +function zj(a,b,c){if(!a||!a.length||uj(a))return null;a=yj(a).findIndex(function(d,e,f){return d.start>b&&(0==e||f[e-1].end-b<=c)});return 0<=a?a:null}function yj(a){if(!a)return[];for(var b=[],c=0;ca[b+3]&&255>a[b+4]&&128>a[b+6]&&128>a[b+7]&&128>a[b+8]&&128>a[b+9]?!0:!1}function Jj(a,b){return b+10<=a.length&&51===a[b]&&68===a[b+1]&&73===a[b+2]&&255>a[b+3]&&255>a[b+4]&&128>a[b+6]&&128>a[b+7]&&128>a[b+8]&&128>a[b+9]?!0:!1}function Kj(a,b){var c=(a[b]&127)<<21;c|=(a[b+1]&127)<<14;c|=(a[b+2]&127)<<7;return c|=a[b+3]&127} +function Lj(a){var b={key:a.type,description:"",data:"",mimeType:null,pictureType:null};if("APIC"===a.type){if(2>a.size||3!==a.data[0])return null;var c=a.data.subarray(1).indexOf(0);if(-1===c)return null;var d=ac(Tb(a.data,1,c)),e=a.data[2+c],f=a.data.subarray(3+c).indexOf(0);if(-1===f)return null;var g=ac(Tb(a.data,3+c,f)),h;"--\x3e"===d?h=ac(Tb(a.data,4+c+f)):h=Ub(a.data.subarray(4+c+f));b.mimeType=d;b.pictureType=e;b.description=g;b.data=h;return b}if("TXXX"===a.type){if(2>a.size||3!==a.data[0])return null; +d=a.data.subarray(1).indexOf(0);if(-1===d)return null;c=ac(Tb(a.data,1,d));a=ac(Tb(a.data,2+d)).replace(/\0*$/,"");b.description=c;b.data=a;return b}if("WXXX"===a.type){if(2>a.size||3!==a.data[0])return null;d=a.data.subarray(1).indexOf(0);if(-1===d)return null;c=ac(Tb(a.data,1,d));a=ac(Tb(a.data,2+d)).replace(/\0*$/,"");b.description=c;b.data=a;return b}if("PRIV"===a.type){if(2>a.size)return null;c=a.data.indexOf(0);if(-1===c)return null;c=ac(Tb(a.data,0,c));b.description=c;"com.apple.streaming.transportStreamTimestamp"== +c?(c=a.data.subarray(c.length+1),a=c[3]&1,c=(c[4]<<23)+(c[5]<<15)+(c[6]<<7)+c[7],c/=45,a&&(c+=4.772185884E7),b.data=c):(a=Ub(a.data.subarray(c.length+1)),b.data=a);return b}if("T"===a.type[0]){if(2>a.size||3!==a.data[0])return null;a=ac(a.data.subarray(1)).replace(/\0*$/,"");b.data=a;return b}return"W"===a.type[0]?(a=ac(a.data).replace(/\0*$/,""),b.data=a,b):a.data?(b.data=Ub(a.data),b):null} +function Mj(a){for(var b=0,c=[];Ij(a,b);){var d=Kj(a,b+6);a[b+5]>>6&1&&(b+=10);b+=10;for(d=b+d;b+10>6&1&&(d+=10),d+=10,d+=Kj(a,b+6),Jj(a,b+10)&&(d+=10),b+=d;return 0>>32-c;a.g-=c;0>>b))return a.h<<=b,a.g-=b,b;Qj(a);return b+Tj(a)}function Uj(a){Rj(a,1+Tj(a))}function X(a){var b=Tj(a);return Sj(a,b+1)-1}function Vj(a){a=X(a);return 1&a?1+a>>>1:-1*(a>>>1)}function Wj(a){return 1===Sj(a,1)}function Xj(a){return Sj(a,8)} +function Yj(a,b){for(var c=8,d=8,e=0;ea.length)return this;for(var b=Math.max(0,bk(a)),c=a.length-(a.length+b)%188,d=!1,e=b;e>4){var h=e+5+a[e+4];if(h==e+188)continue}else h=e+4;switch(g){case 0:f&&(h+=a[h]+1);this.G=(a[h+10]&31)<<8|a[h+11];break;case 17:case 8191:break;case this.G:f&&(h+=a[h]+1);f=a;g={audio:-1,video:-1,Xe:-1,audioCodec:"",videoCodec:""};var k=h+3+((f[h+1]&15)<<8|f[h+2])-4;for(h+=12+((f[h+10]&15)<<8|f[h+11]);h< +k;){var l=(f[h+1]&31)<<8|f[h+2],m=(f[h+3]&15)<<8|f[h+4];switch(f[h]){case 6:if(0b.byteLength-6)return null;var d=b[7];if(d&192){var e=536870912*(b[9]&14)+4194304*(b[10]&255)+16384*(b[11]&254)+128*(b[12]&255)+(b[13]&254)/2;null==a.s&&(a.s=e);c.pts=dk(e,a.s);a.s=c.pts;c.dts=c.pts;d&64&&(d=536870912*(b[14]&14)+4194304*(b[15]&255)+16384*(b[16]&254)+128*(b[17]&255)+(b[18]&254)/2,null==a.o&&(a.o=d),c.dts=dk(d, +a.o));a.o=c.dts}a=b[8]+9;if(b.byteLength<=a)return null;c.data=b.subarray(a);return c}p.wk=function(a){wb("TsParser.parseAvcNalus","Please use parseNalus function instead.");return this.Pg(a,{Wd:null,state:null})}; +p.Pg=function(a,b){var c=a.pts?a.pts/9E4:null;a=a.data;var d=a.byteLength,e=1;"hvc"==this.m&&(e=2);var f=b.state||0,g=f,h=0,k=[],l=-1,m=0;-1==f&&(l=0,m="hvc"==this.m?a[0]>>1&63:a[0]&31,f=0,h=1);for(;h>1&63:a[h]&31,l=h,f=0):f=-1}else f=0;else f=3;else f=n?0:1}0<=l&&0<=f&&k.push({data:a.subarray(l+e,d),fullData:a.subarray(l,d),type:m,time:c,state:f});!k.length&&b.Wd&&(c=k.length?k[k.length-1]:b.Wd)&&(c.data=pc(c.data,a),c.fullData=pc(c.fullData,a));b.state=f;return k}; +p.getMetadata=function(){for(var a=[],b=t(this.l),c=b.next();!c.done;c=b.next())c=pc.apply(jc,x(c.value)),(c=ck(this,c))&&a.push({cueTime:c.pts?c.pts/9E4:null,data:c.data,frames:Mj(c.data),dts:c.dts,pts:c.pts});return a}; +p.rb=function(){if(this.i.length&&!this.h.length){for(var a=!1,b=t(this.i),c=b.next();!c.done;c=b.next()){var d=pc.apply(jc,x(c.value)),e=ck(this,d);c=this.h.length?this.h[this.h.length-1]:null;e&&null!=e.pts&&null!=e.dts&&(!c||c.pts!=e.pts&&c.dts!=e.dts)?(this.h.length&&e.dts<(c.dts||0)&&(a=!0),this.h.push(e)):this.h.length&&(d=e?e.data:d)&&(c=this.h.pop(),c.data=pc(c.data,d),this.h.push(c))}a&&(this.h=this.h.sort(function(f,g){var h=(f.pts||0)-(g.pts||0);return(f.dts||0)-(g.dts||0)||h}))}return this.h}; +p.Mc=function(a){a=void 0===a?!0:a;if(this.j.length&&!this.g.length){for(var b=!1,c=t(this.j),d=c.next();!d.done;d=c.next()){var e=pc.apply(jc,x(d.value)),f=ck(this,e);d=this.g.length?this.g[this.g.length-1]:null;f&&null!=f.pts&&null!=f.dts&&(!d||d.pts!=f.pts&&d.dts!=f.dts)?(this.g.length&&f.dts<(d.dts||0)&&(b=!0),this.g.push(f)):this.g.length&&(e=f?f.data:e)&&(d=this.g.pop(),d.data=pc(d.data,e),this.g.push(d))}if(a){c={Wd:null,state:null};d=[];e=t(this.g);for(f=e.next();!f.done;f=e.next())f=f.value, +f.nalus=this.Pg(f,c),f.nalus.length&&(d.push(f),c.Wd=f.nalus[f.nalus.length-1]);this.g=d}b&&(this.g=this.g.sort(function(g,h){var k=(g.pts||0)-(h.pts||0);return(g.dts||0)-(h.dts||0)||k}))}return a?this.g:(a=this.g,this.g=[],a)};p.getStartTime=function(a){if("audio"==a){a=null;var b=this.rb();b.length&&(a=b[0],a=Math.min(a.dts,a.pts)/9E4);return a}return"video"==a?(a=null,b=this.Mc(!1),b.length&&(a=b[0],a=Math.min(a.dts,a.pts)/9E4),a):null};p.Ld=function(){return{audio:this.A,video:this.m}}; +p.We=function(){for(var a=[],b=t(this.Mc()),c=b.next();!c.done;c=b.next())a.push.apply(a,x(c.value.nalus));return a};p.Vj=function(){wb("TsParser.getVideoResolution","Please use getVideoInfo function instead.");var a=this.Cg();return{height:a.height,width:a.width}};p.Cg=function(){return"hvc"==this.m?mk(this):nk(this)};function ok(a){var b=a.Mc();return 1h?Yj(c,16):Yj(c,64))}}Uj(c);g=X(c);if(0===g)X(c);else if(1===g)for(Rj(c,1),Uj(c),Uj(c),g=X(c),h=0;hy;y++)Sj(d,2);for(y=0;yC;C++)H|=(E>>C&1)<<31-C;return H>>>0}(k);g=1==g?"H":"L";f="hvc1"+("."+["","A","B","C"][f]+h);f+="."+d.toString(16).toUpperCase();f+="."+g+u;r&&(f+="."+r.toString(16).toUpperCase());q&&(f+="."+q.toString(16).toUpperCase());n&&(f+="."+n.toString(16).toUpperCase());m&&(f+="."+m.toString(16).toUpperCase());l&&(f+="."+l.toString(16).toUpperCase()); +c&&(f+="."+c.toString(16).toUpperCase());b.codec=f;b.frameRate=ok(a);return b}function dk(a,b){var c=1;for(a>b&&(c=-1);4294967296bk(a)?!1:!0}function bk(a){for(var b=Math.min(1E3,a.length-564),c=0;ca.start(0)?0:a.length?a.start(0):null):a=null;return a}function Gk(a,b){return a.l.size?b==wc?a.h.h:vj(Fk(a,b)):null}function Hk(a,b,c){if(b==wc)return a=a.h,null==a.h||a.hb?F(g,Kk(e,a,function(){return Qk(e,a,b,c)},null),5):g.u(0)):e.m?F(g,Kk(e,f.Y,function(){return Qk(e,f.Y,b,c)},null),0):g.u(0)})}; +function Rk(a,b){var c;return Q(function(d){return 1==d.g?(c=yc,b==c.Oa?a.h?F(d,a.h.remove(0,Infinity),0):d.return():F(d,Kk(a,b,function(){return Qk(a,b,0,a.i.duration)},null),4)):a.m?F(d,Kk(a,c.Y,function(){return Qk(a,c.Y,0,a.i.duration)},null),0):d.u(0)})}p.flush=function(a){var b=this,c;return Q(function(d){return 1==d.g?(c=yc,a==c.Oa?d.return():F(d,Kk(b,a,function(){b.g.currentTime-=.001;Ck(b,a)},null),2)):b.m?F(d,Kk(b,c.Y,function(){var e=c.Y;b.g.currentTime-=.001;Ck(b,e)},null),0):d.u(0)})}; +function Sk(a,b,c,d,e,f,g,h,k){var l,m,n;return Q(function(q){if(1==q.g){l=yc;if(b==l.Oa)return f||(a.h.s=c),Ve(a.h,d,e),q.return();m=[];return F(q,Tk(a,b,g,h,k),2)}n=q.h;n||(m.push(Kk(a,b,function(){return Lk(a,b)},null)),a.m&&m.push(Kk(a,l.Y,function(){return Lk(a,l.Y)},null)));f||(m.push(Kk(a,b,function(){return Mk(a,b,c)},null)),a.m&&m.push(Kk(a,l.Y,function(){return Mk(a,l.Y,c)},null)));if(0!=d||Infinity!=e)m.push(Kk(a,b,function(){var r=a.l.get(b);r.appendWindowStart=0;r.appendWindowEnd=e;r.appendWindowStart= +d;Ck(a,b)},null)),a.m&&m.push(Kk(a,l.Y,function(){var r=l.Y,u=a.l.get(r);u.appendWindowStart=0;u.appendWindowEnd=e;u.appendWindowStart=d;Ck(a,r)},null));return m.length?F(q,Promise.all(m),0):q.u(0)})} +function Uk(a,b,c){var d,e;return Q(function(f){if(1==f.g){d=yc;if(b==d.Oa)return f.return();b==d.wa&&(a.Ua=new tg);if(!a.F||(e=Gk(a,b))&&.1>Math.abs(e-c))return f.return();Kk(a,b,function(){return Lk(a,b)},null);a.m&&Kk(a,d.Y,function(){return Lk(a,d.Y)},null);return F(f,Kk(a,b,function(){return Mk(a,b,c)},null),2)}return a.m?F(f,Kk(a,d.Y,function(){return Mk(a,d.Y,c)},null),0):f.u(0)})} +p.endOfStream=function(a){var b=this;return Q(function(c){return F(c,Vk(b,function(){xk(b)||yk(b)||(a?b.i.endOfStream(a):b.i.endOfStream())}),0)})};p.ob=function(a){var b=this;return Q(function(c){return F(c,Vk(b,function(){if(b.s.durationReductionEmitsUpdateEnd&&ac&&(c+=.001);var d=!0;"HLS"==a.S&&(d=Gk(a,b),d=!d||.15=b.o&&d&&!b.i)b.j&&b.j(b.g,e),b.i=!0,b.g=c.g.currentTime;b=!d}b&&(b=a.g.currentTime,c=a.g.buffered,d=zj(c,b,a.h.gapDetectionThreshold),null==d||0==d&&!a.A||(e=c.start(d), +(f=a.h.gapPadding)&&(e=Math.ceil(100*(e+f))/100),e>=a.B.Db()||.001>e-b||(0!=d&&c.end(d-1),a.g.currentTime=e,b==a.j&&(a.j=e),a.C++,a.s(new V("gapjumped")))))}}} +function gl(a){if(!a.h.stallEnabled)return null;var b=a.h.stallThreshold,c=a.h.stallSkip;return new jl(new kl(a.g),b,function(){var d;return Q(function(e){if(1==e.g)return d=yj(a.g.buffered),d.length?c?(a.g.currentTime+=c,e.u(2)):F(e,a.g.play(),3):e.return();if(2!=e.g){if(!a.g)return e.return();a.g.pause();a.g.play()}a.G++;a.s(new V("stalldetected"));G(e)})})}function jl(a,b,c){this.h=a;this.m=il(a);this.g=a.g.currentTime;this.l=Date.now()/1E3;this.i=!1;this.o=b;this.j=c} +jl.prototype.release=function(){this.h&&this.h.release();this.j=this.h=null};function kl(a){var b=this;this.g=a;this.h=new jb;this.i=!1;this.h.D(this.g,"audiofocuspaused",function(){b.i=!0});this.h.D(this.g,"audiofocusgranted",function(){b.i=!1});this.h.D(this.g,"audiofocuslost",function(){b.i=!0})} +function il(a){if(a.g.paused||0==a.g.playbackRate||a.i||0==a.g.buffered.length)var b=!1;else a:{b=a.g.currentTime;a=t(yj(a.g.buffered));for(var c=a.next();!c.done;c=a.next())if(c=c.value,!(bc.end-.5)){b=!0;break a}b=!1}return b}kl.prototype.release=function(){this.h&&this.h.release();this.h=null};function ll(a,b,c,d){b==HTMLMediaElement.HAVE_NOTHING||a.readyState>=b?d():(b=ml.value().get(b),c.za(a,b,d))}var ml=new pb(function(){return new Map([[HTMLMediaElement.HAVE_METADATA,"loadedmetadata"],[HTMLMediaElement.HAVE_CURRENT_DATA,"loadeddata"],[HTMLMediaElement.HAVE_FUTURE_DATA,"canplay"],[HTMLMediaElement.HAVE_ENOUGH_DATA,"canplaythrough"]])});function nl(a,b,c,d){var e=this;this.g=a;this.m=b;this.s=c;this.l=null;this.j=function(){null==e.l&&(e.l=d());return e.l};this.o=!1;this.h=new jb;this.i=new ol(a);ll(this.g,HTMLMediaElement.HAVE_METADATA,this.h,function(){pl(e,e.j())})}nl.prototype.release=function(){this.h&&(this.h.release(),this.h=null);null!=this.i&&(this.i.release(),this.i=null);this.m=function(){};this.g=null};function ql(a){return a.o?a.g.currentTime:a.j()} +function rl(a,b){0Math.abs(a.g.currentTime-b)?tl(a):(a.h.za(a.g,"seeking",function(){tl(a)}),sl(a.i,a.g.currentTime&&0!=a.g.currentTime?a.g.currentTime:b))}function tl(a){a.o=!0;a.h.D(a.g,"seeking",function(){return a.m()});a.s(a.g.currentTime)} +function ol(a){var b=this;this.g=a;this.m=10;this.j=this.l=this.i=0;this.h=new $e(function(){0>=b.i?b.h.stop():b.g.currentTime!=b.l||b.g.currentTime===b.j?b.h.stop():(b.g.currentTime=b.j,b.i--)})}ol.prototype.release=function(){this.h&&(this.h.stop(),this.h=null);this.g=null};function sl(a,b){a.l=a.g.currentTime;a.j=b;a.i=a.m;a.g.currentTime=b;a.h.Ga(.1)};function ul(a){this.g=a;this.i=!1;this.h=null;this.j=new jb}p=ul.prototype;p.ready=function(){function a(){if(null==b.h||0==b.h&&Infinity!=b.g.duration)b.i=!0;else{var c=b.g.currentTime,d=null;if("number"===typeof b.h)d=b.h;else if(b.h instanceof Date){var e=vl(b);null!==e&&(d=b.h.getTime()/1E3-e,d=wl(b,d))}null==d?b.i=!0:(0>d&&(d=Math.max(0,c+d)),c!=d?(b.j.za(b.g,"seeking",function(){b.i=!0}),b.g.currentTime=d):b.i=!0)}}var b=this;ll(this.g,HTMLMediaElement.HAVE_FUTURE_DATA,this.j,function(){a()})}; +p.release=function(){this.j&&(this.j.release(),this.j=null);this.g=null};p.Pf=function(a){this.h=this.i?this.h:a};p.Be=function(){var a=this.i?this.g.currentTime:this.h;a instanceof Date&&(a=a.getTime()/1E3-(vl(this)||0),a=wl(this,a));return a||0};p.Bh=function(){return 0};p.Ah=function(){return 0};p.mi=function(){};p.Zh=function(){var a=vj(this.g.buffered);return null!=a&&a>=this.g.duration-1};function vl(a){return a.g.getStartDate&&(a=a.g.getStartDate().getTime(),!isNaN(a))?a/1E3:null} +function wl(a,b){a=a.g.seekable;0l-k&&(k=l-3);ha.g.getDuration()?a.g.Vb():a.g.Db():b instanceof Date?b=b.getTime()/1E3-(a.g.m||a.g.i):0>b&&(b=a.g.Db()+b);return Bl(a,Al(a,b))}p.mi=function(){this.j.pf()};p.Zh=function(){if(this.g.V()){var a=this.g.vc(),b=vj(this.h.buffered);if(null!=b&&b>=a)return!0}return!1}; +function Bl(a,b){var c=a.g.getDuration();return b>=c?c-a.l.durationBackoff:b}function yl(a,b){var c=a.l.rebufferingGoal,d=a.l.safeSeekOffset,e=a.g.Vb(),f=a.g.Db(),g=a.g.getDuration();3>f-e&&(e=f-3);var h=a.g.Nd(c),k=a.g.Nd(d);c=a.g.Nd(c+d);return b>=g?Bl(a,b):b>f?f-a.l.safeSeekEndOffset:b=h||wj(a.h.buffered,b)?b:c}function Al(a,b){var c=a.g.Vb();if(ba?a:b};function Cl(a){this.g=a;this.m=null;this.i=0;this.o=!1}p=Cl.prototype;p.getNumReferences=function(){return this.g.length};p.getNumEvicted=function(){return this.i};p.release=function(){this.o||(this.g=[],this.m&&this.m.stop(),this.m=null)};p.nk=function(){this.o=!0};p.Cb=function(a){for(var b=t(this.g),c=b.next();!c.done;c=b.next())a(c.value)};function Qf(a){return a.g[0]||null} +p.find=function(a){for(var b=this.g.length-1,c=b;0<=c;--c){var d=this.g[c],e=c=d.startTime&&aa||a>=this.g.length?null:this.g[a]};p.offset=function(a){if(!this.o)for(var b=t(this.g),c=b.next();!c.done;c=b.next())c.value.offset(a)}; +p.hf=function(a){if(!this.o&&a.length){var b=Math.round(1E3*a[0].startTime)/1E3;this.g=this.g.filter(function(c){return Math.round(1E3*c.startTime)/1E3b&&(0==c.g.length||d.endTime>c.g[0].startTime)});this.hf(a);this.$a(b)};p.$a=function(a){if(!this.o){var b=this.g.length;this.g=this.g.filter(function(c){return c.endTime>a});this.i+=b-this.g.length}}; +p.gd=function(a,b,c){c=void 0===c?!1:c;if(!this.o){for(;this.g.length;)if(this.g[this.g.length-1].startTime>=b)this.g.pop();else break;for(;this.g.length;)if(this.g[0].endTime<=a)this.g.shift(),c||this.i++;else break;0!=this.g.length&&(a=this.g[this.g.length-1],b=new qj(a.startTime,b,a.C,a.startByte,a.endByte,a.Z,a.timestampOffset,a.appendWindowStart,a.appendWindowEnd,a.g,a.tilesLayout,a.B,a.h,a.status,a.aesKey),b.mimeType=a.mimeType,b.codecs=a.codecs,b.i=a.i,this.g[this.g.length-1]=b)}}; +p.Ff=function(a,b){var c=this;this.o||(this.m&&this.m.stop(),this.m=new $e(function(){var d=b();d?c.g.push.apply(c.g,x(d)):(c.m.stop(),c.m=null)}),this.m.Ga(a))};Cl.prototype[Symbol.iterator]=function(){return this.Ub(0)}; +Cl.prototype.Ub=function(a,b,c){b=void 0===b?!1:b;c=void 0===c?!1:c;var d=this.find(a);if(null==d)return null;var e=this.get(d);c?d++:d--;var f=-1;if(e&&0=h.startTime&&a=a.g.length&&(this.h++,this.g=0,a=this.i.get(this.h));return a&&0this.g&&(this.h--,this.g=(a=this.i.get(this.h))&&0=this.g);)this.g--,b=a.g[this.g]}; +T("shaka.media.SegmentIterator",Dl);Dl.prototype.resetToLastIndependent=Dl.prototype.Xg;Dl.prototype.next=Dl.prototype.next;Dl.prototype.current=Dl.prototype.current;Dl.prototype.currentPosition=Dl.prototype.lj;Dl.prototype.setReverse=Dl.prototype.yd;function Fl(){Cl.call(this,[]);this.h=[]}pa(Fl,Cl);p=Fl.prototype;p.clone=function(){var a=new Fl;a.h=this.h.slice();a.i=this.i;return a};p.release=function(){for(var a=t(this.h),b=a.next();!b.done;b=a.next())b.value.release();this.h=[]}; +p.Cb=function(a){for(var b=t(this.h),c=b.next();!c.done;c=b.next())c.value.Cb(a)};function Gl(a,b){a=t(a.h);for(var c=a.next();!c.done;c=a.next())b(c.value)}p.find=function(a){for(var b=this.i,c=t(this.h),d=c.next();!d.done;d=c.next()){d=d.value;var e=d.find(a);if(null!=e)return e+b;b+=d.getNumEvicted()+d.getNumReferences()}return null};function Hl(a,b){a=t(a.h);for(var c=a.next();!c.done;c=a.next())if(c=c.value,null!=c.find(b))return c.Oe();return-1} +p.get=function(a){for(var b=this.i,c=t(this.h),d=c.next();!d.done;d=c.next()){d=d.value;var e=d.get(a-b);if(e)return e;e=d.getNumReferences();b+=d.getNumEvicted()+e}return null};p.offset=function(){};p.hf=function(){};p.$a=function(a){for(var b=t(this.h),c=b.next();!c.done;c=b.next())c.value.$a(a);for(;1=c});0<=b?d.splice(b,d[b].position==c?1:0,a):d.push(a)} +Ml.prototype.j=function(a){for(var b=t(this.g.values()),c=b.next();!c.done;c=b.next()){c=c.value;var d=c.fg;a:{var e=c.$d;for(var f=e.length-1;0<=f;f--){var g=e[f];if(g.position<=a){e=g.nd;break a}}e=null}f=e&&!(d===e||d&&e&&d.bandwidth==e.bandwidth&&d.audioSamplingRate==e.audioSamplingRate&&d.codecs==e.codecs&&d.contentType==e.contentType&&d.frameRate==e.frameRate&&d.height==e.height&&d.mimeType==e.mimeType&&d.channelsCount==e.channelsCount&&d.pixelAspectRatio==e.pixelAspectRatio&&d.width==e.width); +g=e&&d&&e.label&&d.label&&d.label!==e.label;var h=e&&d&&e.language&&d.language&&d.language!==e.language;d=e&&d&&e.roles&&d.roles&&!Wc(d.roles,e.roles);(g||h||d)&&Ql(this,a,e.contentType)&&(c.fg=e,d=new V("audiotrackchange",new Map([["quality",e],["position",a]])),this.dispatchEvent(d));f&&Ql(this,a,e.contentType)&&(c.fg=e,JSON.stringify(e),c=new V("qualitychange",new Map([["quality",e],["position",a]])),this.dispatchEvent(c))}}; +function Ql(a,b,c){return(a=a.h()[c])&&0=a[0].start&&b=d?!1:!0})}else b.$d=[]} +function Rl(a){var b={bandwidth:a.bandwidth||0,audioSamplingRate:null,codecs:a.codecs,contentType:a.type,frameRate:null,height:null,mimeType:a.mimeType,channelsCount:null,pixelAspectRatio:null,width:null,label:null,roles:a.roles,language:null};"video"==a.type&&(b.frameRate=a.frameRate||null,b.height=a.height||null,b.pixelAspectRatio=a.pixelAspectRatio||null,b.width=a.width||null);"audio"==a.type&&(b.audioSamplingRate=a.audioSamplingRate,b.channelsCount=a.channelsCount,b.label=a.label||null,b.language= +a.language);return b};function Sl(a){Dg.call(this);this.h=new Map;this.i=a;this.g=null}pa(Sl,Dg);Sl.prototype.release=function(){this.h.clear();this.g&&(this.g.stop(),this.g=null);Dg.prototype.release.call(this)};function Tl(a,b){var c=b.schemeIdUri+"_"+b.id+"_"+(b.startTime.toFixed(1)+"_"+b.endTime.toFixed(1));a.h.has(c)||(a.h.set(c,b),b=new V("regionadd",new Map([["region",b]])),a.dispatchEvent(b),Ul(a))} +function Ul(a){a.g||(a.g=(new $e(function(){for(var b=a.i(),c=t(a.h),d=c.next();!d.done;d=c.next()){var e=t(d.value);d=e.next().value;e=e.next().value;e.endTimed.endTime&&cm(this,d);b&&am(this)}; +Vl.prototype.yd=function(a){this.o=a;this.g&&this.g.yd(a)};function am(a){for(var b=Array.from(a.h.keys()),c=t(a.j.keys()),d=c.next(),e={};!d.done;e={Fg:void 0},d=c.next())e.Fg=d.value,b.some(function(f){return function(g){return pj(g.Z,f.Fg)}}(e))||cm(a,e.Fg)}function em(a,b){a.m=b;for(var c=Array.from(a.h.keys());c.length>b;){var d=c.pop();d&&cm(a,d)}am(a)}function fm(a,b){b&&b!==a.i&&(dm(a),a.i=b)}function cm(a,b){var c=a.h;b instanceof oj&&(c=a.j);a=c.get(b);c.delete(b);a&&a.abort()} +function Zl(a){this.g=a;this.Yd=this.mh=null}function $l(a,b,c){var d=new Uint8Array(0);a.Yd=a.g(b,c,function(e){return Q(function(f){if(1==f.g)return 0>3,31===L&&C.Fa()&&(L=32+((I&7)<<3)+((C.X()&224)>>5)),D+="."+L));g.push(D);k=!0}).box("ac-3",e).box("ec-3",e).box("ac-4",e).box("Opus",e).box("fLaC",e).box("avc1",d).box("avc3",d).box("hev1",d).box("hvc1",d).box("dva1",d).box("dvav",d).box("dvh1",d).box("dvhe",d).box("vp09", +d).box("av01",d).box("avcC",function(C){var D=y||"";switch(y){case "dvav":D="avc3";break;case "dva1":D="avc1"}C=C.reader;C.skip(1);C=D+"."+Fi(C.X())+Fi(C.X())+Fi(C.X());h.push(C);l=!0}).box("hvcC",function(C){var D=y||"";switch(y){case "dvh1":D="hvc1";break;case "dvhe":D="hev1"}var I=C.reader;I.skip(1);C=I.X();var L=["","A","B","C"][C>>6],K=C&31,J=I.T(),M=(C&32)>>5?"H":"L";C=[I.X(),I.X(),I.X(),I.X(),I.X(),I.X()];I=I.X();for(var O=0,N=0;32>N;N++){O|=J&1;if(31==N)break;O<<=1;J>>=1}D=D+("."+L+K)+("."+ +Fi(O,!0));D+="."+M+I;L="";for(K=C.length;K--;)if((M=C[K])||L)L="."+M.toString(16).toUpperCase()+L;D+=L;h.push(D);l=!0}).box("dvcC",function(C){var D=y||"";switch(y){case "hvc1":D="dvh1";break;case "hev1":D="dvhe";break;case "avc1":D="dva1";break;case "avc3":D="dvav";break;case "av01":D="dav1"}var I=C.reader;I.skip(2);C=I.X();I=I.X();h.push(D+"."+Gi(C>>1&127)+"."+Gi(C<<5&32|I>>3&31));l=!0}).box("dvvC",function(C){var D=y||"";switch(y){case "hvc1":D="dvh1";break;case "hev1":D="dvhe";break;case "avc1":D= +"dva1";break;case "avc3":D="dvav";break;case "av01":D="dav1"}var I=C.reader;I.skip(2);C=I.X();I=I.X();h.push(D+"."+Gi(C>>1&127)+"."+Gi(C<<5&32|I>>3&31));l=!0}).R("vpcC",function(C){var D=y||"",I=C.reader;C=I.X();var L=I.X();I=I.X()>>4&15;h.push(D+"."+Gi(C)+"."+Gi(L)+"."+Gi(I));l=!0}).box("av1C",function(C){var D=y||"";switch(y){case "dav1":D="av01"}var I=C.reader;I.skip(1);C=I.X();I=I.X();var L=C>>>5,K=(I&64)>>6;h.push(D+"."+L+"."+Gi(C&31)+(I>>>7?"H":"M")+"."+Gi(2===L&&K?(I&32)>>5?12:10:K?10:8)+"."+ +((I&16)>>4)+"."+((I&8)>>3)+((I&4)>>2)+(I&3)+"."+Gi(1)+"."+Gi(1)+"."+Gi(1)+".0");l=!0}).box("enca",kh).box("encv",jh).box("sinf",gh).box("frma",function(C){C=Di(C.reader).codec;f(C)}).box("colr",function(C){h=h.map(function(L){if(L.startsWith("av01.")){var K=C.reader,J=K.Ma(),M=K.Sb(4);var O=String.fromCharCode(M[0]);O+=String.fromCharCode(M[1]);O+=String.fromCharCode(M[2]);O+=String.fromCharCode(M[3]);if("nclx"===O){M=K.Aa();O=K.Aa();var N=K.Aa(),P=K.X()>>7,R=L.split(".");10==R.length&&(R[6]=Gi(M), +R[7]=Gi(O),R[8]=Gi(N),R[9]=String(P),L=R.join("."))}K.seek(J)}return L});var D=Ei(C.reader),I=D.colorGamut;w=D.le;v=I}).parse(a||b,!0);if(!g.length&&!h.length)return null;var z=k&&!l,A=new Map;if(l&&!c){c=new Lc("video/mp4");a&&c.init(a);try{c.rf(b);for(var B=t(c.Of()),E=B.next();!E.done;E=B.next()){var H=E.value;A.set(H,H)}}catch(C){}c.Bd()}return{type:z?"audio":"video",mimeType:z?"audio/mp4":"video/mp4",codecs:im(g.concat(h)).join(", "),language:m,height:n,width:q,channelCount:r,sampleRate:u,closedCaptions:A, +le:w,colorGamut:v,frameRate:null}}function im(a){var b=new Set,c=[];a=t(a);for(var d=a.next();!d.done;d=a.next()){d=d.value;var e=Ke(d);b.has(e)||(c.push(d),b.add(e))}b=xc("audio",c);d=xc("video",c);a=xc(wc,c);d=jm(d);b=b.concat(d).concat(a);return c.length&&!b.length?c:b} +function jm(a){if(1>=a.length)return a;var b=a.find(function(c){return c.startsWith("dvav.")||c.startsWith("dva1.")||c.startsWith("dvh1.")||c.startsWith("dvhe.")||c.startsWith("dav1.")||c.startsWith("dvc1.")||c.startsWith("dvi1.")});return b?Ec('video/mp4; codecs="'+b+'"')?[b]:a.filter(function(c){return c!=b}):a} +function km(a){var b=null;(new bh).box("moov",gh).box("trak",gh).box("mdia",gh).box("minf",gh).box("stbl",gh).R("stsd",ih).box("encv",jh).box("enca",kh).box("sinf",gh).box("schi",gh).R("tenc",function(c){c=c.reader;c.X();c.X();c.X();c.X();b=oc(c.Sb(16))}).parse(a,!0);return b} +function lm(a,b,c){var d,e,f,g,h;return Q(function(k){if(1==k.g)return d=b,d.cryptoKey?k.u(2):F(k,d.fetchKey(),3);e=d.iv;if(!e)for(e=Tb(new ArrayBuffer(16)),f=d.firstMediaSequenceNumber+c,g=e.byteLength-1;0<=g;g--)e[g]=f&255,f>>=8;"CBC"==b.blockCipherMode?h={name:"AES-CBC",iv:e}:h={name:"AES-CTR",counter:e,length:64};return k.return(window.crypto.subtle.decrypt(h,d.cryptoKey,a))})};function mm(a,b,c,d,e){a=Lg(a,d,e);if(0!=b||null!=c)a.headers.Range=c?"bytes="+b+"-"+c:"bytes="+b+"-";return a};function nm(a,b){var c=this;this.g=b;this.j=a;this.h=null;this.K=new Map;this.C=1;this.A=this.l=null;this.P=0;this.i=new Map;this.I=!1;this.S=null;this.B=!1;this.m=new Tg(function(){return om(c)});this.M=Date.now()/1E3;this.o=new Map;this.N={projection:null,hfov:null};this.W=0;this.U=Infinity;this.F=null;this.L=[];this.s=new $e(function(){if(c.j&&c.g)if(c.j.presentationTimeline.V()){var d=c.j.presentationTimeline.Vb(),e=c.j.presentationTimeline.Db();1a.g.sb(),d=t(a.i.values()),e=d.next();!e.done;e=d.next())e=e.value,e.sa&&e.sa.yd(c),e.ba&&e.ba.yd(c);d=t(a.o.values());for(e=d.next();!e.done;e=d.next())e.value.yd(c);if(c=a.i.get("video"))if(d=c.stream)if(b)(b=d.trickModeVideo)&&!c.Bc&&(Am(a,b,!1,0,!1),c.Bc=d);else if(b=c.Bc)c.Bc=null,Am(a,b,!0,0,!1)} +function Bm(a,b,c,d,e,f){c=void 0===c?!1:c;d=void 0===d?0:d;e=void 0===e?!1:e;f=void 0===f?!1:f;a.l=b;a.I&&(b.video&&Am(a,b.video,c,d,e,f),b.audio&&Am(a,b.audio,c,d,e,f))}function Cm(a,b){Q(function(c){if(1==c.g)return a.F=null,a.A=b,a.I?b.segmentIndex?c.u(2):F(c,b.createSegmentIndex(),2):c.return();Am(a,b,!0,0,!1);G(c)})}function Dm(a,b){for(var c=t(a.K.entries()),d=c.next();!d.done;d=c.next()){var e=t(d.value);d=e.next().value;e=e.next().value;d.includes(b.type)&&(e(),a.K.delete(d))}} +function Am(a,b,c,d,e,f){var g=a.i.get(b.type);g||b.type!=wc?g&&(g.Bc&&(b.trickModeVideo?(g.Bc=b,b=b.trickModeVideo):g.Bc=null),g.stream!=b||e)&&(a.o.has(b)?g.ba=a.o.get(b):g.ba&&fm(g.ba,b),b.type==wc&&(e=De(b.mimeType,b.codecs),Ak(a.g.aa,e,a.j.sequenceMode,b.external)),!a.o.has(g.stream)&&g.stream.closeSegmentIndex&&(g.Qa?(e="("+g.type+":"+g.stream.id+")",a.K.has(e)||a.K.set(e,g.stream.closeSegmentIndex)):g.stream.closeSegmentIndex()),e=g.stream.isAudioMuxedInVideo!=b.isAudioMuxedInVideo,g.stream= +b,g.sa=null,g.Vf=!!f,b.dependencyStream?g.Kd=wm(a,b.dependencyStream):g.Kd=null,e?Em(a,!0,!1):(c?g.Fc?g.Mf=!0:g.Qa?(g.Ec=!0,g.Ne=d,g.Mf=!0):(pm(g),Fm(a,g,!0,d).catch(function(h){if(a.g)a.g.onError(h)})):g.Qa||g.yb||xm(a,g,0),Gm(a,g).catch(function(h){if(a.g)a.g.onError(h)}))):vm(a,b)} +function Gm(a,b){var c,d;return Q(function(e){if(1==e.g){if(!b.Gb)return e.return();c=b.stream;d=b.Gb;return c.segmentIndex?e.u(2):F(e,c.createSegmentIndex(),2)}if(b.Gb!=d||b.stream!=c)return e.return();var f=a.g.Lc();var g=Gk(a.g.aa,b.type),h=b.stream.segmentIndex.find(b.Ia?b.Ia.endTime:f),k=null==h?null:b.stream.segmentIndex.get(h);h=k?k.endByte?k.endByte-k.startByte:null:null;k&&!h&&(h=(k.endTime-k.getStartTime())*(b.stream.bandwidth||0)/8);h?((k=k.Z)&&(h+=(k.endByte?k.endByte-k.startByte:null)|| +0),k=a.g.getBandwidthEstimate(),f=8*h/k<(g||0)-f-a.h.rebufferingGoal||b.Gb.h.g>h?!0:!1):f=!1;f&&b.Gb.abort();G(e)})} +p.Vc=function(){if(this.g){for(var a=this.g.Lc(),b=t(this.i.keys()),c=b.next();!c.done;c=b.next()){var d=c.value;c=this.i.get(d);var e=this.g.aa;d==wc?(e=e.h,e=null==e.g||null==e.h?!1:a>=e.g&&aa.g.sb()):null} +function sm(a){for(var b=a.h.segmentPrefetchLimit,c=a.h.prefetchAudioLanguages,d=t(a.j.variants),e=d.next(),f={};!e.done;f={Kb:void 0},e=d.next())if(f.Kb=e.value,f.Kb.audio)if(a.o.has(f.Kb.audio)){if(e=a.o.get(f.Kb.audio),em(e,b),!(0=b||!c.some(function(h){return function(k){return ff(h.Kb.audio.language,k)}}(f))||!(e=rm(a,f.Kb.audio))|| +(f.Kb.audio.segmentIndex||f.Kb.audio.createSegmentIndex(),a.o.set(f.Kb.audio,e))}p.updateDuration=function(){var a=Hc(),b=this.j.presentationTimeline.getDuration();Infinity>b?(a&&(this.s&&this.s.stop(),Xk(this.g.aa)),this.g.aa.ob(b)):a?(this.s&&this.s.Ga(.5),this.g.aa.ob(Infinity)):this.g.aa.ob(Math.pow(2,32))}; +function Km(a,b){var c,d,e,f,g,h;return Q(function(k){switch(k.g){case 1:Ug(a.m);if(b.Qa||null==b.yb||b.Fc)return k.return();b.yb=null;if(!b.Ec){k.u(2);break}return F(k,Fm(a,b,b.Mf,b.Ne),3);case 3:return k.return();case 2:Dm(a,b);if(b.stream.segmentIndex){k.u(4);break}c=b.stream;wa(k,5);return F(k,b.stream.createSegmentIndex(),7);case 7:za(k,6);break;case 5:return d=Aa(k),F(k,Lm(a,b,d),8);case 8:return k.return();case 6:if(c!=b.stream)return c.closeSegmentIndex&&c.closeSegmentIndex(),b.Qa||b.yb|| +xm(a,b,0),k.return();case 4:wa(k,9);e=Mm(a,b);null!=e&&(xm(a,b,e),b.Pd=!1);za(k,10);break;case 9:return f=Aa(k),F(k,Lm(a,b,f),11);case 11:return k.return();case 10:g=Array.from(a.i.values());if(!a.I||!g.every(function(l){return l.endOfStream})){k.u(0);break}return F(k,a.g.aa.endOfStream(),13);case 13:Ug(a.m),h=a.g.aa.getDuration(),0!=h&&hh&&k)return b.endOfStream=!0,"video"==b.type&&(a=a.i.get(wc))&&Nm(a)&&(a.endOfStream=!0),null;b.endOfStream=!1;if(g>=f)return c/2;h=!b.sa;k=Om(a,b,d,k);if(!k)return c;g=!1;h&&b.Vf&&(g=!0,b.Vf=!1);h=Infinity;var l=Array.from(a.i.values());l=t(l);for(var m=l.next();!m.done;m=l.next())m=m.value,Nm(m)||m.sa&&!m.sa.current()||(h=Math.min(h,m.Ia?m.Ia.endTime:d));if(e>=h+a.j.presentationTimeline.h)return c;if("keep"!==a.h.crossBoundaryStrategy&&Pm(a,b,k))return null;b.ba&&b.sa&& +!a.o.has(b.stream)&&(b.ba.$a(k.startTime+.001),Xl(b.ba,k.startTime).catch(function(){}));Qm(a,b,d,k,g).catch(function(){});b.Kd&&Rm(a,b.Kd,d,f);return null} +function Om(a,b,c,d){if(b.sa)return(c=b.sa.current())&&b.Ia&&.001>Math.abs(b.Ia.startTime-c.startTime)&&(c=b.sa.next().value),c;if(b.Ia||d)return c=b.Ia?b.Ia.endTime:d,a=0>a.g.sb(),b.stream.segmentIndex&&(b.sa=b.stream.segmentIndex.Ub(c,!1,a)),b.sa&&b.sa.next().value;d=a.j.sequenceMode?0:a.h.inaccurateManifestTolerance;var e=Math.max(c-d,0);a=0>a.g.sb();var f=null;d&&(b.stream.segmentIndex&&(b.sa=b.stream.segmentIndex.Ub(e,!1,a)),f=b.sa&&b.sa.next().value);f||(b.stream.segmentIndex&&(b.sa=b.stream.segmentIndex.Ub(c, +!1,a)),f=b.sa&&b.sa.next().value);return f} +function Qm(a,b,c,d,e){var f,g,h,k,l,m,n,q,r,u,w,v,y,z,A,B,E,H;return Q(function(C){switch(C.g){case 1:f=yc;g=b.stream;h=b.sa;b.Qa=!0;wa(C,2);if(2==d.xc())throw new U(1,1,1011);return F(C,Sm(a,b,d,e),4);case 4:Ug(a.m);if(a.B)return C.return();k="video/mp4"==g.mimeType||"audio/mp4"==g.mimeType;l=window.ReadableStream;if((m=a.h.lowLatencyMode&&a.j.isLowLatency)&&l&&k&&("HLS"!=a.j.type||d.m))return r=new Uint8Array(0),w=u=!1,y=function(D){var I,L,K,J;return Q(function(M){switch(M.g){case 1:if(u)return M.return();w= +!0;Ug(a.m);if(a.B)return M.return();wa(M,2);r=Tm(r,D);I=!1;L=0;(new bh).box("mdat",function(O){L=O.size+O.start;I=!0}).parse(r,!1,!0);if(!I){M.u(4);break}K=r.subarray(0,L);r=r.subarray(L);return F(M,Um(a,b,c,g,d,K,!0,e),5);case 5:b.ba&&b.sa&&Xl(b.ba,d.startTime,!0);case 4:za(M,0);break;case 2:v=J=Aa(M),G(M)}})},F(C,Vm(a,b,d,y),9);n=Vm(a,b,d);return F(C,n,7);case 7:q=C.h;Ug(a.m);if(a.B)return C.return();Ug(a.m);return b.Ec?(b.Qa=!1,xm(a,b,0),C.return()):F(C,Um(a,b,c,g,d,q,!1,e),6);case 9:z=C.h;if(v)throw v; +if(w){C.u(10);break}u=!0;Ug(a.m);return a.B?C.return():b.Ec?(b.Qa=!1,xm(a,b,0),C.return()):F(C,Um(a,b,c,g,d,z,!1,e),10);case 10:b.ba&&b.sa&&Xl(b.ba,d.startTime,!0);case 6:Ug(a.m);if(a.B)return C.return();b.Ia=d;h.next();b.Qa=!1;b.Ug=!1;A=a.g.aa.Lb();B=A[b.type];fb(JSON.stringify(B));b.Ec||(E=null,b.type===f.wa?E=a.i.get(f.Y):b.type===f.Y&&(E=a.i.get(f.wa)),E&&E.type==f.Y?a.g.pf(d,b.stream,E.stream.isAudioMuxedInVideo):a.g.pf(d,b.stream,b.stream.codecs.includes(",")));xm(a,b,0);za(C,0);break;case 2:H= +Aa(C);Ug(a.m,H);if(a.B)return C.return();b.Qa=!1;if(7001==H.code)b.Qa=!1,pm(b),xm(a,b,0),C.u(0);else if(b.type==f.Oa&&a.h.ignoreTextStreamFailures)a.i.delete(f.Oa),C.u(0);else{if(3017==H.code)return F(C,Wm(a,b,H),0);b.Pd=!0;1==H.category&&b.ba&&cm(b.ba,d);H.severity=2;return F(C,Lm(a,b,H),0)}}})} +function Rm(a,b,c,d){var e,f,g,h,k,l,m,n,q,r,u;return Q(function(w){switch(w.g){case 1:e=b.stream;for(h=(g=(f=e.segmentIndex)&&f.Ub(c))&&g.next().value;h&&a.L.includes(h.startTime);)h=g&&g.next().value;if(!h){w.u(0);break}k=h.Z;if(!k||pj(k,b.Ob)){w.u(3);break}b.Ob=k;wa(w,4);return F(w,Vm(a,b,k),6);case 6:l=w.h;var v=a.g.aa;v.M&&Bc(v.M,l,0,e);a.L=[];za(w,3);break;case 4:throw m=Aa(w),b.Ob=null,m;case 3:if(b.Ia&&b.Ia==h){w.u(0);break}b.Ia=h;wa(w,8);return F(w,Vm(a,b,h),10);case 10:n=w.h;v=a.g.aa;v.M&& +Bc(v.M,n,0,e);a.L.push(h.startTime);za(w,9);break;case 8:throw q=Aa(w),b.Ia=null,q;case 9:r=Math.max.apply(Math,[0].concat(x(a.L)));u=a.g.Lc();if(u+d>r)return F(w,Rm(a,b,h.startTime,d),0);w.u(0)}})}function Tm(a,b){var c=new Uint8Array(a.length+b.length);c.set(a);c.set(b,a.length);return c} +function Wm(a,b,c){var d,e,f,g,h,k;return Q(function(l){if(1==l.g){d=Array.from(a.i.values());if(e=d.some(function(m){return m!=b&&m.Ug}))return l.u(2);f=0===a.h.maxDisabledTime&&1011==c.code?1:a.h.maxDisabledTime;if(g=a.g.disableStream(b.stream,f))return l.return();if(a.h.avoidEvictionOnQuotaExceededError)return xm(a,b,4),l.return();h=Math.round(100*a.C);if(20k&&(n=Math.max(h-f,l-k-g));return n<=k?q.return():F(q,a.g.aa.remove(b.type,g,g+n,e), +2)}if(4!=q.g)return Ug(a.m),a.F?F(q,Xm(a,a.F,c),4):q.u(0);Ug(a.m);G(q)})}function Nm(a){return a&&a.type==wc&&("application/cea-608"==a.stream.mimeType||"application/cea-708"==a.stream.mimeType)} +function Vm(a,b,c,d){var e,f,g,h,k;return Q(function(l){switch(l.g){case 1:if(e=c.Wb())return l.return(e);f=null;if(b.ba){var m=b.ba,n=m.h;c instanceof oj&&(n=m.j);n.has(c)?(m=n.get(c),d&&(m.mh=d),f=m.Yd):f=null}f||(f=Jm(c,b.stream,d||null,a.h.retryParameters,a.g.lc));g=0;b.sa&&(g=b.sa.h);b.Gb=f;return F(l,f.promise,2);case 2:h=l.h;b.Gb=null;k=h.data;if(!c.aesKey){l.u(3);break}return F(l,lm(k,c.aesKey,g),4);case 4:k=l.h;case 3:return l.return(k)}})} +function Jm(a,b,c,d,e,f){f=void 0===f?!1:f;var g=a instanceof qj?a:void 0,h=g?1:0;a=mm(a.O(),a.startByte,a.endByte,d,c);a.contentType=b.type;return e.request(Rg,a,{type:h,stream:b,segment:g,isPreload:f})} +function Fm(a,b,c,d){var e,f;return Q(function(g){if(1==g.g)return b.Ec=!1,b.Mf=!1,b.Ne=0,b.Fc=!0,b.Ia=null,b.sa=null,b.ba&&!a.o.has(b.stream)&&dm(b.ba),d?(e=a.g.Lc(),f=a.g.aa.getDuration(),F(g,a.g.aa.remove(b.type,e+d,f),3)):F(g,Rk(a.g.aa,b.type),4);if(3!=g.g)return Ug(a.m),c?F(g,a.g.aa.flush(b.type),3):g.u(3);Ug(a.m);b.Fc=!1;b.endOfStream=!1;b.Qa||b.yb||xm(a,b,0);G(g)})} +function xm(a,b,c){var d=b.type;if(d!=wc||a.i.has(d))b.yb=(new Ze(function(){var e;return Q(function(f){if(1==f.g)return wa(f,2),F(f,Km(a,b),4);if(2!=f.g)return za(f,0);e=Aa(f);if(a.g)a.g.onError(e);G(f)})})).ha(c)}function pm(a){null!=a.yb&&(a.yb.stop(),a.yb=null)}function qm(a){return Q(function(b){return a.Gb?F(b,a.Gb.abort(),0):b.u(0)})} +function Lm(a,b,c){var d;return Q(function(e){if(1==e.g)return 3024==c.code?(b.Qa=!1,pm(b),xm(a,b,0),e.return()):F(e,sg(a.S),2);Ug(a.m);if(1===c.category&&1003!=c.code){if(b.Bc)return zm(a,!1),e.return();d=0===a.h.maxDisabledTime&&1011==c.code?1:a.h.maxDisabledTime;c.handled=a.g.disableStream(b.stream,d);c.handled&&(c.severity=1)}if(!c.handled||1011!=c.code)a.g.onError(c);c.handled||a.h.failureCallback(c);G(e)})} +function Em(a,b,c){b=void 0===b?!1:b;c=void 0===c?!0:c;var d,e,f,g,h,k;return Q(function(l){if(1==l.g){d=Date.now()/1E3;e=a.h.minTimeBetweenRecoveries;if(!b){if(!a.h.allowMediaSourceRecoveries||d-a.Mb||1e)break;if(0==e||"\\"!=a[e-1])f=a.substring(f,e).replace(/\\\./g,"."),d[f]={},d=d[f],f=e+1;e+=1}d[a.substring(f).replace(/\\\./g,".")]=b;return c}function cn(a,b){return a&&b} +function dn(a,b){function c(f){for(var g=t(Object.keys(f)),h=g.next();!h.done;h=g.next())if(h=h.value,!(f[h]instanceof HTMLElement))if(e(f[h])&&0===Object.keys(f[h]).length)delete f[h];else{var k=f[h];Array.isArray(k)&&0===k.length?delete f[h]:"function"==typeof f[h]?delete f[h]:e(f[h])&&(c(f[h]),0===Object.keys(f[h]).length&&delete f[h])}}function d(f,g){return Object.keys(f).reduce(function(h,k){var l=f[k];if(g.hasOwnProperty(k))if(l instanceof HTMLElement&&g[k]instanceof HTMLElement)l.isEqualNode(g[k])|| +(h[k]=l);else if(e(l)&&e(g[k])){if(l=d(l,g[k]),0"===c.substr(0,5)&&""===c.substr(-6)&&(c=c.slice(5,-6),a=!0);if(!a)try{var d=JSON.parse(c);d.ckc&&(c=d.ckc,a=!0);d.CkcMessage&&(c=d.CkcMessage,a=!0);d.License&&(c=d.License,a=!0)}catch(e){}a&&(b.data=Ub(mc(c)))}};en.muxFairPlayRequest=function(a,b){jn(a,b)}; +en.expressplayFairPlayRequest=function(a,b){if(2===a){var c=b.drmInfo;c&&ng(c.keySystem)&&jn(a,b)}};en.conaxFairPlayRequest=function(a,b){jn(a,b)};en.ezdrmFairPlayRequest=function(a,b){jn(a,b)};en.verimatrixFairPlayRequest=function(a,b){2===a&&(a=b.drmInfo)&&ng(a.keySystem)&&(a=Tb(b.body),a=lc(a),b.headers["Content-Type"]="application/x-www-form-urlencoded",b.body=ec("spc="+a))};en.muxInitDataTransform=function(a,b,c){return hn(a,b,c)}; +en.expressplayInitDataTransform=function(a,b,c){return hn(a,b,c)};en.conaxInitDataTransform=function(a,b,c){if("skd"!==b)return a;b=c.serverCertificate;c=dc(a).split("skd://").pop().split("?").shift();c=window.atob(c);var d=new ArrayBuffer(2*c.length);d=Xb(d);for(var e=0,f=c.length;eb?!1:!0}).sort(function(c,d){return c.audio||d.audio?c.audio?d.audio?(d.audio.channelsCount||0)-(c.audio.channelsCount||0):1:-1:0})}function on(a,b){if("AUTO"==b){var c=a.some(function(d){return d.video&&d.video.hdr&&"HLG"==d.video.hdr?!0:!1});b=un(c)}return a.filter(function(d){return d.video&&d.video.hdr&&d.video.hdr!=b?!1:!0})} +function nn(a,b){return a.filter(function(c){return c.video&&c.video.videoLayout&&c.video.videoLayout!=b?!1:!0})}function sn(a,b){return a.filter(function(c){return c.audio&&c.audio.spatialAudio!=b?!1:!0})}function tn(a,b){return a.filter(function(c){return c.audio&&c.audio.codecs!=b?!1:!0})};function vn(){} +function wn(){var a=Infinity,b=qb();navigator.connection&&navigator.connection.saveData&&(a=360);var c={retryParameters:rg(),servers:{},clearKeys:{},advanced:{},delayLicenseRequestUntilPlayed:!1,persistentSessionOnlinePlayback:!1,persistentSessionsMetadata:[],initDataTransform:function(h,k,l){"apple"===window.shakaMediaKeysPolyfill&&"skd"==k&&(k=l.serverCertificate,l=fn(h),h=gn(h,l,k));return h},logLicenseExchange:!1,updateExpirationTime:1,preferredKeySystems:[],keySystemsMapping:{},parseInbandPsshEnabled:!1, +minHdcpVersion:"",ignoreDuplicateInitData:!0,defaultAudioRobustnessForWidevine:"SW_SECURE_CRYPTO",defaultVideoRobustnessForWidevine:"SW_SECURE_DECODE"},d="reload",e=!1;Gc()&&b.Yc()&&(d="smooth",e=!0);e={retryParameters:rg(),availabilityWindowOverride:NaN,disableAudio:!1,disableVideo:!1,disableText:!1,disableThumbnails:!1,disableIFrames:!1,defaultPresentationDelay:0,segmentRelativeVttTiming:!1,raiseFatalErrorOnManifestUpdateRequestFailure:!1,continueLoadingWhenPaused:!0,ignoreSupplementalCodecs:!1, +updatePeriod:-1,ignoreDrmInfo:!1,dash:{clockSyncUri:"",disableXlinkProcessing:!0,xlinkFailGracefully:!1,ignoreMinBufferTime:!1,autoCorrectDrift:!0,initialSegmentLimit:1E3,ignoreSuggestedPresentationDelay:!1,ignoreEmptyAdaptationSet:!1,ignoreMaxSegmentDuration:!1,keySystemsByURI:{"urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b":"org.w3.clearkey","urn:uuid:e2719d58-a985-b3c9-781a-b030af78d30e":"org.w3.clearkey","urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed":"com.widevine.alpha","urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95":"com.microsoft.playready", +"urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95":"com.microsoft.playready","urn:uuid:94ce86fb-07ff-4f43-adb8-93d2fa968ca2":"com.apple.fps","urn:uuid:3d5e6d35-9b9a-41e8-b843-dd3c6e72c42c":"com.huawei.wiseplay"},manifestPreprocessor:xn,manifestPreprocessorTXml:yn,sequenceMode:!1,multiTypeVariantsAllowed:e,useStreamOnceInPeriodFlattening:!1,enableFastSwitching:!0},hls:{ignoreTextStreamFailures:!1,ignoreImageStreamFailures:!1,defaultAudioCodec:"mp4a.40.2",defaultVideoCodec:"avc1.42E01E",ignoreManifestProgramDateTime:!1, +ignoreManifestProgramDateTimeForTypes:[],mediaPlaylistFullMimeType:'video/mp2t; codecs="avc1.42E01E, mp4a.40.2"',liveSegmentsDelay:3,sequenceMode:b.Xc(),ignoreManifestTimestampsInSegmentsMode:!1,disableCodecGuessing:!1,disableClosedCaptionsDetection:!1,allowLowLatencyByteRangeOptimization:!0,allowRangeRequestsToGuessMimeType:!1},mss:{manifestPreprocessor:xn,manifestPreprocessorTXml:yn,sequenceMode:!1,keySystemsBySystemId:{"9a04f079-9840-4286-ab92-e65be0885f95":"com.microsoft.playready","79f0049a-4098-8642-ab92-e65be0885f95":"com.microsoft.playready"}}}; +var f={trackSelectionCallback:function(h){return Q(function(k){return k.return(h)})},downloadSizeCallback:function(h){var k;return Q(function(l){if(1==l.g)return navigator.storage&&navigator.storage.estimate?F(l,navigator.storage.estimate(),3):l.return(!0);k=l.h;return l.return(k.usage+h<.95*k.quota)})},progressCallback:function(h,k){return cn([h,k])},usePersistentLicense:!0,numberOfParallelDownloads:5},g={drm:c,manifest:e,streaming:{retryParameters:rg(),failureCallback:function(h){return cn([h])}, +rebufferingGoal:0,bufferingGoal:10,bufferBehind:30,evictionGoal:1,ignoreTextStreamFailures:!1,alwaysStreamText:!1,startAtSegmentBoundary:!1,gapDetectionThreshold:.5,gapPadding:0,gapJumpTimerTime:.25,durationBackoff:1,safeSeekOffset:5,safeSeekEndOffset:0,stallEnabled:!0,stallThreshold:1,stallSkip:.1,useNativeHlsForFairPlay:!0,inaccurateManifestTolerance:2,lowLatencyMode:!1,preferNativeDash:!1,preferNativeHls:!1,updateIntervalSeconds:1,observeQualityChanges:!1,maxDisabledTime:30,segmentPrefetchLimit:1, +prefetchAudioLanguages:[],disableAudioPrefetch:!1,disableTextPrefetch:!1,disableVideoPrefetch:!1,liveSync:{enabled:!1,targetLatency:.5,targetLatencyTolerance:.5,maxPlaybackRate:1.1,minPlaybackRate:.95,panicMode:!1,panicThreshold:60,dynamicTargetLatency:{enabled:!1,stabilityThreshold:60,rebufferIncrement:.5,maxAttempts:10,maxLatency:4,minLatency:1}},allowMediaSourceRecoveries:!0,minTimeBetweenRecoveries:5,vodDynamicPlaybackRate:!1,vodDynamicPlaybackRateLowBufferRate:.95,vodDynamicPlaybackRateBufferRatio:.5, +preloadNextUrlWindow:30,loadTimeout:30,clearDecodingCache:!1,dontChooseCodecs:!1,shouldFixTimestampOffset:!1,avoidEvictionOnQuotaExceededError:!1,crossBoundaryStrategy:"keep",returnToEndOfLiveWindowWhenOutside:!1},networking:{forceHTTP:!1,forceHTTPS:!1,minBytesForProgressEvents:16E3},mediaSource:{codecSwitchingStrategy:d,addExtraFeaturesToSourceBuffer:function(h){return cn([h],"")},forceTransmux:!1,insertFakeEncryptionInInit:!0,correctEc3Enca:!1,modifyCueCallback:function(h,k){return cn([h,k])},dispatchAllEmsgBoxes:!1, +useSourceElements:!0,durationReductionEmitsUpdateEnd:!0},offline:f,abrFactory:function(){return new eg},adaptationSetCriteriaFactory:function(){return new (Function.prototype.bind.apply(kn,[null].concat(x(Oa.apply(0,arguments)))))},abr:{enabled:!0,useNetworkInformation:!0,defaultBandwidthEstimate:1E6,switchInterval:8,bandwidthUpgradeTarget:.85,bandwidthDowngradeTarget:.95,restrictions:{minWidth:0,maxWidth:Infinity,minHeight:0,maxHeight:a,minPixels:0,maxPixels:Infinity,minFrameRate:0,maxFrameRate:Infinity, +minBandwidth:0,maxBandwidth:Infinity,minChannelsCount:0,maxChannelsCount:Infinity},advanced:{minTotalBytes:128E3,minBytes:16E3,fastHalfLife:2,slowHalfLife:5},restrictToElementSize:!1,restrictToScreenSize:!1,ignoreDevicePixelRatio:!1,clearBufferSwitch:!1,safeMarginSwitch:0,cacheLoadThreshold:20,minTimeToSwitch:0,preferNetworkInformationBandwidth:!1,removeLatencyFromFirstPacketTime:!0},autoShowText:3,preferredAudioLanguage:"",preferredAudioLabel:"",preferredTextLanguage:"",preferredVariantRole:"",preferredTextRole:"", +preferredAudioChannelCount:2,preferredVideoHdrLevel:"AUTO",preferredVideoLayout:"",preferredVideoLabel:"",preferredVideoCodecs:[],preferredAudioCodecs:[],preferredTextFormats:[],preferForcedSubs:!1,preferSpatialAudio:!1,preferredDecodingAttributes:[],restrictions:{minWidth:0,maxWidth:Infinity,minHeight:0,maxHeight:Infinity,minPixels:0,maxPixels:Infinity,minFrameRate:0,maxFrameRate:Infinity,minBandwidth:0,maxBandwidth:Infinity,minChannelsCount:0,maxChannelsCount:Infinity},playRangeStart:0,playRangeEnd:Infinity, +textDisplayer:{captionsUpdatePeriod:.25,fontScaleFactor:1},textDisplayFactory:function(){return null},cmcd:{enabled:!1,sessionId:"",contentId:"",rtpSafetyFactor:5,useHeaders:!1,includeKeys:[],version:1},cmsd:{enabled:!0,applyMaximumSuggestedBitrate:!0,estimatedThroughputWeightRatio:.5},lcevc:{enabled:!1,dynamicPerformanceScaling:!0,logLevel:0,drawLogo:!1,poster:!0},ads:{customPlayheadTracker:!1,skipPlayDetection:!1,supportsMultipleMediaElements:!0,disableHLSInterstitial:!1,disableDASHInterstitial:!1, +allowPreloadOnDomElements:!0,allowStartInMiddleOfInterstitial:!0},ignoreHardwareResolution:!1,queue:{preloadNextUrlWindow:30,repeatMode:0}};f.trackSelectionCallback=function(h){return Q(function(k){return k.return(zn(h,g.preferredAudioLanguage,g.preferredVideoHdrLevel))})};return b.Ta(g)} +function An(){return{streaming:{inaccurateManifestTolerance:0,segmentPrefetchLimit:2,updateIntervalSeconds:.1,maxDisabledTime:1,retryParameters:{baseDelay:100}},manifest:{dash:{autoCorrectDrift:!1},retryParameters:{baseDelay:100}},drm:{retryParameters:{baseDelay:100}}}} +function Bn(a,b,c){var d={".drm.keySystemsMapping":"",".drm.servers":"",".drm.clearKeys":"",".drm.advanced":{distinctiveIdentifierRequired:!1,persistentStateRequired:!1,videoRobustness:[],audioRobustness:[],sessionType:"",serverCertificate:new Uint8Array(0),serverCertificateUri:"",individualizationServer:"",headers:{}}};return an(a,b,c||wn(),d,"")} +function zn(a,b,c){var d=c;"AUTO"==d&&(c=a.some(function(h){return h.hdr&&"HLG"==h.hdr?!0:!1}),d=un(c));var e=a.filter(function(h){return"variant"!=h.type||h.hdr&&h.hdr!=d?!1:!0});c=[];var f=of(b,e.map(function(h){return h.language}));f&&(c=e.filter(function(h){return gf(h.language)==f}));0==c.length&&(c=e.filter(function(h){return h.primary}));0==c.length&&(e.map(function(h){return h.language}),c=e);var g=c.filter(function(h){return h.height&&480>=h.height});g.length&&(g.sort(function(h,k){return k.height- +h.height}),c=g.filter(function(h){return h.height==g[0].height}));b=[];c.length&&(e=Math.floor(c.length/2),c.sort(function(h,k){return h.bandwidth-k.bandwidth}),b.push(c[e]));a=t(a);for(c=a.next();!c.done;c=a.next())c=c.value,c.type!=wc&&"image"!=c.type||b.push(c);return b}function xn(a){return cn([a],a)}function yn(a){return cn([a],a)}T("shaka.util.PlayerConfiguration",vn);vn.mergeConfigObjects=Bn;vn.createDefaultForLL=An;vn.createDefault=wn;function Cn(){this.g=null;this.h=[]}function Dn(a,b){var c=0;a.g&&a.g.state==b&&(c+=a.g.duration);a=t(a.h);for(var d=a.next();!d.done;d=a.next())d=d.value,c+=d.state==b?d.duration:0;return c}function En(a){function b(f){return{timestamp:f.timestamp,state:f.state,duration:f.duration}}for(var c=[],d=t(a.h),e=d.next();!e.done;e=d.next())c.push(b(e.value));a.g&&c.push(b(a.g));return c};function Fn(){this.i=this.h=null;this.g=[]}function Gn(a,b,c){a.i!=b&&(a.i=b,a.g.push({timestamp:Date.now()/1E3,id:b.id,type:"text",fromAdaptation:c,bandwidth:null}))};function Hn(){this.B=this.W=NaN;this.l="";this.j=this.ci=this.s=this.A=this.K=this.C=this.o=this.m=this.I=this.F=this.i=this.S=this.U=this.M=this.N=this.P=NaN;this.L=0;this.G=this.H=NaN;this.g=new Cn;this.h=new Fn}function In(a,b,c){a.P=b;a.N=c}function Jn(a,b,c){a.W=b;a.B=c}function Kn(a,b){a.i=isNaN(a.i)?b:Math.max(a.i,b)}function Ln(a,b){a.j=isNaN(a.j)?b:a.j+b} +function Mn(a){var b=a.W,c=a.B,d=a.l,e=a.A,f=a.N,g=a.P,h=a.M,k=a.U,l=a.S,m=a.s,n=a.i,q=a.F,r=a.I,u=a.m,w=Dn(a.g,"playing"),v=Dn(a.g,"paused"),y=Dn(a.g,"buffering"),z=a.o,A=a.C,B=a.K,E=a.ci,H=a.j,C=a.L,D=a.H,I=a.G,L=En(a.g),K=[];a=t(a.h.g);for(var J=a.next();!J.done;J=a.next())J=J.value,K.push({timestamp:J.timestamp,id:J.id,type:J.type,fromAdaptation:J.fromAdaptation,bandwidth:J.bandwidth});return{width:b,height:c,currentCodecs:d,streamBandwidth:e,decodedFrames:f,droppedFrames:g,corruptedFrames:h, +stallsDetected:k,gapsJumped:l,estimatedBandwidth:m,completionPercent:n,loadLatency:q,manifestTimeSeconds:r,drmTimeSeconds:u,playTime:w,pauseTime:v,bufferingTime:y,licenseTime:z,liveLatency:A,maxSegmentDuration:B,manifestSizeBytes:E,bytesDownloaded:H,nonFatalErrorCount:C,manifestPeriodCount:D,manifestGapCount:I,stateHistory:L,switchHistory:K}};function Nn(a,b,c,d){Dg.call(this);this.N=a;this.W=b;this.Pa=d.networkingEngine;this.m=c;this.A=null;this.Ka=0;this.ab=d.dd;this.F=d.jk;this.eb=d.kk;this.g=d.config;this.l=this.G=this.h=null;this.va=!1;this.H=d.zk;this.xa=!1;this.i=null;this.oa=!1;this.j=this.C=null;this.ia=!1;this.M=new Map;this.Ba=!1;this.Ua=d.yk;this.$=new Hn;this.ua=new tg;this.s=new tg;this.P=null;this.o=!1;this.ka=d.bj;this.U=this.K=null;this.Za=d.aj;this.S=!1;this.L=[];this.I=[];this.B=!0}pa(Nn,Dg); +function On(a,b,c){(a=b?a.I:a.L)?a.push(c):c()}function Pn(a){if(a.I)for(var b=t(a.I),c=b.next();!c.done;c=b.next())c=c.value,c();a.I=null}function Qn(a,b){a.P=b;a.S=!0;if(a.L){b=t(a.L);for(var c=b.next();!c.done;c=b.next())c=c.value,c()}a.L=null}p=Nn.prototype;p.getStartTime=function(){return this.m};p.jd=function(){return this.N};p.zg=function(){return this.h};function Rn(a){a.ia=!0;return a.j}function Sn(a){a.xa=!0;return a.H}p.getStats=function(){return this.$}; +function Tn(a){a.oa=!0;return a.i}p.Jj=function(){return this.K?Lf(this.K):null};p.Ij=function(){return this.U?Of(this.U):null};function Un(a){a.Ba=!0;return a.M} +p.start=function(){var a=this;(function(){var b;return Q(function(c){switch(c.g){case 1:return F(c,Promise.resolve(),2);case 2:return wa(c,3),F(c,Vn(a),5);case 5:Wn(a);if("webkit"===window.shakaMediaKeysPolyfill){c.u(6);break}return F(c,Xn(a),7);case 7:Wn(a);case 6:return F(c,Yn(a),8);case 8:Wn(a);if(!a.ka||!a.i){c.u(9);break}return F(c,Zh(a.i),10);case 10:Wn(a);case 9:a.s.resolve();za(c,0);break;case 3:b=Aa(c),b instanceof U&&(7001==b.code||7003==b.code)||a.s.reject(b),G(c)}})})()}; +p.dispatchEvent=function(a){return this.P?this.P.dispatchEvent(a):Dg.prototype.dispatchEvent.call(this,a)};p.onError=function(a){2===a.severity&&(this.s.reject(a),this.destroy());var b=(new Map).set("detail",a);b=new V("error",b);this.dispatchEvent(b);b.defaultPrevented&&(a.handled=!0)};function Wn(a){if(a.o)throw new U(2,7,7003);}function no(a,b){a.dispatchEvent(new V("onstatechange",(new Map).set("state",b)))} +function Vn(a){var b,c,d,e,f,g,h,k,l;return Q(function(m){switch(m.g){case 1:no(a,"manifest-parser");a.l||(a.G=xi(a.N,a.W),a.l=a.G(),a.l.configure(a.g.manifest,function(){return a.B}));b=Date.now()/1E3;no(a,"manifest");if(a.h){m.u(2);break}return F(m,a.l.start(a.N,a.eb),3);case 3:a.h=m.h;if(1!=a.h.variants.length){m.u(2);break}c=[];d=a.h.variants[0];e=t([d.video,d.audio]);for(f=e.next();!f.done;f=e.next())(g=f.value)&&!g.segmentIndex&&c.push(g.createSegmentIndex());if(!(0d.endTime?uo:ro;this.g.set(d,f);for(var g=t(this.m),h=g.next();!h.done;h=g.next())h=h.value,h.bd==e&&h.$c==f&&h.Nc(d,b)}}};function so(a,b,c,d){b=new V(b,new Map([["region",c],["seeking",d]]));a.dispatchEvent(b)}var to=1,ro=2,uo=3;function vo(a,b,c){var d,e,f,g,h,k,l;return Q(function(m){switch(m.g){case 1:var n=(new Bb(a)).mb.split("/").pop().split(".");d=1==n.length?"":n.pop().toLowerCase();if(e=wo.get(d))return m.return(e);f=0;g=Lg([a],c);wa(m,2);g.method="HEAD";return F(m,b.request(f,g).promise,4);case 4:h=m.h;e=h.headers["content-type"];za(m,3);break;case 2:k=Aa(m);if(!k||1002!=k.code&&1001!=k.code){m.u(3);break}g.method="GET";return F(m,b.request(f,g).promise,6);case 6:l=m.h,e=l.headers["content-type"];case 3:return m.return(e? +e.toLowerCase().split(";").shift():"")}})} +var wo=(new Map).set("mp4","video/mp4").set("m4v","video/mp4").set("m4a","audio/mp4").set("webm","video/webm").set("weba","audio/webm").set("mkv","video/webm").set("ts","video/mp2t").set("ogv","video/ogg").set("ogg","audio/ogg").set("mpg","video/mpeg").set("mpeg","video/mpeg").set("mov","video/quicktime").set("m3u8","application/x-mpegurl").set("mpd","application/dash+xml").set("ism","application/vnd.ms-sstr+xml").set("mp3","audio/mpeg").set("aac","audio/aac").set("flac","audio/flac").set("wav","audio/wav").set("sbv", +"text/x-subviewer").set("srt","text/srt").set("vtt","text/vtt").set("webvtt","text/vtt").set("ttml","application/ttml+xml").set("lrc","application/x-subtitle-lrc").set("ssa","text/x-ssa").set("ass","text/x-ssa").set("jpeg","image/jpeg").set("jpg","image/jpeg").set("png","image/png").set("svg","image/svg+xml").set("webp","image/webp").set("avif","image/avif").set("html","text/html").set("htm","text/html");/* + @license + Copyright 2013 Ali Al Dallal + + Licensed under the MIT license. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ +for(var xo={ach:"Lwo",ady:"\u0410\u0434\u044b\u0433\u044d\u0431\u0437\u044d",af:"Afrikaans","af-NA":"Afrikaans (Namibia)","af-ZA":"Afrikaans (South Africa)",ak:"T\u0255\u0265i",ar:"\u0627\u0644\u0639\u0631\u0628\u064a\u0629","ar-AR":"\u0627\u0644\u0639\u0631\u0628\u064a\u0629","ar-MA":"\u0627\u0644\u0639\u0631\u0628\u064a\u0629","ar-SA":"\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629)","ay-BO":"Aymar aru",az:"Az\u0259rbaycan dili","az-AZ":"Az\u0259rbaycan dili", +"be-BY":"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f",bg:"\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438","bg-BG":"\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438",bn:"\u09ac\u09be\u0982\u09b2\u09be","bn-IN":"\u09ac\u09be\u0982\u09b2\u09be (\u09ad\u09be\u09b0\u09a4)","bn-BD":"\u09ac\u09be\u0982\u09b2\u09be(\u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6)","bs-BA":"Bosanski",ca:"Catal\u00e0","ca-ES":"Catal\u00e0",cak:"Maya Kaqchikel","ck-US":"\u13e3\u13b3\u13a9 (tsalagi)", +cs:"\u010ce\u0161tina","cs-CZ":"\u010ce\u0161tina",cy:"Cymraeg","cy-GB":"Cymraeg",da:"Dansk","da-DK":"Dansk",de:"Deutsch","de-AT":"Deutsch (\u00d6sterreich)","de-DE":"Deutsch (Deutschland)","de-CH":"Deutsch (Schweiz)",dsb:"Dolnoserb\u0161\u0107ina",el:"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac","el-GR":"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac",en:"English","en-GB":"English (UK)","en-AU":"English (Australia)","en-CA":"English (Canada)","en-IE":"English (Ireland)","en-IN":"English (India)", +"en-PI":"English (Pirate)","en-UD":"English (Upside Down)","en-US":"English (US)","en-ZA":"English (South Africa)","en@pirate":"English (Pirate)",eo:"Esperanto","eo-EO":"Esperanto",es:"Espa\u00f1ol","es-AR":"Espa\u00f1ol (Argentine)","es-419":"Espa\u00f1ol (Latinoam\u00e9rica)","es-CL":"Espa\u00f1ol (Chile)","es-CO":"Espa\u00f1ol (Colombia)","es-EC":"Espa\u00f1ol (Ecuador)","es-ES":"Espa\u00f1ol (Espa\u00f1a)","es-LA":"Espa\u00f1ol (Latinoam\u00e9rica)","es-NI":"Espa\u00f1ol (Nicaragua)","es-MX":"Espa\u00f1ol (M\u00e9xico)", +"es-US":"Espa\u00f1ol (Estados Unidos)","es-VE":"Espa\u00f1ol (Venezuela)",et:"eesti keel","et-EE":"Eesti (Estonia)",eu:"Euskara","eu-ES":"Euskara",fa:"\u0641\u0627\u0631\u0633\u06cc","fa-IR":"\u0641\u0627\u0631\u0633\u06cc","fb-LT":"Leet Speak",ff:"Fulah",fi:"Suomi","fi-FI":"Suomi","fo-FO":"F\u00f8royskt",fr:"Fran\u00e7ais","fr-CA":"Fran\u00e7ais (Canada)","fr-FR":"Fran\u00e7ais (France)","fr-BE":"Fran\u00e7ais (Belgique)","fr-CH":"Fran\u00e7ais (Suisse)","fy-NL":"Frysk",ga:"Gaeilge","ga-IE":"Gaeilge (Gaelic)", +gl:"Galego","gl-ES":"Galego","gn-PY":"Ava\u00f1e'\u1ebd","gu-IN":"\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0","gx-GR":"\u1f19\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ae \u1f00\u03c1\u03c7\u03b1\u03af\u03b1",he:"\u05e2\u05d1\u05e8\u05d9\u05ea\u200f","he-IL":"\u05e2\u05d1\u05e8\u05d9\u05ea\u200f",hi:"\u0939\u093f\u0928\u094d\u0926\u0940","hi-IN":"\u0939\u093f\u0928\u094d\u0926\u0940",hr:"Hrvatski","hr-HR":"Hrvatski",hsb:"Hornjoserb\u0161\u0107ina",ht:"Krey\u00f2l",hu:"Magyar","hu-HU":"Magyar","hy-AM":"\u0540\u0561\u0575\u0565\u0580\u0565\u0576", +id:"Bahasa Indonesia","id-ID":"Bahasa Indonesia",is:"\u00cdslenska","is-IS":"\u00cdslenska (Iceland)",it:"Italiano","it-IT":"Italiano",ja:"\u65e5\u672c\u8a9e","ja-JP":"\u65e5\u672c\u8a9e","jv-ID":"Basa Jawa","ka-GE":"\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8","kk-KZ":"\u049a\u0430\u0437\u0430\u049b\u0448\u0430",km:"\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a","km-KH":"\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a",kab:"Taqbaylit",kn:"\u0c95\u0ca8\u0ccd\u0ca8\u0ca1","kn-IN":"\u0c95\u0ca8\u0ccd\u0ca8\u0ca1 (India)", +ko:"\ud55c\uad6d\uc5b4","ko-KR":"\ud55c\uad6d\uc5b4 (\u97e9\u56fd)",ku:"Kurd\u00ee","ku-TR":"Kurd\u00ee",la:"Latin","la-VA":"Latin",lb:"L\u00ebtzebuergesch","li-NL":"L\u00e8mb\u00f6rgs",lt:"Lietuvi\u0173","lt-LT":"Lietuvi\u0173",lv:"Latvie\u0161u","lv-LV":"Latvie\u0161u",mai:"\u092e\u0948\u0925\u093f\u0932\u0940, \u09ae\u09c8\u09a5\u09bf\u09b2\u09c0","mg-MG":"Malagasy",mk:"\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438","mk-MK":"\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 (\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438)", +ml:"\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02","ml-IN":"\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02","mn-MN":"\u041c\u043e\u043d\u0433\u043e\u043b",mr:"\u092e\u0930\u093e\u0920\u0940","mr-IN":"\u092e\u0930\u093e\u0920\u0940",ms:"Bahasa Melayu","ms-MY":"Bahasa Melayu",mt:"Malti","mt-MT":"Malti",my:"\u1017\u1019\u102c\u1005\u1000\u102c",nb:"Norsk (bokm\u00e5l)","nb-NO":"Norsk (bokm\u00e5l)",ne:"\u0928\u0947\u092a\u093e\u0932\u0940","ne-NP":"\u0928\u0947\u092a\u093e\u0932\u0940",nl:"Nederlands","nl-BE":"Nederlands (Belgi\u00eb)", +"nl-NL":"Nederlands (Nederland)","nn-NO":"Norsk (nynorsk)",no:"Norsk",oc:"Occitan","or-IN":"\u0b13\u0b21\u0b3c\u0b3f\u0b06",pa:"\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40","pa-IN":"\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40 (\u0a2d\u0a3e\u0a30\u0a24 \u0a28\u0a42\u0a70)",pl:"Polski","pl-PL":"Polski","ps-AF":"\u067e\u069a\u062a\u0648",pt:"Portugu\u00eas","pt-BR":"Portugu\u00eas (Brasil)","pt-PT":"Portugu\u00eas (Portugal)","qu-PE":"Qhichwa","rm-CH":"Rumantsch",ro:"Rom\u00e2n\u0103","ro-RO":"Rom\u00e2n\u0103",ru:"\u0420\u0443\u0441\u0441\u043a\u0438\u0439", +"ru-RU":"\u0420\u0443\u0441\u0441\u043a\u0438\u0439","sa-IN":"\u0938\u0902\u0938\u094d\u0915\u0943\u0924\u092e\u094d","se-NO":"Davvis\u00e1megiella","si-LK":"\u0db4\u0dc5\u0dcf\u0dad",sk:"Sloven\u010dina","sk-SK":"Sloven\u010dina (Slovakia)",sl:"Sloven\u0161\u010dina","sl-SI":"Sloven\u0161\u010dina","so-SO":"Soomaaliga",sq:"Shqip","sq-AL":"Shqip",sr:"\u0421\u0440\u043f\u0441\u043a\u0438","sr-RS":"\u0421\u0440\u043f\u0441\u043a\u0438 (Serbia)",su:"Basa Sunda",sv:"Svenska","sv-SE":"Svenska",sw:"Kiswahili", +"sw-KE":"Kiswahili",ta:"\u0ba4\u0bae\u0bbf\u0bb4\u0bcd","ta-IN":"\u0ba4\u0bae\u0bbf\u0bb4\u0bcd",te:"\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41","te-IN":"\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41",tg:"\u0437\u0430\u0431\u043e\u0301\u043d\u0438 \u0442\u043e\u04b7\u0438\u043a\u04e3\u0301","tg-TJ":"\u0442\u043e\u04b7\u0438\u043a\u04e3",th:"\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22","th-TH":"\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22 (\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e44\u0e17\u0e22)",tl:"Filipino","tl-PH":"Filipino", +tlh:"tlhIngan-Hol",tr:"T\u00fcrk\u00e7e","tr-TR":"T\u00fcrk\u00e7e","tt-RU":"\u0442\u0430\u0442\u0430\u0440\u0447\u0430",uk:"\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430","uk-UA":"\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430",ur:"\u0627\u0631\u062f\u0648","ur-PK":"\u0627\u0631\u062f\u0648",uz:"O'zbek","uz-UZ":"O'zbek",vi:"Ti\u1ebfng Vi\u1ec7t","vi-VN":"Ti\u1ebfng Vi\u1ec7t","xh-ZA":"isiXhosa",yi:"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9","yi-DE":"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9 (German)", +zh:"\u4e2d\u6587","zh-HANS":"\u4e2d\u6587\u7b80\u4f53","zh-HANT":"\u4e2d\u6587\u7e41\u9ad4","zh-CN":"\u4e2d\u6587\uff08\u4e2d\u56fd\uff09","zh-HK":"\u4e2d\u6587\uff08\u9999\u6e2f\uff09","zh-SG":"\u4e2d\u6587\uff08\u65b0\u52a0\u5761\uff09","zh-TW":"\u4e2d\u6587\uff08\u53f0\u7063\uff09","zu-ZA":"isiZulu"},yo=t(Object.keys(xo)),zo=yo.next();!zo.done;zo=yo.next()){var Ao=zo.value;xo[Ao.toLowerCase()]=xo[Ao]};function Bo(a,b){if(a.lineBreak)return"\n";if(a.nestedCues.length)return a.nestedCues.map(function(g){return Bo(g,a)}).join("");if(!a.payload)return a.payload;var c=[],d=a.fontWeight>=ne,e=a.fontStyle==oe,f=a.textDecoration.includes(pe);d&&c.push(["b"]);e&&c.push(["i"]);f&&c.push(["u"]);e=a.color;""==e&&b&&(e=b.color);d="";(e=Co(e))&&(d+="."+e);e=a.backgroundColor;""==e&&b&&(e=b.backgroundColor);(b=Co(e))&&(d+=".bg_"+b);d&&c.push(["c",d]);return c.reduceRight(function(g,h){var k=t(h);h=k.next().value; +k=k.next().value;return"<"+h+(void 0===k?"":k)+">"+g+""},a.payload)} +function Co(a){a=a.toLowerCase();var b=a.replace(/\s/g,"").match(/^rgba?\((\d+),(\d+),(\d+),?([^,\s)]+)?/i);b?a="#"+(parseInt(b[1],10)|256).toString(16).slice(1)+(parseInt(b[2],10)|256).toString(16).slice(1)+(parseInt(b[3],10)|256).toString(16).slice(1):a.startsWith("#")&&7>>0).toString()}if(a.startTime>=a.endTime)return null;var c=new VTTCue(a.startTime,a.endTime,a.payload);c.id=b(a.startTime.toString())+b(a.endTime.toString())+b(a.payload);c.lineAlign=a.lineAlign;c.positionAlign=a.positionAlign;a.size&&(c.size=a.size);try{c.align=a.textAlign}catch(d){}"center"==a.textAlign&&"center"!=c.align&&(c.align="middle");"vertical-lr"==a.writingMode?c.vertical="lr":"vertical-rl"==a.writingMode&& +(c.vertical="rl");1==a.lineInterpretation&&(c.snapToLines=!1);null!=a.line&&(c.line=a.line);null!=a.position&&(c.position=a.position);return c} +function Go(a,b){var c=Do(b),d=[];b=a.cues?Array.from(a.cues):[];c=t(c);for(var e=c.next(),f={};!e.done;f={ld:void 0},e=c.next())f.ld=e.value,!b.some(function(g){return function(h){return h.startTime==g.ld.startTime&&h.endTime==g.ld.endTime&&h.text==g.ld.payload?!0:!1}}(f))&&f.ld.payload&&(e=Fo(f.ld))&&d.push(e);b=d.slice().sort(function(g,h){return g.startTime!=h.startTime?g.startTime-h.startTime:g.endTime!=h.endTime?g.endTime-h.startTime:"line"in VTTCue.prototype?d.indexOf(h)-d.indexOf(g):d.indexOf(g)- +d.indexOf(h)});b=t(b);for(c=b.next();!c.done;c=b.next())a.addCue(c.value)}function Ho(a,b){var c=!1;"disabled"===a.mode&&(c=!0,a.mode="hidden");for(var d=0;dd&&"hidden"=== +g.track.mode&&(d=f)}e=t(b.i);for(f=e.next();!f.done;f=e.next())g=t(f.value),f=g.next().value,g=g.next().value,f!==d&&"disabled"!==g.track.mode&&(g.track.mode="disabled");b.g!==d&&(b.g=d,-1this.g)return!1;Ho(this.i.get(this.g).track,function(c){return c.startTimea});return!0};p.append=function(a){!this.j||0>this.g||Go(this.i.get(this.g).track,a)};p.destroy=function(){this.h&&(this.j&&this.B(),this.h=null);this.l&&(this.l.release(),this.l=null);return Promise.resolve()};p.isTextVisible=function(){return this.s}; +p.setTextVisibility=function(a){this.s=a;if(-1a});return!0}; +p.append=function(a){this.g&&Go(this.g,a)};p.destroy=function(){this.g&&(Ho(this.g,function(){return!0}),this.g.mode="disabled");this.g=this.h=null;return Promise.resolve()};p.isTextVisible=function(){return this.g?"showing"==this.g.mode:!1};p.setTextVisibility=function(a){a&&!this.g&&Lo(this);this.g&&(this.g.mode=a?"showing":"hidden")};p.setTextLanguage=function(){};p.enableTextDisplayer=function(){Lo(this)};function Lo(a){a.h&&!a.g&&(a.g=a.h.addTextTrack("subtitles",a.i),a.g.mode="hidden")} +T("shaka.text.SimpleTextDisplayer",Ko);Ko.prototype.enableTextDisplayer=Ko.prototype.enableTextDisplayer;Ko.prototype.setTextLanguage=Ko.prototype.setTextLanguage;Ko.prototype.setTextVisibility=Ko.prototype.setTextVisibility;Ko.prototype.isTextVisible=Ko.prototype.isTextVisible;Ko.prototype.destroy=Ko.prototype.destroy;Ko.prototype.append=Ko.prototype.append;Ko.prototype.remove=Ko.prototype.remove;Ko.prototype.configure=Ko.prototype.configure;function Mo(){}p=Mo.prototype;p.configure=function(){};p.remove=function(){};p.append=function(){};p.destroy=function(){};p.isTextVisible=function(){return!1};p.setTextVisibility=function(){};p.setTextLanguage=function(){};p.enableTextDisplayer=function(){};T("shaka.text.StubTextDisplayer",Mo);Mo.prototype.enableTextDisplayer=Mo.prototype.enableTextDisplayer;Mo.prototype.setTextLanguage=Mo.prototype.setTextLanguage;Mo.prototype.setTextVisibility=Mo.prototype.setTextVisibility; +Mo.prototype.isTextVisible=Mo.prototype.isTextVisible;Mo.prototype.destroy=Mo.prototype.destroy;Mo.prototype.append=Mo.prototype.append;Mo.prototype.remove=Mo.prototype.remove;Mo.prototype.configure=Mo.prototype.configure;function No(a,b){var c=this;this.m=!1;this.h=[];this.j=a;this.o=b;this.B=this.s=null;this.g=document.createElement("div");this.g.classList.add("shaka-text-container");this.g.style.textAlign="center";this.g.style.display="flex";this.g.style.flexDirection="column";this.g.style.alignItems="center";this.g.style.justifyContent="flex-end";this.A=new $e(function(){c.j.paused||Oo(c)});Po(this);this.l=new Map;this.i=new jb;this.i.D(document,"fullscreenchange",function(){Oo(c,!0)});this.i.D(this.j,"seeking", +function(){Oo(c,!0)});this.i.D(this.j,"ratechange",function(){Po(c)});this.i.D(this.j,"resize",function(){var d=c.j,e=d.videoWidth;d=d.videoHeight;e&&d?c.s=e/d:c.s=null});this.C=null;"ResizeObserver"in window&&(this.C=new ResizeObserver(function(){Oo(c,!0)}),this.C.observe(this.g));this.F=new Map}p=No.prototype;p.configure=function(a){this.B=a;Po(this);Oo(this,!0)}; +p.append=function(a){var b=[].concat(x(this.h));a=t(Eo(a));for(var c=a.next(),d={};!c.done;d={dg:void 0},c=a.next())d.dg=c.value,b.some(function(e){return function(f){return ce(f,e.dg)}}(d))||this.h.push(d.dg);this.h.length&&Po(this);Oo(this)}; +p.destroy=function(){if(!this.g)return Promise.resolve();this.g.parentElement&&this.o.removeChild(this.g);this.g=null;this.m=!1;this.h=[];this.A&&(this.A.stop(),this.A=null);this.l.clear();this.i&&(this.i.release(),this.i=null);this.C&&(this.C.disconnect(),this.C=null);return Promise.resolve()};p.remove=function(a,b){if(!this.g)return!1;var c=this.h.length;this.h=this.h.filter(function(d){return d.startTime=b});Oo(this,c>this.h.length);this.h.length||Po(this);return!0}; +p.isTextVisible=function(){return this.m};p.setTextVisibility=function(a){(this.m=a)?(this.g.parentElement||this.o.appendChild(this.g),Oo(this,!0)):this.g.parentElement&&this.o.removeChild(this.g)};p.setTextLanguage=function(a){a&&"und"!=a?this.g.setAttribute("lang",a):this.g.setAttribute("lang","")};p.enableTextDisplayer=function(){};function Po(a){a.A&&(a.h.length?a.A.Ga((a.B?a.B.captionsUpdatePeriod:.25)/Math.max(1,Math.abs(a.j.playbackRate))):a.A.stop())} +function Qo(a,b){for(;null!=b;){if(b==a.g)return!0;b=b.parentElement}return!1} +function Ro(a,b,c,d,e){var f=!1,g=[],h=[];b=t(b);for(var k=b.next();!k.done;k=b.next()){k=k.value;e.push(k);var l=a.l.get(k),m=k.startTime<=d&&k.endTime>d,n=l?l.Yi:null;l&&(g.push(l.eg),l.Uc&&g.push(l.Uc),m||(f=!0,a.l.delete(k),l=null));m&&(h.push(k),l?Qo(a,n)||(f=!0):(So(a,k,e),l=a.l.get(k),n=l.Yi,f=!0));0a.s&&(h=32),d=0>d?100+d/h*100:d/h*100),1==g&&(f.position="absolute",c.writingMode==Vd?(f.width="100%",c.lineAlign==Xd?f.top=d+"%":"end"==c.lineAlign&&(f.bottom=100-d+"%")):"vertical-lr"==c.writingMode?(f.height="100%",c.lineAlign==Xd?f.left=d+"%":"end"==c.lineAlign&&(f.right=100-d+"%")):(f.height="100%",c.lineAlign==Xd?f.right=d+"%":"end"==c.lineAlign&&(f.left= +100-d+"%"))));f.lineHeight=c.lineHeight;a=Uo(c);"line-left"==a?(f.cssFloat="left",null!==c.position&&(f.position="absolute",c.writingMode==Vd?(f.left=c.position+"%",f.width="auto"):f.top=c.position+"%")):"line-right"==a?(f.cssFloat="right",null!==c.position&&(f.position="absolute",c.writingMode==Vd?(f.right=100-c.position+"%",f.width="auto"):f.bottom=c.position+"%")):null!==c.position&&50!=c.position&&(f.position="absolute",c.writingMode==Vd?(f.left=c.position+"%",f.width="auto"):f.top=c.position+ +"%");f.textAlign=c.textAlign;f.textDecoration=c.textDecoration.join(" ");f.writingMode=c.writingMode;"writingMode"in document.documentElement.style&&f.writingMode==c.writingMode||(f.webkitWritingMode=c.writingMode);c.size&&(c.writingMode==Vd?f.width=c.size+"%":f.height=c.size+"%")} +function Vo(a,b,c,d){d=void 0===d?1:d;var e=(e=(new RegExp(/(\d*\.?\d+)([a-z]+|%+)/)).exec(a))?{value:Number(e[1]),unit:e[2]}:null;if(!e)return a;a=e.unit;d*=e.value;switch(a){case "%":return d/100*c.clientHeight/b.cellResolution.rows+"px";case "c":return c.clientHeight*d/b.cellResolution.rows+"px";default:return d+a}}function Wo(a,b){for(var c=a.length-1;0<=c;c--){var d=b(a[c]);if(d||0===d)return d}return null}T("shaka.text.UITextDisplayer",No);No.prototype.enableTextDisplayer=No.prototype.enableTextDisplayer; +No.prototype.setTextLanguage=No.prototype.setTextLanguage;No.prototype.setTextVisibility=No.prototype.setTextVisibility;No.prototype.isTextVisible=No.prototype.isTextVisible;No.prototype.remove=No.prototype.remove;No.prototype.destroy=No.prototype.destroy;No.prototype.append=No.prototype.append;No.prototype.configure=No.prototype.configure;function Xo(a,b){function c(f){for(var g=f,h=t(b),k=h.next();!k.done;k=h.next())k=k.value,k.end&&k.startf?"0":"")+f+":"+(10>h?"0":"")+h+":"+(10>k?"0":"")+k+"."+(100>g?10>g?"00":"0":"")+g}var d=Do(a);a="WEBVTT\n\n";d=t(d);for(var e=d.next();!e.done;e=d.next())e=e.value,a+=c(e.startTime)+" --\x3e "+c(e.endTime)+function(f){var g=[];switch(f.textAlign){case "left":g.push("align:left"); +break;case "right":g.push("align:right");break;case Sd:g.push("align:middle");break;case "start":g.push("align:start");break;case "end":g.push("align:end")}switch(f.writingMode){case "vertical-lr":g.push("vertical:lr");break;case "vertical-rl":g.push("vertical:rl")}return g.length?" "+g.join(" "):""}(e)+"\n",a+=e.payload+"\n\n";return a}T("shaka.text.WebVttGenerator",function(){});function Yo(a,b){this.h=a;this.g=b;this.i=void 0;this.s=!1;this.F=!0;this.l=this.B=!1;this.o=this.m=void 0;this.A=0;this.G=!1;this.C=new jb;this.j=null}Yo.prototype.setMediaElement=function(a){this.j=a;Zo(this)};Yo.prototype.configure=function(a){this.g=a};function $o(a){a.s=!1;a.F=!0;a.B=!1;a.l=!1;a.m=0;a.o=0;a.A=0;a.G=!1;a.j=null;a.C.Ra()}function ap(a,b){a.l=b;a.l?a.i==bp?a.i=cp:a.i==dp&&(a.i=ep):a.i==cp?a.i=bp:a.i==ep&&(a.i=dp)} +function fp(a,b){if(a.g&&a.g.enabled&&a.g.version==gp&&a.j&&a.j.autoplay){var c=a.j.play();c&&c.then(function(){a.A=b}).catch(function(){a.A=0})}} +function hp(a,b,c){try{if(!a.g.enabled)return b;var d=ip(a);a:{switch(c.toLowerCase()){case "audio/mp4":case "audio/webm":case "audio/ogg":case "audio/mpeg":case "audio/aac":case "audio/flac":case "audio/wav":var e=jp;break a;case "video/webm":case "video/mp4":case "video/mpeg":case "video/mp2t":e=kp;break a;case "application/x-mpegurl":case "application/vnd.apple.mpegurl":case "application/dash+xml":case "video/vnd.mpeg.dash.mpd":case "application/vnd.ms-sstr+xml":e=lp;break a}e=void 0}d.ot=e;d.su= +!0;var f=mp(d);return np(b,f)}catch(g){return cb("CMCD_SRC_ERROR","Could not generate src CMCD data.",g),b}}function Zo(a){a.C.za(a.j,"play",function(){a.m||(a.m=Date.now())});a.C.za(a.j,"playing",function(){a.o||(a.o=Date.now())})}function ip(a){a.g.sessionId||(a.g.sessionId=window.crypto.randomUUID());return{v:a.g.version,sf:a.i,sid:a.g.sessionId,cid:a.g.contentId,mtp:a.h.getBandwidthEstimate()/1E3}} +function op(a,b,c){c=void 0===c?{}:c;var d=void 0===d?a.g.useHeaders:d;if(a.g.enabled)if(a=pp(a,c),d)d=qp(a),Object.keys(d).length&&Object.assign(b.headers,d);else{var e=mp(a);e&&(b.uris=b.uris.map(function(f){return np(f,e)}))}}function rp(a,b){var c=a.g.includeKeys;return c.length?Object.keys(b).reduce(function(d,e){c.includes(e)&&(d[e]=b[e]);return d},{}):b} +function sp(a){if(0===a.type)return tp;if(a=a.stream){var b=a.type;if("video"==b)return a.codecs&&a.codecs.includes(",")?kp:up;if("audio"==b)return jp;if("text"==b)return"application/mp4"===a.mimeType?vp:wp}}function xp(a,b){b=a.h.Lb()[b];if(!b.length)return NaN;var c=a.h.getCurrentTime();return(a=b.find(function(d){return d.start<=c&&d.end>=c}))?1E3*(a.end-c):NaN} +function yp(a,b){b=a.h.Lb()[b];if(!b.length)return 0;var c=a.h.getCurrentTime();return(a=b.find(function(d){return d.start<=c&&d.end>=c}))?1E3*(a.end-c):0}function zp(a,b){var c=a.h.Fb();if(!c.length)return NaN;a=c[0];c=t(c);for(var d=c.next();!d.done;d=c.next())d=d.value,"variant"===d.type&&d.bandwidth>a.bandwidth&&(a=d);switch(b){case up:return a.videoBandwidth||NaN;case jp:return a.audioBandwidth||NaN;default:return a.bandwidth}} +function pp(a,b){b=void 0===b?{}:b;Object.assign(b,ip(a));b.pr=a.h.sb();var c=b.ot===up||b.ot===kp;a.B&&c&&(b.bs=!0,b.su=!0,a.B=!1);null==b.su&&(b.su=a.F);b.v===gp&&(a.h.V()&&(b.ltc=a.h.Te()),c=!a.G&&a.o&&a.m?a.o-(a.A||a.m):void 0,void 0!=c&&(b.msd=c,a.G=!0));return rp(a,b)} +function mp(a){function b(n){return 100*c(n/100)}function c(n){return Math.round(n)}function d(n){return!Number.isNaN(n)&&null!=n&&""!==n&&!1!==n}var e=[],f={br:c,d:c,bl:b,dl:b,mtp:b,nor:function(n){return encodeURIComponent(n)},rtp:b,tb:c},g=Object.keys(a||{}).sort();g=t(g);for(var h=g.next();!h.done;h=g.next()){h=h.value;var k=a[h];if(d(k)&&("v"!==h||1!==k)&&("pr"!=h||1!==k)){var l=f[h];l&&(k=l(k));l=typeof k;var m=void 0;m="string"===l&&"ot"!==h&&"sf"!==h&&"st"!==h?h+"="+JSON.stringify(k):"boolean"=== +l?h:"symbol"===l?h+"="+k.description:h+"="+k;e.push(m)}}return e.join(",")}function qp(a){var b=Object.keys(a),c={},d=["Object","Request","Session","Status"],e=[{},{},{},{}],f={br:0,d:0,ot:0,tb:0,bl:1,dl:1,mtp:1,nor:1,nrr:1,su:1,ltc:1,cid:2,pr:2,sf:2,sid:2,st:2,v:2,msd:2,bs:3,rtp:3};b=t(b);for(var g=b.next();!g.done;g=b.next())g=g.value,e[null!=f[g]?f[g]:1][g]=a[g];for(a=0;a=c?a*(1-c)+b*c:a};function Fp(a){return a?"false"===a.toLowerCase()?!1:/^[-0-9]/.test(a)?parseInt(a,10):a.replace(/["]+/g,""):!0}T("shaka.util.CmsdManager",Ap);Ap.prototype.getBandwidthEstimate=Ap.prototype.getBandwidthEstimate;Ap.prototype.getRoundTripTime=Ap.prototype.Mj;Ap.prototype.getResponseDelay=Ap.prototype.Lj;Ap.prototype.getEstimatedThroughput=Ap.prototype.Sh; +Ap.prototype.getMaxBitrate=Ap.prototype.Uh;var Cp="etp",Bp="mb",Dp="rd",Ep="rtt";function Gp(){this.g=null;this.h=[]}function Hp(a,b){return Q(function(c){if(1==c.g)return a.g?F(c,new Promise(function(d){return a.h.push(d)}),2):c.u(2);a.g=b;G(c)})}Gp.prototype.release=function(){0B.end&&(B.end=E.end)}return B};d.va=new Sl(q);d.va.addEventListener("regionadd", +function(A){dq(d,A.region,"metadataadded")});if(m)return F(z,k(function(){return Q(function(A){return F(A,eq(d,c),0)})},"initializeSrcEqualsDrmInner_"),23);d.Za=new Sl(q);return F(z,k(function(){return Q(function(A){if(1==A.g)return F(A,Promise.race([e.ua,e.s]),2);d.mc=e.G;var B=e;B.va=!0;d.G=B.l;d.i=e.zg();G(A)})},"waitForFinish"),15);case 15:if(d.I){z.u(16);break}return F(z,k(function(){return Q(function(A){return F(A,$p(d),0)})},"initializeMediaSourceEngineInner_"),16);case 16:return d.i&&d.i.textStreams.length&& +(d.o.enableTextDisplayer?d.o.enableTextDisplayer():wb("Text displayer w/ enableTextDisplayer",'Text displayer should have a "enableTextDisplayer" method!')),F(z,k(function(){return Q(function(A){return F(A,e.s,0)})},"waitForFinish"),18);case 18:d.g=e.getConfiguration();d.re=e.F;d.G&&d.G.setMediaElement&&d.h&&d.G.setMediaElement(d.h);d.ke=Sn(e);d.je=e.Ua;if(r=e.A)d.N=r;l&&d.h&&"AUDIO"===d.h.nodeName&&(fq(d),d.configure("manifest.disableVideo",!0));if(e.i){z.u(19);break}return F(z,k(function(){return Q(function(A){return F(A, +Xn(e,d.h),0)})},"drmEngine_.init"),19);case 19:return d.C=Tn(e),F(z,k(function(){return Q(function(A){return F(A,d.C.cc(d.h),0)})},"drmEngine_.attach"),21);case 21:return!(u=e.C)||d.Ua&&d.Ua==u||(d.s=Rn(e),d.Ua=e.C,"function"!=typeof d.s.setMediaElement&&(wb("AbrManager w/o setMediaElement","Please use an AbrManager with setMediaElement function."),d.s.setMediaElement=function(){}),"function"!=typeof d.s.setCmsdManager&&(wb("AbrManager w/o setCmsdManager","Please use an AbrManager with setCmsdManager function."), +d.s.setCmsdManager=function(){}),"function"!=typeof d.s.trySuggestStreams&&(wb("AbrManager w/o trySuggestStreams","Please use an AbrManager with trySuggestStreams function."),d.s.trySuggestStreams=function(){})),w=Un(e),v=e.K,F(z,k(function(){return Q(function(A){return F(A,gq(d,n,v,w),0)})},"loadInner_"),22);case 22:Pn(e);d.kc&&qb().Ti()&&Ne(d.kc)&&vk(d.I,d.W,d.kc);z.u(14);break;case 23:return F(z,k(function(){return Q(function(A){return F(A,hq(d,n,c),0)})},"srcEqualsInner_"),14);case 14:d.dispatchEvent(Sp("loaded")); +case 6:Ba(z);if(!e){z.u(25);break}return F(z,e.destroy(),25);case 25:d.Pa=null;Ca(z,0);break;case 5:y=Aa(z);if(!y||7E3==y.code){z.u(27);break}return F(z,d.rc(!1),27);case 27:throw y;}})};function fq(a){for(var b=t(a.i.variants),c=b.next();!c.done;c=b.next())c=c.value,c.video&&(c.video.closeSegmentIndex(),c.video=null),c.bandwidth=c.audio&&c.audio.bandwidth?c.audio.bandwidth:0;a.i.variants=a.i.variants.filter(function(d){return d.audio})} +p.Vk=function(a,b){a=void 0===a?!0:a;b=void 0===b?!1:b;var c=this,d;return Q(function(e){return 1==e.g?F(e,iq(c),2):3!=e.g?(d=e.h,F(e,c.rc(a,b),3)):e.return(d)})};p.Mh=function(a,b){a=void 0===a?!1:a;b=void 0===b?!1:b;var c=this,d;return Q(function(e){return 1==e.g?F(e,iq(c,b),2):3!=e.g?(d=e.h,F(e,c.detach(a),3)):e.return(d)})}; +function iq(a,b){b=void 0===b?!1:b;var c,d;return Q(function(e){if(1==e.g){c=null;if(!(a.i&&a.G&&a.mc&&a.W&&a.g))return e.u(2);d=a.h.currentTime;a.V()&&!b&&(d=null);return F(e,jq(a,a.W,d,a.kc,a.g,!0,!1,!1),3)}if(2!=e.g){c=e.h;a.we.push(c);a.G&&a.G.setMediaElement&&a.G.setMediaElement(null);var f=c,g=a.G,h=a.mc;f.h=a.i;f.l=g;f.G=h;f=c;g=a.Ua;f.j=a.s;f.C=g;c.A=a.N;c.start();a.i=null;a.G=null;a.mc=null;a.s=null;a.Ua=null}return e.return(c)})} +p.preload=function(a,b,c,d){b=void 0===b?null:b;var e=this,f,g;return Q(function(h){if(1==h.g)return f=Jp(e),Bn(f,d||e.g,Jp(e)),F(h,cq(e,a,b,c,!1,f),2);(g=h.h)?g.start():Zp(e,new U(2,7,7005));return h.return(g)})};p.hg=function(){var a=this,b,c,d,e;return Q(function(f){b=[];c=t(a.we);for(d=c.next();!d.done;d=c.next())e=d.value,e.o||b.push(e.destroy());a.we=[];return F(f,Promise.all(b),0)})}; +function cq(a,b,c,d,e,f){e=void 0===e?!1:e;var g,h,k,l,m;return Q(function(n){if(1==n.g)return d?n.u(2):F(n,bq(a,b),3);2!=n.g&&(d=n.h);if(g=kq(a,d))return n.return(null);h=f||a.g;k=!1;l=!0;e&&(a.s&&a.Ua==h.abrFactory&&(l=!1),a.h&&"AUDIO"===a.h.nodeName&&(k=!0));m=jq(a,b,c,d||null,h,!e,k,l);m=e?m.then(function(q){q.B=!1;return q}):m.then(function(q){a.we.push(q);return q});return n.return(m)})} +function jq(a,b,c,d,e,f,g,h){f=void 0===f?!0:f;g=void 0===g?!1:g;h=void 0===h?!0:h;var k,l,m,n,q,r,u,w,v,y,z,A,B,E,H;return Q(function(C){if(1==C.g){k=null;l=ed(e);g&&(l.manifest.disableVideo=!0);m=function(){return k.S&&k.o?null:k};n=function(){return m()?m().getConfiguration():a.g};if(Infinity!=a.ua.width||Infinity!=a.ua.height||a.g.ignoreHardwareResolution)return C.u(2);q=qb();return F(C,q.ec(),3)}2!=C.g&&(r=C.h,a.ua.width=r.width,a.ua.height=r.height);u=new ki(l,a.ua,null);w={networkingEngine:a.H, +filter:function(D){var I,L;return Q(function(K){if(1==K.g)return F(K,li(u,D),2);if(4!=K.g){I=K.h;if(!I)return K.u(0);L=Sp("trackschanged");return F(K,Promise.resolve(),4)}k.dispatchEvent(L);G(K)})},makeTextStreamsForClosedCaptions:function(D){return lq(a,D)},onTimelineRegionAdded:function(D){Tl(k.H,D)},onEvent:function(D){return k.dispatchEvent(D)},onError:function(D){return k.onError(D)},isLowLatencyMode:function(){return n().streaming.lowLatencyMode},updateDuration:function(){a.l&&k.S&&a.l.updateDuration()}, +newDrmInfo:function(D){var I=k.i,L=I?I.h:null;L&&I.A&&oi(u,L.keySystem,D)},onManifestUpdated:function(){var D=(new Map).set("isLive",a.V());k.dispatchEvent(Sp("manifestupdated",D));On(k,!1,function(){if(a.B)a.B.onManifestUpdated(a.V())})},getBandwidthEstimate:function(){return a.s.getBandwidthEstimate()},onMetadata:function(D,I,L,K){var J=D;if("com.apple.hls.interstitial"==D&&(J="com.apple.quicktime.HLS",D={startTime:I,endTime:L,values:K},a.B))a.B.onHLSInterstitialMetadata(a,a.h,D);K=t(K);D=K.next(); +for(var M={};!D.done;M={Rg:void 0},D=K.next())M.Rg=D.value,"ID"!=M.Rg.name&&On(k,!1,function(O){return function(){mq(a,I,L,J,O.Rg)}}(M))},disableStream:function(D){return a.disableStream(D,a.g.streaming.maxDisabledTime)},addFont:function(D,I){return a.addFont(D,I)}};v=new Sl(function(){return a.Sa()});v.addEventListener("regionadd",function(D){var I=D.region;nq(a,"timelineregionadded",I,k);On(k,!1,function(){a.B&&(a.B.onDashTimedMetadata(I),a.B.onDASHInterstitialMetadata(a,a.h,I))})});y=null;l.streaming.observeQualityChanges&& +(y=new Ml(function(){return a.Lb()}),y.addEventListener("qualitychange",function(D){oq(a,D.quality,D.position)}),y.addEventListener("audiotrackchange",function(D){oq(a,D.quality,D.position,!0)}));z=!0;A={lc:a.H,onError:function(D){return k.onError(D)},nf:function(D){On(k,!0,function(){if(a.C)a:{var I=D,L=Sp("keystatuschanged");a.dispatchEvent(L);var K=Object.keys(I);1==K.length&&""==K[0]&&(K=["00"],I={"00":I[""]});L=1==K.length&&"00"==K[0];var J=!1;if(K.length){K=a.keySystem();for(var M=Xg(a.g.drm.clearKeys), +O=t(a.i.variants),N=O.next();!N.done;N=O.next()){N=N.value;var P=[];N.audio&&P.push(N.audio);N.video&&P.push(N.video);P=t(P);for(var R=P.next();!R.done;R=P.next()){var S=R.value;R=N.allowedByKeySystem;if(S.keyIds.size)if(S.drmInfos.length&&!M.size){S=t(S.drmInfos);for(var aa=S.next();!aa.done;aa=S.next())if(aa=aa.value,aa.keyIds.size&&aa.keySystem==K){N.allowedByKeySystem=!0;aa=t(aa.keyIds);for(var W=aa.next();!W.done;W=aa.next())if(W=W.value,(W=I[L?"00":W])||a.C.F)N.allowedByKeySystem=N.allowedByKeySystem&& +!!W&&!qi.includes(W)}}else for(N.allowedByKeySystem=!0,S=t(S.keyIds),aa=S.next();!aa.done;aa=S.next())if(aa=aa.value,(aa=I[L?"00":aa])||a.C.F)N.allowedByKeySystem=N.allowedByKeySystem&&!!aa&&!qi.includes(aa);R!=N.allowedByKeySystem&&(J=!0)}}}if(J&&(pq(a),!qq(a)))break a;(I=a.l.l)&&!I.allowedByKeySystem&&Pp(a)}})},onExpirationUpdated:function(D,I){var L=Sp("expirationupdated");k.dispatchEvent(L);if((L=k.l)&&L.onExpirationUpdated)L.onExpirationUpdated(D,I)},onEvent:function(D){k.dispatchEvent(D);"drmsessionupdate"== +D.type&&z&&(z=!1,D=Date.now()/1E3-k.Ka,(a.A||k.getStats()).m=D,a.S&&Cc(a.S))}};B=Lp(a,m);Kg(a.H,B);E=function(){return a.dd(A)};H={config:l,kk:w,zk:v,yk:y,dd:E,jk:u,networkingEngine:B,bj:f,aj:h};k=new Nn(b,d,c,H);return C.return(k)})}function bq(a,b){var c,d,e;return Q(function(f){if(1==f.g)return c=a.g.manifest.retryParameters,F(f,vo(b,a.H,c),2);d=f.h;"application/x-mpegurl"==d&&(e=qb(),"WEBKIT"===e.Ea()&&(d="application/vnd.apple.mpegurl"));return f.return(d)})} +function kq(a,b){if(!vi(qb()))return!0;if(b){if(""==(a.h||wi()).canPlayType(b))return!1;if(!vi(qb())||!ti.has(b))return!0;if(Ne(b))return"WEBKIT"===qb().Ea()&&(a.g.drm.servers["com.apple.fps"]||a.g.drm.servers["com.apple.fps.1_0"])?a.g.streaming.useNativeHlsForFairPlay:a.g.streaming.preferNativeHls;if("application/dash+xml"===b||"video/vnd.mpeg.dash.mpd"===b)return a.g.streaming.preferNativeDash}return!1} +function rq(a){var b=a.g.textDisplayFactory;b!==a.Ae&&(a.o=b(),a.o.configure?a.o.configure(a.g.textDisplayer):wb("Text displayer w/ configure",'Text displayer should have a "configure" method!'),a.Ae=b,a.o.setTextVisibility(a.oa))} +function $p(a){var b,c,d;return Q(function(e){if(1==e.g)return qb(),Wp(a,"media-source"),a.g.mediaSource.useSourceElements&&Cj(a.h),rq(a),b=sq(a.h,a.o,{Bj:function(){return a.keySystem()},onMetadata:function(f,g,h){f=t(f);for(var k=f.next();!k.done;k=f.next())if(k=k.value,k.data&&"number"==typeof k.cueTime&&k.frames){var l=k.cueTime+g,m=h;m&&l>m&&(m=l);for(var n=t(k.frames),q=n.next();!q.done;q=n.next())mq(a,l,m,"org.id3",q.value);if(a.B)a.B.onHlsTimedMetadata(k,l)}},rk:function(f){a.Za&&Tl(a.Za, +{schemeIdUri:f.schemeIdUri,startTime:f.startTime,endTime:f.endTime,id:String(f.id),emsg:f})},onEvent:function(f){return a.dispatchEvent(f)},vk:function(){a.G&&a.G.update&&a.G.update()}},a.S,a.g.mediaSource),c=a.g.manifest,d=c.segmentRelativeVttTiming,b.Ka=d,F(e,b.K,2);a.I=b;G(e)})} +function tq(a,b,c){function d(){return uq(a)}a.j.D(b,"playing",d);a.j.D(b,"pause",d);a.j.D(b,"ended",d);a.j.D(b,"ratechange",function(){var f=a.h.playbackRate;0!=f&&(a.K&&(a.K.set(f),a.m==vq&&a.s.playbackRateChanged(f),wq(a,f)),f=Sp("ratechange"),a.dispatchEvent(f))});b.remote&&(a.j.D(b.remote,"connect",function(){a.l&&"connected"==b.remote.state&&xq(a);pq(a)}),a.j.D(b.remote,"connecting",function(){return pq(a)}),a.j.D(b.remote,"disconnect",function(){return Q(function(f){if(1==f.g)return a.l&&"disconnected"== +b.remote.state?F(f,Em(a.l),3):f.u(2);2!=f.g&&xq(a);pq(a);G(f)})}));b.audioTracks&&(a.j.D(b.audioTracks,"addtrack",function(){return pq(a)}),a.j.D(b.audioTracks,"removetrack",function(){return pq(a)}),a.j.D(b.audioTracks,"change",function(){return pq(a)}));b.videoTracks&&(a.j.D(b.videoTracks,"addtrack",function(){return pq(a)}),a.j.D(b.videoTracks,"removetrack",function(){return pq(a)}),a.j.D(b.videoTracks,"change",function(){return pq(a)}));if(b.textTracks){var e=function(){a.m===yq&&a.o instanceof +Io&&xq(a);pq(a)};a.j.D(b.textTracks,"addtrack",function(f){if(f.track)switch(f=f.track,f.kind){case "metadata":zq(a,f);break;case "chapters":Aq(a,f);break;default:e()}});a.j.D(b.textTracks,"removetrack",e);a.j.D(b.textTracks,"change",e);"keep"!==a.g.streaming.crossBoundaryStrategy&&(a.j.D(b,"waiting",function(){a.l&&Im(a.l)}),a.j.D(b,"timeupdate",function(){a.l&&Im(a.l)}))}"none"!=b.preload&&a.j.za(b,"loadedmetadata",function(){a.A.F=Date.now()/1E3-c})} +function gq(a,b,c,d){var e,f,g,h,k,l,m,n,q,r,u,w,v,y,z,A,B,E,H,C,D,I,L,K,J,M,O,N;return Q(function(P){switch(P.g){case 1:Wp(a,"load");e=a.h;a.K=new Il({Ue:function(){return e.playbackRate},Kc:function(){return e.defaultPlaybackRate},hh:function(R){e.playbackRate=R},ki:function(R){e.currentTime+=R}});tq(a,e,b);"onchange"in window.screen&&a.j.D(window.screen,"change",function(){if(a.N.getConfiguration){var R=a.N.getConfiguration();"AUTO"==R.zc?qq(a):"AUTO"==a.g.preferredVideoHdrLevel&&a.g.abr.enabled&& +(R.zc="AUTO",a.N.configure(R),qq(a))}});f=!1;g=t(a.i.variants);for(h=g.next();!h.done;h=g.next())k=h.value,(l=k.video&&k.video.dependencyStream)&&(f=Dc(l));Rp(a,a.g,f);a.td=a.g.preferredTextLanguage;a.qe=a.g.preferredTextRole;a.pe=a.g.preferForcedSubs;Bq(a.i.presentationTimeline,a.g.playRangeStart,a.g.playRangeEnd);a.s.init(function(R,S,aa){a.i&&a.l&&R!=a.l.l&&Cq(a,R,!0,void 0===S?!1:S,void 0===aa?0:aa)});a.s.setMediaElement(e);a.s.setCmsdManager(a.ka);a.l=Dq(a);a.l.configure(a.g.streaming);a.m=vq; +a.dispatchEvent(Sp("streaming"));m=c;case 2:(q=a.l.l)||m||(m=qq(a)?a.s.chooseVariant():null);r=[];n=q||m;u=t([n.video,n.audio]);for(w=u.next();!w.done;w=u.next())(v=w.value)&&!v.segmentIndex&&(r.push(v.createSegmentIndex()),v.dependencyStream&&r.push(v.dependencyStream.createSegmentIndex()));if(!(0D&&(B=D);return F(P,Hq(m,B),9);case 9:I=P.h,y(I);case 8:Cq(a,m,!0,!1,0);case 7:return a.F.ready(),L=a.yc().find(function(R){return R.active}), +L||((K=ag(a.i.textStreams,a.td,a.qe,a.pe)[0]||null)&&Gn(a.A.h,K,!0),m&&(K?(dg(m.audio,K,a.g)&&(a.oa=!0),a.oa&&a.o.setTextVisibility(!0)):(a.oa=!1,a.o.setTextVisibility(!1)),Iq(a)),K&&(a.g.streaming.alwaysStreamText||a.Hg())&&(Cm(a.l,K),Jq(a))),F(P,a.l.start(d),10);case 10:a.g.abr.enabled&&(a.s.enable(),Kq(a));pq(a);qq(a);a.i.variants.some(function(R){return R.primary});if((J=a.V())&&(a.g.streaming.liveSync&&a.g.streaming.liveSync.enabled||a.i.serviceDescription||a.g.streaming.liveSync.panicMode)|| +a.g.streaming.vodDynamicPlaybackRate)M=function(){return Lq(a)},a.j.D(e,"timeupdate",M);J||(O=function(){return Mq(a)},a.j.D(e,"timeupdate",O),Mq(a),a.i.nextUrl&&(0, the browser will not load anything until play() is called. We are unable to measure load latency in a meaningful way, and we cannot provide track info yet. Please do not use preload="none" with Shaka Player.'), +l.resolve()),a.j.za(d,"error",function(){l.reject(Yp(a))}),F(w,df(a.g.streaming.loadTimeout,l),4);case 4:if((n=a.V())&&(a.g.streaming.liveSync&&a.g.streaming.liveSync.enabled||a.g.streaming.liveSync.panicMode)||a.g.streaming.vodDynamicPlaybackRate)q=function(){return Lq(a)},a.j.D(d,"timeupdate",q);n||(r=function(){return Mq(a)},a.j.D(d,"timeupdate",r),Mq(a));a.B&&(a.B.onManifestUpdated(n),n&&(u=a.Sa().end,a.j.D(d,"progress",function(){var v=a.Sa().end;u!=v&&(a.B.onManifestUpdated(a.V()),u=v)}))); +a.Ka=!0;G(w)}})}function Qq(a){var b=a.g.preferredAudioLanguage;""!=b&&a.Ei(b,a.g.preferredVariantRole)}function Sq(a){var b=a.g.preferredTextLanguage;""!=b&&a.bh(b,a.g.preferredTextRole,a.g.preferForcedSubs)} +function zq(a,b){if("metadata"==b.kind){b.mode="hidden";a.j.D(b,"cuechange",function(){if(b.activeCues)for(var d=t(b.activeCues),e=d.next();!e.done;e=d.next())if(e=e.value,mq(a,e.startTime,e.endTime,e.type,e.value),a.B)a.B.onCueMetadataChange(e.value);if(b.cues){d=[];e=t(b.cues);for(var f=e.next(),g={};!f.done;g={tc:void 0},f=e.next())g.tc=f.value,"com.apple.quicktime.HLS"==g.tc.type&&null!=g.tc.startTime&&(f=d.find(function(h){return function(k){return k.startTime==h.tc.startTime&&k.endTime==h.tc.endTime}}(g)), +f||(f={startTime:g.tc.startTime,endTime:g.tc.endTime,values:[]},d.push(f)),f.values.push(g.tc.value));d=t(d);for(e=d.next();!e.done;e=d.next())e=e.value,e.values.some(function(h){return"X-ASSET-URI"==h.key||"X-ASSET-LIST"==h.key})&&a.B&&(e.values.push({key:"CUE",description:"",data:0!=e.startTime||a.V()?"ONCE":"ONCE,PRE",mimeType:null,pictureType:null}),a.B.onHLSInterstitialMetadata(a,a.h,e))}});var c=(new $e(function(){var d=Tq(a);d=t(d);for(var e=d.next();!e.done;e=d.next())e.value.mode="hidden"})).Hb().ha(.5); +a.oe.push(function(){c.stop()})}}function dq(a,b,c){b=(new Map).set("startTime",b.startTime).set("endTime",b.endTime).set("metadataType",b.schemeIdUri).set("payload",b.payload);a.dispatchEvent(Sp(c,b))}function mq(a,b,c,d,e){a.va&&(b={schemeIdUri:d,startTime:b,endTime:c||Infinity,id:"",payload:e},b.id=JSON.stringify(b),Tl(a.va,b))}function Aq(a,b){if(b&&"chapters"==b.kind){b.mode="hidden";var c=(new $e(function(){b.mode="hidden"})).Hb().ha(.5);a.oe.push(function(){c.stop()})}} +p.Dk=function(){for(var a=this.$;a.g;)a.release()};p.dd=function(a){return new oh(a)}; +function Lp(a,b){function c(f){b()?b().dispatchEvent(f):a.dispatchEvent(f)}function d(f){b()?On(b(),!0,f):f()}b||(b=function(){return null});var e=new Gg(function(f,g,h,k,l){var m=b()?b().j:a.s;m&&m.segmentDownloaded(f,g,h,k,l)},function(f,g,h){g=(new Map).set("headers",f).set("request",g).set("requestType",h);c(Sp("downloadheadersreceived",g));d(function(){if(a.ka){var k=a.ka;if(k.h.enabled){var l=f["cmsd-static"];if(l)try{var m=new Map,n=l.split(",");for(l=0;lv);if(z){var A=z.next().value;if(A&&A!=q){if(n&&!Wc(q.O(),A.O())){var B=A.O()[0],E=new URL(B),H=new URL(n);if(E.origin!==H.origin)var C=B;else{for(var D=E.pathname.split("/").slice(1),I=H.pathname.split("/").slice(1,-1);D[0]===I[0];)D.shift(),I.shift();for(;I.length;)I.shift(),D.unshift("..");C=D.join("/")}r.nor=C}if((A.startByte|| +A.endByte)&&(q.startByte!=A.startByte||q.endByte!=A.endByte)){var L=A.startByte+"-";A.endByte&&(L+=A.endByte);r.nrr=L}}}var K=k.h.sb()||1,J=yp(k,w.type)||500,M=w.bandwidth;var O=M?M*(q.endTime-q.startTime)/1E3/(J/K/1E3)*k.g.rtpSafetyFactor:NaN;isNaN(O)||(r.rtp=O)}}u&&r.ot!==vp&&(r.tb=zp(k,r.ot)/1E3);op(k,g,r)}}catch(N){cb("CMCD_SEGMENT_ERROR","Could not generate segment CMCD data.",N)}break;case 2:case 5:case 6:op(k,g,{ot:"k"});break;case 4:op(k,g,{ot:"o"})}})},function(f,g,h,k){(f=b()?b().l:a.G)&& +f.banLocation&&f.banLocation(k)},function(f,g){if(g.data){g=g.data.byteLength;var h=b()?b().getStats():a.A;h&&(Ln(h,g),0===f&&(h.ci=g))}});e.configure(a.g.networking);return e}function Eq(a,b){return new xl(a.h,a.i,a.g.streaming,b,function(){a.eb&&Ll(a.eb,!0);a.l&&a.l.Vc();a.P&&Uq(a)},function(c){return a.dispatchEvent(c)})} +function Fq(a,b){var c=a.V()||"number"===typeof b&&0=e&&0=b)return 1;if(!(a<=this.h.currentTime)&&al(r,m))&&(q=r);q!=m&&(q?(m=Lf(q),k.ce(m,!0,d||0)):Pp(k))}var k=this;c=void 0===c?0:c;d=void 0===d?0:d;e=void 0===e?"":e;f=void 0===f?!1:f;g=void 0===g?"":g;if(this.i&&this.F&&(h(),!this.ya()))return;(function(){if(k.h&&k.h.audioTracks){var l= +ag(k.Fb(),a,b||"",!1)[0];l&&k.ce(l)}})()};p.bh=function(a,b,c){function d(){e.td=a;e.qe=b||"";e.pe=c||!1;var f=ag(e.i.textStreams,e.td,e.qe,e.pe)[0]||null;f&&f!=e.l.A&&(Gn(e.A.h,f,!1),e.g.streaming.alwaysStreamText||e.Hg())&&(Cm(e.l,f),xq(e),Jq(e))}var e=this;c=void 0===c?!1:c;if(this.i&&this.F&&(d(),!this.ya()))return;(function(){var f=ag(e.yc(),a,b||"",c||!1)[0];f&&e.dh(f)})()}; +p.Mk=function(a,b,c){function d(){for(var f=null,g=t(e.i.variants),h=g.next();!h.done;h=g.next())if(h=h.value,h.audio.label==a){f=h;break}null!=f&&(e.N=e.g.adaptationSetCriteriaFactory(),e.N.configure({language:f.language,role:"",channelCount:0,zc:"",spatialAudio:!1,videoLayout:"",zd:"",cd:a,codecSwitchingStrategy:e.g.mediaSource.codecSwitchingStrategy,audioCodec:"",Cd:"",Ee:0,preferredAudioCodecs:e.g.preferredAudioCodecs,preferredAudioChannelCount:e.g.preferredAudioChannelCount}),Pp(e,b,c))}var e= +this;b=void 0===b?!0:b;c=void 0===c?0:c;if(this.i&&this.F&&(d(),!this.ya()))return;(function(){if(e.h&&e.h.audioTracks){var f=Array.from(e.h.audioTracks),g=null;f=t(f);for(var h=f.next();!h.done;h=f.next())h=h.value,h.label==a&&(g=h);g&&ar(e,g)}})()};p.Hg=function(){var a=this.oa;return this.o?this.o.isTextVisible():a};p.tj=function(){return this.ab.map(function(a){return Of(a)})}; +p.rj=function(a){wb("getChapters","Please use an getChaptersAsync.");if(!this.ab.length)return[];var b=gf(a);a=this.ab.filter(function(f){return gf(f.language)==b});if(!a.length)return[];var c=[],d=new Set;a=t(a);for(var e=a.next();!e.done;e=a.next())e=e.value,e.segmentIndex&&e.segmentIndex.Cb(function(f){var g=f.O()[0],h=f.startTime+"-"+f.endTime+"-"+g;f={id:h,title:g,startTime:f.startTime,endTime:f.endTime};d.has(h)||(c.push(f),d.add(h))});return c}; +p.sj=function(a){var b=this,c,d,e,f,g,h,k;return Q(function(l){switch(l.g){case 1:if(!b.ab.length)return l.return([]);c=gf(a);d=b.ab.filter(function(m){return gf(m.language)==c});if(!d.length)return l.return([]);e=[];f=new Set;g=t(d);h=g.next();case 2:if(h.done){l.u(4);break}k=h.value;if(k.segmentIndex){l.u(5);break}return F(l,k.createSegmentIndex(),5);case 5:k.segmentIndex.Cb(function(m){var n=m.O()[0],q=m.startTime+"-"+m.endTime+"-"+n;m={id:q,title:n,startTime:m.startTime,endTime:m.endTime};f.has(q)|| +(e.push(m),f.add(q))});h=g.next();l.u(2);break;case 4:return l.return(e)}})};function Oq(a){return Array.from(a.h.textTracks).filter(function(b){return"metadata"!=b.kind&&"chapters"!=b.kind&&"Shaka Player TextTrack"!=b.label})}function Pq(a){return Array.from(a.h.textTracks).find(function(b){return"Shaka Player TextTrack"==b.label})}function Tq(a){return Array.from(a.h.textTracks).filter(function(b){return"metadata"==b.kind})} +p.ih=function(a){a=!!a;this.oa!=a&&(this.oa=a,this.m==vq?(this.o.setTextVisibility(a),this.g.streaming.alwaysStreamText||(a?this.l.A||(a=ag(this.i.textStreams,this.td,this.qe,this.pe),0=Math.floor(d.end)&&a.Ed():Math.floor(c)<=Math.floor(d.start+e)&&a.Ed()})} +function uq(a){if(a.A&&a.P){var b=a.A.g,c="playing";a.P.g==ji?c="buffering":a.Td()?c="ended":a.h.paused&&(c="paused");var d=c;if(null==b.g)b.g={timestamp:Date.now()/1E3,state:d,duration:0},b=!0;else{var e=Date.now()/1E3;b.g.duration=e-b.g.timestamp;b.g.state==d?b=!1:(b.h.push(b.g),b.g={timestamp:e,state:d,duration:0},b=!0)}b&&(c=(new Map).set("newstate",c),a.dispatchEvent(Sp("statechanged",c)))}} +function Lq(a){var b=a.h.playbackRate,c=a.V();if(a.g.streaming.vodDynamicPlaybackRate&&!c){var d=a.g.streaming.vodDynamicPlaybackRateLowBufferRate,e=a.Rh();e<=a.g.streaming.vodDynamicPlaybackRateBufferRatio?b!=d&&a.ie(d,!1):1==e&&b!==a.K.Kc()&&a.Ed()}if(c&&(c=a.Sa(),Number.isFinite(c.end)&&!(a.h.currentTime1E3*f&&(f=a.g.streaming.liveSync.dynamicTargetLatency.minLatency, +a.U=Math.max(a.U-(g-f)/2,f+d),a.Xb=Date.now());e&&null!==a.U&&(h=a.U+d,k=a.U-d);g=c.end-a.h.currentTime;d=0;a.m==yq&&(e=a.h.buffered,0h?(b!=l&&a.ie(l,!1),a.Xb=null):void 0!=k&&m&&g-de)&&a.Qfb&&(b+=Math.pow(2,32)),b=b.toString(16);return new U(2,3,3016,c,b,a.h.error.message)}function Bq(a,b,c){0=this.Sa().end};T("shaka.Player",Y);Y.prototype.isEnded=Y.prototype.Td;Y.prototype.isRemotePlayback=Y.prototype.ya;Y.prototype.addFont=Y.prototype.addFont;Y.prototype.setVideoContainer=Y.prototype.Li;Y.prototype.getFetchedPlaybackInfo=Y.prototype.xj;Y.prototype.getManifestParserFactory=Y.prototype.Dj; +Y.prototype.getManifest=Y.prototype.zg;Y.prototype.retryStreaming=Y.prototype.Yg;Y.prototype.setMaxHardwareResolution=Y.prototype.Sk;Y.prototype.addChaptersTrack=Y.prototype.Fe;Y.prototype.addThumbnailsTrack=Y.prototype.Ge;Y.prototype.addTextTrackAsync=Y.prototype.Dd;Y.prototype.getStats=Y.prototype.getStats;Y.prototype.getBufferedInfo=Y.prototype.Lb;Y.prototype.getSegmentAvailabilityDuration=Y.prototype.Ve;Y.prototype.getPresentationStartTimeAsDate=Y.prototype.Ag; +Y.prototype.getPlayheadTimeAsDate=Y.prototype.Hj;Y.prototype.setTextTrackVisibility=Y.prototype.ih;Y.prototype.getChaptersAsync=Y.prototype.sj;Y.prototype.getChapters=Y.prototype.rj;Y.prototype.getChaptersTracks=Y.prototype.tj;Y.prototype.isTextTrackVisible=Y.prototype.Hg;Y.prototype.selectVariantsByLabel=Y.prototype.Mk;Y.prototype.selectTextLanguage=Y.prototype.bh;Y.prototype.selectAudioLanguage=Y.prototype.Ei;Y.prototype.getTextLanguages=Y.prototype.Nj;Y.prototype.getAudioLanguages=Y.prototype.oj; +Y.prototype.getTextLanguagesAndRoles=Y.prototype.Oj;Y.prototype.getAudioLanguagesAndRoles=Y.prototype.pj;Y.prototype.getVideoTracks=Y.prototype.getVideoTracks;Y.prototype.selectVideoTrack=Y.prototype.Nk;Y.prototype.getAudioTracks=Y.prototype.getAudioTracks;Y.prototype.selectAudioTrack=Y.prototype.Lk;Y.prototype.selectVariantTrack=Y.prototype.ce;Y.prototype.selectTextTrack=Y.prototype.dh;Y.prototype.getThumbnails=Y.prototype.Qj;Y.prototype.getAllThumbnails=Y.prototype.nj; +Y.prototype.getImageTracks=Y.prototype.zj;Y.prototype.getTextTracks=Y.prototype.yc;Y.prototype.getVariantTracks=Y.prototype.Fb;Y.prototype.cancelTrickPlay=Y.prototype.Ed;Y.prototype.trickPlay=Y.prototype.ie;Y.prototype.useTrickPlayTrackIfAvailable=Y.prototype.yh;Y.prototype.getPlaybackRate=Y.prototype.sb;Y.prototype.isBuffering=Y.prototype.Gg;Y.prototype.getKeyStatuses=Y.prototype.Se;Y.prototype.getActiveSessionsMetadata=Y.prototype.yg;Y.prototype.getExpiration=Y.prototype.Md; +Y.prototype.drmInfo=Y.prototype.drmInfo;Y.prototype.keySystem=Y.prototype.keySystem;Y.prototype.isFullyLoaded=Y.prototype.$j;Y.prototype.goToLive=Y.prototype.Wj;Y.prototype.seekRange=Y.prototype.Sa;Y.prototype.isVideoOnly=Y.prototype.gk;Y.prototype.isAudioOnly=Y.prototype.Zj;Y.prototype.isInProgress=Y.prototype.Oc;Y.prototype.isLive=Y.prototype.V;Y.prototype.getQueueManager=Y.prototype.Wh;Y.prototype.getAdManager=Y.prototype.Qh;Y.prototype.getAssetUri=Y.prototype.jd; +Y.prototype.getNetworkingEngine=Y.prototype.Nb;Y.prototype.getMediaElement=Y.prototype.Gj;Y.prototype.getManifestType=Y.prototype.Th;Y.prototype.getLoadMode=Y.prototype.Cj;Y.prototype.resetConfiguration=Y.prototype.zi;Y.prototype.getBufferFullness=Y.prototype.Rh;Y.prototype.getNonDefaultConfiguration=Y.prototype.Vh;Y.prototype.getConfigurationForLowLatency=Y.prototype.uj;Y.prototype.getConfiguration=Y.prototype.getConfiguration;Y.prototype.configurationForLowLatency=Y.prototype.kj; +Y.prototype.configure=Y.prototype.configure;Y.prototype.releaseAllMutexes=Y.prototype.Dk;Y.prototype.destroyAllPreloads=Y.prototype.hg;Y.prototype.preload=Y.prototype.preload;Y.prototype.detachAndSavePreload=Y.prototype.Mh;Y.prototype.unloadAndSavePreload=Y.prototype.Vk;Y.prototype.load=Y.prototype.load;Y.prototype.updateStartTime=Y.prototype.Zk;Y.prototype.unload=Y.prototype.rc;Y.prototype.detach=Y.prototype.detach;Y.prototype.attachCanvas=Y.prototype.cj;Y.prototype.attach=Y.prototype.cc; +Y.probeSupport=function(a){a=void 0===a?!0:a;var b,c,d,e,f,g,h;return Q(function(k){switch(k.g){case 1:b={};if(!a){k.u(2);break}return F(k,bi(),3);case 3:b=k.h;case 2:return c=ui(),d=wk(),e=qb(),F(k,e.ec(),4);case 4:return f=k.h,g={manifest:c,media:d,drm:b,hardwareResolution:f},h=Vp,h.forEach(function(l,m){g[m]=l()}),k.return(g)}})}; +Y.isBrowserSupported=function(){window.Promise||bb("A Promise implementation or polyfill is required");if(!(window.Promise&&window.Uint8Array&&Array.prototype.forEach)||(navigator.userAgent||"").includes("Trident/"))return!1;qb();return vi()?!0:""!=wi().canPlayType("application/x-mpegurl")};Y.setQueueManagerFactory=function(a){Np=a};Y.setAdManagerFactory=function(a){Mp=a};Y.registerSupportPlugin=Up;Y.prototype.destroy=Y.prototype.destroy;var Tp=0,Ip=1,vq=2,yq=3; +Y.LoadMode={DESTROYED:Tp,NOT_LOADED:Ip,MEDIA_SOURCE:vq,SRC_EQUALS:yq};Y.version="v4.15.0";var lr=["4","15"];xb=new function(a){this.g=a;this.i=yb;this.h=zb}(new vb(Number(lr[0]),Number(lr[1])));var Vp=new Map,Mp=null,Np=null;function mr(){this.g=[];this.i=this.m=this.l=this.j=this.h=0}function nr(a){return a.g.length?a.g.reduce(function(b,c){return b+c},0)/a.g.length:0};function or(a,b,c){var d=this;this.g=a;this.h=b;this.m=c;this.i=!1;this.j=this.h.getVolume();this.l=new jb;this.l.D(this.h,google.ima.AdEvent.Type.PAUSED,function(){d.i=!0});this.l.D(this.h,google.ima.AdEvent.Type.RESUMED,function(){d.i=!1})}p=or.prototype;p.needsSkipUI=function(){return!1};p.isClientRendering=function(){return!0};p.hasCustomClick=function(){return!0};p.isUsingAnotherMediaElement=function(){return!0};p.getDuration=function(){return this.g.getDuration()}; +p.getMinSuggestedDuration=function(){return this.g.getMinSuggestedDuration()};p.getRemainingTime=function(){return this.h.getRemainingTime()};p.isPaused=function(){return this.i};p.isSkippable=function(){return 0<=this.g.getSkipTimeOffset()};p.getTimeUntilSkippable=function(){var a=this.g.getSkipTimeOffset();a=this.getRemainingTime()-a;return Math.max(a,0)};p.canSkipNow=function(){return this.h.getAdSkippableState()};p.skip=function(){return this.h.skip()};p.pause=function(){return this.h.pause()}; +p.play=function(){return this.h.resume()};p.getVolume=function(){return this.h.getVolume()};p.setVolume=function(a){this.m.volume=a;return this.h.setVolume(a)};p.isMuted=function(){return 0==this.h.getVolume()};p.isLinear=function(){return this.g.isLinear()};p.resize=function(a,b){this.h.resize(a,b)};p.setMuted=function(a){(this.m.muted=a)?(this.j=this.getVolume(),this.h.setVolume(0)):this.h.setVolume(this.j)};p.getSequenceLength=function(){var a=this.g.getAdPodInfo();return null==a?1:a.getTotalAds()}; +p.getPositionInSequence=function(){var a=this.g.getAdPodInfo();return null==a?1:a.getAdPosition()};p.getTitle=function(){return this.g.getTitle()};p.getDescription=function(){return this.g.getDescription()};p.getVastMediaBitrate=function(){return this.g.getVastMediaBitrate()};p.getVastMediaHeight=function(){return this.g.getVastMediaHeight()};p.getVastMediaWidth=function(){return this.g.getVastMediaWidth()};p.getVastAdId=function(){return""};p.getAdId=function(){return this.g.getAdId()}; +p.getCreativeAdId=function(){return this.g.getCreativeAdId()};p.getAdvertiserName=function(){return this.g.getAdvertiserName()};p.getMediaUrl=function(){return this.g.getMediaUrl()};p.getTimeOffset=function(){var a=this.g.getAdPodInfo();return null==a?0:a.getTimeOffset()};p.getPodIndex=function(){var a=this.g.getAdPodInfo();return null==a?0:a.getPodIndex()};p.release=function(){this.h=this.g=null};T("shaka.ads.ClientSideAd",or);or.prototype.release=or.prototype.release;or.prototype.getPodIndex=or.prototype.getPodIndex; +or.prototype.getTimeOffset=or.prototype.getTimeOffset;or.prototype.getMediaUrl=or.prototype.getMediaUrl;or.prototype.getAdvertiserName=or.prototype.getAdvertiserName;or.prototype.getCreativeAdId=or.prototype.getCreativeAdId;or.prototype.getAdId=or.prototype.getAdId;or.prototype.getVastAdId=or.prototype.getVastAdId;or.prototype.getVastMediaWidth=or.prototype.getVastMediaWidth;or.prototype.getVastMediaHeight=or.prototype.getVastMediaHeight;or.prototype.getVastMediaBitrate=or.prototype.getVastMediaBitrate; +or.prototype.getDescription=or.prototype.getDescription;or.prototype.getTitle=or.prototype.getTitle;or.prototype.getPositionInSequence=or.prototype.getPositionInSequence;or.prototype.getSequenceLength=or.prototype.getSequenceLength;or.prototype.setMuted=or.prototype.setMuted;or.prototype.resize=or.prototype.resize;or.prototype.isLinear=or.prototype.isLinear;or.prototype.isMuted=or.prototype.isMuted;or.prototype.setVolume=or.prototype.setVolume;or.prototype.getVolume=or.prototype.getVolume; +or.prototype.play=or.prototype.play;or.prototype.pause=or.prototype.pause;or.prototype.skip=or.prototype.skip;or.prototype.canSkipNow=or.prototype.canSkipNow;or.prototype.getTimeUntilSkippable=or.prototype.getTimeUntilSkippable;or.prototype.isSkippable=or.prototype.isSkippable;or.prototype.isPaused=or.prototype.isPaused;or.prototype.getRemainingTime=or.prototype.getRemainingTime;or.prototype.getMinSuggestedDuration=or.prototype.getMinSuggestedDuration;or.prototype.getDuration=or.prototype.getDuration; +or.prototype.isUsingAnotherMediaElement=or.prototype.isUsingAnotherMediaElement;or.prototype.hasCustomClick=or.prototype.hasCustomClick;or.prototype.isClientRendering=or.prototype.isClientRendering;or.prototype.needsSkipUI=or.prototype.needsSkipUI;function pr(){} +function qr(a,b){var c=[];a=t(qd(a,"Ad"));for(var d=a.next();!d.done;d=a.next())if(d=ud(d.value,"InLine"))if(d=ud(d,"Creatives")){d=t(qd(d,"Creative"));for(var e=d.next();!e.done;e=d.next()){e=e.value;var f=ud(e,"Linear");f&&rr(c,b,f);if(e=ud(e,"NonLinearAds")){e=qd(e,"NonLinear");e=t(e);for(var g=e.next();!g.done;g=e.next())a:{f=c;var h=b,k=g.value,l=ud(k,"StaticResource");if(l)g=l.attributes.creativeType;else{l=ud(k,"HTMLResource");if(!l)break a;g="text/html"}if(l=sd(l)){"text/html"===g&&(l="data:text/html;charset=UTF-8,"+ +encodeURIComponent(l));var m=xd(k,"width",Dd)||xd(k,"expandedWidth",Dd),n=xd(k,"height",Dd)||xd(k,"expandedHeight",Dd);if(m||n){var q=null;(k=k.attributes.minSuggestedDuration)&&(q=dd(k));k=0;null!=h&&(k=h);f.push({id:null,groupId:null,startTime:k,endTime:null,uri:l,mimeType:g,isSkippable:!1,skipOffset:null,skipFor:null,canJump:!1,resumeOffset:0,playoutLimit:q,once:!0,pre:null==h,post:Infinity==h,timelineRange:!1,loop:!1,overlay:{viewport:{x:0,y:0},topLeft:{x:0,y:0},size:{x:m||0,y:n||0}},displayOnBackground:!1, +currentVideo:null,background:null})}}}}}}return c} +function rr(a,b,c){var d=0;null!=b&&(d=b);var e=null;c.attributes.skipoffset&&(e=dd(c.attributes.skipoffset),isNaN(e)&&(e=null));if(c=ud(c,"MediaFiles")){var f=qd(c,"MediaFile");c=f;f=f.filter(function(h){return"streaming"==h.attributes.delivery});f.length&&(c=f);c=c.sort(function(h,k){return(parseInt(k.attributes.height,10)||0)-(parseInt(h.attributes.height,10)||0)});c=t(c);for(f=c.next();!f.done;f=c.next())if(f=f.value,!f.attributes.apiFramework){var g=sd(f);if(g){a.push({id:null,groupId:null,startTime:d, +endTime:null,uri:g,mimeType:f.attributes.type||null,isSkippable:null!=e,skipOffset:e,skipFor:null,canJump:!1,resumeOffset:0,playoutLimit:null,once:!0,pre:null==b,post:Infinity==b,timelineRange:!1,loop:!1,overlay:null,displayOnBackground:!1,currentVideo:null,background:null});break}}}}T("shaka.ads.Utils",pr);pr.ADS_LOADED="ads-loaded";pr.AD_STARTED="ad-started";pr.AD_FIRST_QUARTILE="ad-first-quartile";pr.AD_MIDPOINT="ad-midpoint";pr.AD_THIRD_QUARTILE="ad-third-quartile";pr.AD_COMPLETE="ad-complete"; +pr.AD_STOPPED="ad-stopped";pr.AD_SKIPPED="ad-skipped";pr.AD_VOLUME_CHANGED="ad-volume-changed";pr.AD_MUTED="ad-muted";pr.AD_PAUSED="ad-paused";pr.AD_RESUMED="ad-resumed";pr.AD_SKIP_STATE_CHANGED="ad-skip-state-changed";pr.CUEPOINTS_CHANGED="ad-cue-points-changed";pr.IMA_AD_MANAGER_LOADED="ima-ad-manager-loaded";pr.IMA_STREAM_MANAGER_LOADED="ima-stream-manager-loaded";pr.AD_CLICKED="ad-clicked";pr.AD_PROGRESS="ad-progress";pr.AD_BUFFERING="ad-buffering";pr.AD_IMPRESSION="ad-impression"; +pr.AD_DURATION_CHANGED="ad-duration-changed";pr.AD_CLOSED="ad-closed";pr.AD_LOADED="ad-loaded";pr.ALL_ADS_COMPLETED="all-ads-completed";pr.AD_LINEAR_CHANGED="ad-linear-changed";pr.AD_METADATA="ad-metadata";pr.AD_RECOVERABLE_ERROR="ad-recoverable-error";pr.AD_ERROR="ad-error";pr.AD_BREAK_READY="ad-break-ready";pr.AD_INTERACTION="ad-interaction";pr.AD_CONTENT_PAUSE_REQUESTED="ad-content-pause-requested";pr.AD_CONTENT_RESUME_REQUESTED="ad-content-resume-requested";pr.AD_CONTENT_ATTACH_REQUESTED="ad-content-attach-requested";function sr(a,b,c,d,e){var f=this;this.s=a;this.i=b;this.F=!1;this.A=this.o=null;this.G=NaN;this.l=e;this.j=null;this.h=new jb;google.ima.settings.setLocale(c);google.ima.settings.setDisableCustomPlaybackForIOS10Plus(!0);this.C=new google.ima.AdDisplayContainer(this.s,this.i);this.C.initialize();this.m=new google.ima.AdsLoader(this.C);this.m.getSettings().setPlayerType("shaka-player");this.m.getSettings().setPlayerVersion("v4.15.0");this.g=null;this.B=d||new google.ima.AdsRenderingSettings;this.h.D(this.m, +google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(g){tr(f,g)});this.h.D(this.m,google.ima.AdErrorEvent.Type.AD_ERROR,function(g){ur(f,g)});this.h.D(this.i,"ended",function(){f.m.contentComplete()});this.h.za(this.i,"play",function(){f.F=!0})}sr.prototype.configure=function(a){this.o=a};sr.prototype.stop=function(){this.g&&this.g.stop();this.s&&Dj(this.s)}; +sr.prototype.release=function(){this.stop();this.A&&this.A.disconnect();this.h&&this.h.release();this.g&&this.g.destroy();this.m.destroy();this.C.destroy()};function ur(a,b){b.getError();b=(new Map).set("originalEvent",b);a.l(new V("ad-error",b));vr(a,null);a.l(new V("ad-cue-points-changed",(new Map).set("cuepoints",[])))} +function tr(a,b){a.l(new V("ads-loaded",(new Map).set("loadTime",Date.now()/1E3-a.G)));if(a.o.customPlayheadTracker){var c={currentTime:a.i.currentTime};a.g=b.getAdsManager(c,a.B);a.i.muted?a.g.setVolume(0):a.g.setVolume(a.i.volume);a.h.D(a.i,"timeupdate",function(){a.i.duration&&(c.currentTime=a.i.currentTime)});a.h.D(a.i,"volumechange",function(){a.j&&(a.j.setVolume(a.i.volume),a.i.muted&&a.j.setMuted(!0))})}else a.g=b.getAdsManager(a.i,a.B);a.l(new V("ima-ad-manager-loaded",(new Map).set("imaAdManager", +a.g)));var d=a.g.getCuePoints();if(d.length){b=[];d=t(d);for(var e=d.next();!e.done;e=d.next())b.push({start:e.value,end:null});a.l(new V("ad-cue-points-changed",(new Map).set("cuepoints",b)))}wr(a);try{a.g.init(a.i.offsetWidth,a.i.offsetHeight),a.h.D(a.i,"loadeddata",function(){a.g.resize(a.i.offsetWidth,a.i.offsetHeight)}),"ResizeObserver"in window?(a.A=new ResizeObserver(function(){a.g.resize(a.i.offsetWidth,a.i.offsetHeight)}),a.A.observe(a.i)):a.h.D(document,"fullscreenchange",function(){a.g.resize(a.i.offsetWidth, +a.i.offsetHeight)}),a.F||a.o.skipPlayDetection?a.g.start():a.h.za(a.i,"play",function(){a.F=!0;a.g.start()})}catch(f){vr(a,null)}} +function wr(a){function b(c,d){c=(new Map).set("originalEvent",c);a.l(new V(d,c))}a.h.D(a.g,google.ima.AdErrorEvent.Type.AD_ERROR,function(c){ur(a,c)});a.h.D(a.g,google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED,function(c){xr(a,c)});a.h.D(a.g,google.ima.AdEvent.Type.STARTED,function(c){xr(a,c)});a.h.D(a.g,google.ima.AdEvent.Type.FIRST_QUARTILE,function(c){b(c,"ad-first-quartile")});a.h.D(a.g,google.ima.AdEvent.Type.MIDPOINT,function(c){b(c,"ad-midpoint")});a.h.D(a.g,google.ima.AdEvent.Type.THIRD_QUARTILE, +function(c){b(c,"ad-third-quartile")});a.h.D(a.g,google.ima.AdEvent.Type.COMPLETE,function(c){b(c,"ad-complete")});a.h.D(a.g,google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED,function(c){vr(a,c)});a.h.D(a.g,google.ima.AdEvent.Type.ALL_ADS_COMPLETED,function(c){vr(a,c)});a.h.D(a.g,google.ima.AdEvent.Type.SKIPPED,function(c){b(c,"ad-skipped")});a.h.D(a.g,google.ima.AdEvent.Type.VOLUME_CHANGED,function(c){b(c,"ad-volume-changed")});a.h.D(a.g,google.ima.AdEvent.Type.VOLUME_MUTED,function(c){b(c,"ad-muted")}); +a.h.D(a.g,google.ima.AdEvent.Type.PAUSED,function(c){a.j&&(a.j.i=!0,b(c,"ad-paused"))});a.h.D(a.g,google.ima.AdEvent.Type.RESUMED,function(c){a.j&&(a.j.i=!1,b(c,"ad-resumed"))});a.h.D(a.g,google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED,function(c){a.j&&b(c,"ad-skip-state-changed")});a.h.D(a.g,google.ima.AdEvent.Type.CLICK,function(c){b(c,"ad-clicked")});a.h.D(a.g,google.ima.AdEvent.Type.AD_PROGRESS,function(c){b(c,"ad-progress")});a.h.D(a.g,google.ima.AdEvent.Type.AD_BUFFERING,function(c){b(c,"ad-buffering")}); +a.h.D(a.g,google.ima.AdEvent.Type.IMPRESSION,function(c){b(c,"ad-impression")});a.h.D(a.g,google.ima.AdEvent.Type.DURATION_CHANGE,function(c){b(c,"ad-duration-changed")});a.h.D(a.g,google.ima.AdEvent.Type.USER_CLOSE,function(c){b(c,"ad-closed")});a.h.D(a.g,google.ima.AdEvent.Type.LOADED,function(c){b(c,"ad-loaded")});a.h.D(a.g,google.ima.AdEvent.Type.ALL_ADS_COMPLETED,function(c){b(c,"all-ads-completed")});a.h.D(a.g,google.ima.AdEvent.Type.LINEAR_CHANGED,function(c){b(c,"ad-linear-changed")});a.h.D(a.g, +google.ima.AdEvent.Type.AD_METADATA,function(c){b(c,"ad-metadata")});a.h.D(a.g,google.ima.AdEvent.Type.LOG,function(c){b(c,"ad-recoverable-error")});a.h.D(a.g,google.ima.AdEvent.Type.AD_BREAK_READY,function(c){b(c,"ad-break-ready")});a.h.D(a.g,google.ima.AdEvent.Type.INTERACTION,function(c){b(c,"ad-interaction")})} +function xr(a,b){var c=b.getAd();c?(a.j=new or(c,a.g,a.i),b.type!=google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED||a.o.supportsMultipleMediaElements||a.l(new V("ad-content-pause-requested")),b=(new Map).set("ad",a.j).set("sdkAdObject",c).set("originalEvent",b),a.l(new V("ad-started",b)),a.j.isLinear()&&(a.s.setAttribute("ad-active","true"),a.o.customPlayheadTracker||a.i.pause(),a.i.muted?(b=a.j,b.j=a.i.volume,b.h.setVolume(0)):a.j.setVolume(a.i.volume))):bb("The IMA SDK fired a "+b.type+" event with no associated ad. Unable to play ad!")} +function vr(a,b){b&&b.type==google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED&&!a.o.supportsMultipleMediaElements&&a.l(new V("ad-content-resume-requested"));a.l(new V("ad-stopped",(new Map).set("originalEvent",b)));a.j&&a.j.isLinear()&&(a.s.removeAttribute("ad-active"),a.o.customPlayheadTracker||a.i.ended||a.i.play())};function yr(a,b,c,d,e,f){this.g=a;this.i=b;this.j=(this.h=b.isSkippable)?b.skipOffset||0:b.skipOffset;this.l=b.skipFor;this.A=c;this.o=d;this.m=e;this.s=f;this.B=b.overlay}p=yr.prototype;p.needsSkipUI=function(){return!0};p.isClientRendering=function(){return!0};p.hasCustomClick=function(){return!1};p.isUsingAnotherMediaElement=function(){return this.s};p.getDuration=function(){var a=this.g.duration;return isNaN(a)?-1:a};p.getMinSuggestedDuration=function(){return this.getDuration()}; +p.getRemainingTime=function(){var a=this.g.duration;return isNaN(a)?-1:a-this.g.currentTime};p.isPaused=function(){return this.g.paused};p.isSkippable=function(){return this.h&&null!=this.l?this.getDuration()-this.getRemainingTime()=r&&(!e.C.has(n)&&Er(n)&&e.C.set(n,e.j.preload(n.uri,null,n.mimeType||void 0)),Fr(e,n));v.u(4);break}if(!e.C.has(n)){v.u(7);break}return F(v,e.C.get(n),8);case 8:(u=v.h)&&u.destroy(),e.C.delete(n);case 7:Gr(e,n),w=JSON.stringify(n),e.U.has(w)&&e.U.delete(w),e.H.delete(n),Hr(e),n.overlay||(g=!0);case 4:m=l.next();v.u(3);break;case 5:g&&Ir(e),G(v)}})})}p=Ar.prototype;p.configure=function(a){this.M=a;Jr(this)}; +function Kr(a){if(!a.ka&&a.H.size){a.I.D(a.g,"playing",a.W);a.I.D(a.g,"timeupdate",a.W);a.I.D(a.g,"seeked",a.oa);a.I.D(a.g,"ended",a.$);if("requestVideoFrameCallback"in a.g&&!Lr()){var b=a.g,c=function(){-1!=a.P&&(a.$(),-1!=a.P&&(a.P=b.requestVideoFrameCallback(c)))};a.P=b.requestVideoFrameCallback(c)}else a.S.Ga(.025);a.N&&a.N.Ga(1);a.ka=!0}} +function Hr(a){a.ka&&!a.H.size&&(a.I.Ja(a.g,"playing",a.W),a.I.Ja(a.g,"timeupdate",a.W),a.I.Ja(a.g,"seeked",a.oa),a.I.Ja(a.g,"ended",a.$),-1!=a.P&&(a.g.cancelVideoFrameCallback(a.P),a.P=-1),a.S&&a.S.stop(),a.N&&a.N.stop(),a.ka=!1)} +function Jr(a){if(a.A&&a.M&&!a.K){var b=a.M.supportsMultipleMediaElements,c=a.g;c.webkitSupportsFullscreen&&c.webkitDisplayingFullscreen&&(b=!1);a.B==b&&(a.B=!b,a.B?(a.h=a.g,a.F&&(a.F.parentElement&&a.A.removeChild(a.F),a.F=null)):(a.F||(b=document.createElement(a.g.tagName),b.autoplay=!0,b.style.position="absolute",b.style.top="0",b.style.left="0",b.style.width="100%",b.style.height="100%",b.style.display="none",b.setAttribute("playsinline",""),a.F=b),a.h=a.F))}} +p.stop=function(){this.l&&this.l.Ra();this.U.clear();this.H.clear();this.j.hg();if(this.C.size){var a=Array.from(this.C.values());a=t(a);for(var b=a.next();!b.done;b=a.next())(b=b.value)&&b.then(function(c){c&&c.destroy()})}this.C.clear();if(this.L.size)for(a=Array.from(this.L.keys()),a=t(a),b=a.next();!b.done;b=a.next())Gr(this,b.value);this.L.clear();this.j.detach();this.K=!1;this.s=this.m=null;this.B=!0;this.h=this.g;this.F=null;Mr(this);Hr(this);this.A&&Dj(this.A);this.o&&(this.o.stop(),this.o= +null)};p.release=function(){this.stop();this.I&&this.I.release();this.l&&this.l.release();this.S&&(this.S.stop(),this.S=null);this.N&&(this.N.stop(),this.N=null);this.j.destroy()};p.kd=function(){return this.j};function Nr(a,b){var c;Q(function(d){if(1==d.g)return Br(a),F(d,Or(a,b),2);c=d.h;c.length?Pr(a,c):bb("Unsupported HLS interstitial",b);G(d)})} +function Qr(a,b){var c=ud(b.eventNode,"OverlayEvent"),d=c.attributes.uri,e=c.attributes.mimeType,f="true"==c.attributes.loop,g=xd(c,"z",Dd);if(d&&0!=g){var h=null,k=ud(c,"Background");if(k){var l=k.attributes.uri;l?h="center / contain no-repeat url('"+l+"')":h=sd(k)}k=1920;l=1080;var m=ud(c,"Viewport");if(m){k=xd(m,"x",Dd);if(null==k)return;l=xd(m,"y",Dd);if(null==l)return}var n={viewport:{x:k,y:l},topLeft:{x:0,y:0},size:{x:k,y:l}},q=ud(c,"Overlay");if(m&&q){var r=ud(q,"TopLeft"),u=ud(q,"Size");if(r&& +u){q=xd(r,"x",Dd);if(null==q)return;r=xd(r,"y",Dd);if(null==r)return;var w=xd(u,"x",Dd);if(null==w)return;u=xd(u,"y",Dd);if(null==u)return;n.topLeft.x=q;n.topLeft.y=r;n.size.x=w;n.size.y=u}}q=null;c=ud(c,"Squeeze");if(m&&c&&(u=ud(c,"TopLeft"),c=ud(c,"Size"),u&&c)){m=xd(u,"x",Dd);if(null==m)return;q=xd(u,"y",Dd);if(null==q)return;u=xd(c,"x",Dd);if(null==u)return;c=xd(c,"y",Dd);if(null==c)return;q={viewport:{x:k,y:l},topLeft:{x:m,y:q},size:{x:u,y:c}}}Pr(a,[{id:b.id,groupId:null,startTime:b.startTime, +endTime:b.endTime,uri:d,mimeType:e,isSkippable:!1,skipOffset:null,skipFor:null,canJump:!0,resumeOffset:null,playoutLimit:null,once:!1,pre:!1,post:!1,timelineRange:!0,loop:f,overlay:n,displayOnBackground:-1==g,currentVideo:q,background:h}])}} +p.addAdUrlInterstitial=function(a){var b=this,c,d,e,f,g,h,k,l,m;return Q(function(n){switch(n.g){case 1:return c={type:12},F(n,Rr(b,a,c),2);case 2:d=n.h;e=hd(d,"VAST,vmap:VMAP");if(!e)throw new U(2,10,10007);f=[];if("VAST"==e.tagName){f=qr(e,b.m);n.u(3);break}if("vmap:VMAP"!=e.tagName){n.u(3);break}for(var q=[],r=t(qd(e,"vmap:AdBreak")),u=r.next();!u.done;u=r.next()){var w=u.value,v=w.attributes.timeOffset;v&&(u=null,"start"==v?u=0:"end"==v?u=Infinity:u=dd(v),(w=ud(w,"vmap:AdSource"))&&(w=ud(w,"vmap:AdTagURI"))&& +(w=rd(w))&&q.push({time:u,uri:w}))}g=t(q);h=g.next();case 5:if(h.done){n.u(3);break}k=h.value;return F(n,Rr(b,k.uri,c),8);case 8:l=n.h;m=hd(l,"VAST");if(!m)throw new U(2,10,10007);f.push.apply(f,x(qr(m,k.time)));h=g.next();n.u(5);break;case 3:Pr(b,f),G(n)}})}; +function Pr(a,b){var c,d,e,f,g,h,k,l;Q(function(m){switch(m.g){case 1:c=!1,d=t(b),e=d.next();case 2:if(e.done){m.u(4);break}f=e.value;if(!f.uri){bb("Missing URL in interstitial",f);m.u(3);break}if(f.mimeType){m.u(5);break}wa(m,6);g=a.j.Nb();return F(m,vo(f.uri,g,a.G.getConfiguration().streaming.retryParameters),8);case 8:f.mimeType=m.h;za(m,5);break;case 6:Aa(m);case 5:h=f.id||JSON.stringify(f);if(a.U.has(h)){m.u(3);break}f.loop&&!f.overlay&&bb("Loop is only supported in overlay interstitials",f); +f.overlay||(c=!0);a.U.add(h);a.H.add(f);k=!1;f.pre&&null==a.m?k=!0:0!=f.startTime||f.canJump?null!=a.m&&(l=f.startTime-a.m,0=l&&(k=!0)):k=!0;k&&(!a.C.has(f)&&Er(f)&&a.C.set(f,a.j.preload(f.uri,null,f.mimeType||void 0)),Fr(a,f));case 3:e=d.next();m.u(2);break;case 4:c&&Ir(a),Kr(a),G(m)}})} +function Cr(a,b,c){b=void 0===b?!1:b;c=void 0===c?null:c;var d=0,e=null;if(a.H.size&&null!=a.m){var f=a.g.ended,g=Array.from(a.H).sort(function(n,q){return q.startTime-n.startTime}),h=g;h=b?g.filter(function(n){return n.pre}):f?g.filter(function(n){return n.post}):g.filter(function(n){return!n.pre&&!n.post});g=t(h);for(h=g.next();!h.done;h=g.next()){h=h.value;var k=!1;if(b)k=h.pre;else if(f)k=h.post;else if(!h.pre&&!h.post){var l=a.m-Math.round(1E3*h.startTime)/1E3,m=1;a.M.allowStartInMiddleOfInterstitial&& +h.endTime&&Infinity!=h.endTime&&(m=h.endTime-h.startTime);0=h.startTime?!1:!0)}k&&(!a.s||h.startTime>=a.s.startTime)&&(d==(c||0)?e=h:e&&!h.canJump&&.001Math.abs(g.startTime-b.startTime)}).length);b.once&&(f++,a.H.delete(b),Hr(a),b.overlay||Ir(a));b.mimeType&&(b.mimeType.startsWith("image/")||"text/html"===b.mimeType)?b.overlay?Sr(a,b,c,d,f):bb("Unsupported interstitial",b):a.B&&b.overlay?bb("Unsupported interstitial",b):Tr(a,b,c,d,e,f)} +function Sr(a,b,c,d,e){function f(){a.o&&(a.o.stop(),a.o=null);a.A.removeChild(k);Mr(a,b);a.i(new V("ad-stopped"));a.l.Ra();var q=Cr(a,b.pre,d-e);q?Dr(a,q,c,++d,Date.now(),e):a.K=!1}a.K=!0;var g=b.overlay,h="text/html"==b.mimeType?"iframe":"img",k=document.createElement(h);k.style.objectFit="contain";k.style.position="absolute";k.style.border="none";Ur(a,b);a.i(new V("ad-started",(new Map).set("ad",new zr(b,c,d))));"iframe"==h?k.src=b.uri:(k.src=b.uri,k.onerror=function(q){a.i(new V("ad-error",(new Map).set("originalEvent", +q)));f()});var l=g.viewport,m=g.topLeft;g=g.size;0==l.x&&0==l.y?(k.width=b.overlay.size.x,k.height=b.overlay.size.y,k.style.bottom="10%",k.style.left="0",k.style.right="0",k.style.width="100%",b.overlay.size.y||"iframe"!=h||(k.style.height="auto")):(k.style.height=g.y/l.y*100+"%",k.style.left=m.x/l.x*100+"%",k.style.top=m.y/l.y*100+"%",k.style.width=g.x/l.x*100+"%");a.A.appendChild(k);var n=Date.now();a.o&&a.o.stop();a.o=new $e(function(){b.playoutLimit&&(Date.now()-n)/1E3>b.playoutLimit?(a.i(new V("ad-complete")), +f()):b.endTime&&a.g.currentTime>b.endTime?(a.i(new V("ad-complete")),f()):a.g.currentTimeb.endTime)a.o&&a.o.stop(),a.i(new V("ad-skipped")),f()})} +function Tr(a,b,c,d,e,f){var g,h,k,l,m,n,q,r,u,w,v,y,z,A,B,E,H,C,D,I;Q(function(L){switch(L.g){case 1:g=Date.now();a.K=!0;if(!a.B||1!=d){L.u(2);break}a.i(new V("ad-content-pause-requested",(new Map).set("saveLivePosition",!0)));h=new tg;k=function(K){return Q(function(J){if(1==J.g)return"detach"!=K.state?J.u(0):Lr()?F(J,new Promise(function(M){return(new $e(M)).ha(.1)}),3):J.u(3);h.resolve();a.l.Ja(a.G,"onstatechange",k);G(J)})};a.l.D(a.G,"onstatechange",k);return F(L,h,2);case 2:return Ur(a,b),a.B|| +(a.h.style.display="",b.overlay?(a.h.loop=b.loop,l=b.overlay.viewport,m=b.overlay.topLeft,n=b.overlay.size,a.h.style.height=n.y/l.y*100+"%",a.h.style.left=m.x/l.x*100+"%",a.h.style.top=m.y/l.y*100+"%",a.h.style.width=n.x/l.x*100+"%"):(a.g.pause(),null!=b.resumeOffset&&0!=b.resumeOffset&&(a.g.currentTime+=b.resumeOffset),a.h.loop=!1,a.h.style.height="100%",a.h.style.left="0",a.h.style.top="0",a.h.style.width="100%")),q=!1,r=function(){if(!a.B&&!b.overlay&&null==b.resumeOffset)if(b.timelineRange&&b.endTime&& +Infinity!=b.endTime)a.g.currentTime!=b.endTime&&(a.g.currentTime=b.endTime);else{var K=Date.now();a.g.currentTime+=(K-e)/1E3;e=K}},u=function(K){var J,M;return Q(function(O){if(1==O.g){r();J=Cr(a,b.pre,d-f);if(K&&b.groupId)for(;J&&J.groupId==b.groupId;)d++,J=Cr(a,b.pre,d-f);a.o&&(!b.groupId||J&&J.groupId!=b.groupId)&&(a.o.stop(),a.o=null);Mr(a,b);if(J&&!J.overlay)return O.u(2);b.post&&(a.m=null,a.s=null);return a.B?F(O,a.j.detach(),4):F(O,a.j.rc(),4)}2!=O.g&&(a.B&&(M=b.resumeOffset,null==M&&(M=b.timelineRange&& +b.endTime&&Infinity!=b.endTime?b.endTime-(a.m||0):(Date.now()-e)/1E3),a.i(new V("ad-content-resume-requested",(new Map).set("offset",M)))),a.i(new V("ad-stopped")),a.l.Ra(),a.K=!1,a.B?Ir(a):(a.h.style.display="none",r(),a.g.ended||a.g.play()));Jr(a);J&&(a.i(new V("ad-stopped")),a.l.Ra(),Dr(a,J,c,++d,e,f));G(O)})},w=function(K){return Q(function(J){if(q)return J.return();q=!0;a.i(new V("ad-error",(new Map).set("originalEvent",K)));return F(J,u(!1),0)})},v=function(){return Q(function(K){if(1==K.g){if(q)return K.return(); +q=!0;return F(K,u(!1),2)}a.i(new V("ad-complete"));G(K)})},a.ia=function(){return Q(function(K){if(q)return K.return();q=!0;a.i(new V("ad-skipped"));return F(K,u(!0),0)})},y=new yr(a.h,b,a.ia,c,d,!a.B),a.B||(y.setMuted(a.g.muted),y.setVolume(a.g.volume)),a.i(new V("ad-started",(new Map).set("ad",y))),(z=y.canSkipNow())&&a.i(new V("ad-skip-state-changed")),a.l.za(a.j,"error",w),a.l.D(a.h,"timeupdate",function(){if(a.h.duration){var K=y.canSkipNow();z!=K&&0=K.playRangeEnd?v():a.i(new V("ad-paused"))}),a.l.D(a.h,"volumechange",function(){a.h.muted? +a.i(new V("ad-muted")):a.i(new V("ad-volume-changed"))}),wa(L,4),Br(a),b.startTime&&b.endTime&&Infinity!=b.endTime&&b.startTime!=b.endTime&&(A=b.endTime-b.startTime,0b.endTime)&&a.ia()}));za(L,0); +break;case 4:I=Aa(L);if(!a.K)return L.return();w(I);G(L)}})} +function Ur(a,b){b.displayOnBackground&&(a.g.style.zIndex="1");if(null!=b.currentVideo){var c=b.currentVideo;a.g.style.transformOrigin="top left";var d=!0,e=[],f=c.topLeft.x/c.viewport.x*100;0=f&&(e.push("translateX("+f+"%)"),d=!1);f=c.topLeft.y/c.viewport.y*100;0=f&&(e.push("translateY("+f+"%)"),d=!1);f=c.size.x/c.viewport.x;1>f&&e.push("scaleX("+f+")");c=c.size.y/c.viewport.y;1>f&&e.push("scaleY("+c+")");e.length&&(a.g.style.transform=e.join(" "));d&&(a.g.style.transition="transform 250ms")}a.A&& +(a.A.style.pointerEvents="none",b.background&&(a.A.style.background=b.background));a.F&&(a.F.style.background=b.overlay?"":"rgb(0, 0, 0)")}function Mr(a,b){if(!b||b.displayOnBackground)a.g.style.zIndex="";b&&null==b.currentVideo||(a.g.style.transformOrigin="",a.g.style.transition="",a.g.style.transform="");a.A&&(a.A.style.pointerEvents="",!b||b.background)&&(a.A.style.background="");a.F&&(a.F.style.background="")} +function Or(a,b){var c,d,e,f,g,h,k,l,m,n,q,r,u,w,v,y,z,A,B,E,H,C,D,I,L,K,J,M,O,N,P,R,S,aa,W,Fa,Ga,xa,qa,Da,Ja,ra;return Q(function(da){switch(da.g){case 1:c=[];if(!b)return da.return(c);d=b.values.find(function(sa){return"X-ASSET-URI"==sa.key});e=b.values.find(function(sa){return"X-ASSET-LIST"==sa.key});if(!d&&!e)return da.return(c);f=null;if(g=b.values.find(function(sa){return"ID"==sa.key}))f=g.data;h=null==f?Math.floor(10*b.startTime)/10:b.startTime;(k=b.endTime)&&Infinity!=b.endTime&&"number"== +typeof b.endTime&&(k=null==f?Math.floor(10*b.endTime)/10:b.endTime);l=b.values.find(function(sa){return"X-RESTRICT"==sa.key});n=m=!0;l&&l.data&&(q=l.data,m=!q.includes("SKIP"),n=!q.includes("JUMP"));r=m?0:null;if(u=b.values.find(function(sa){return"X-ENABLE-SKIP-AFTER"==sa.key}))w=u.data,r=parseFloat(w),isNaN(r)&&(r=m?0:null);v=null;if(y=b.values.find(function(sa){return"X-ENABLE-SKIP-FOR"==sa.key}))z=y.data,v=parseFloat(z),isNaN(r)&&(v=null);A=null;if(B=b.values.find(function(sa){return"X-RESUME-OFFSET"== +sa.key}))E=B.data,A=parseFloat(E),isNaN(A)&&(A=null);H=null;if(C=b.values.find(function(sa){return"X-PLAYOUT-LIMIT"==sa.key}))D=C.data,H=parseFloat(D),isNaN(H)&&(H=null);K=L=I=!1;if(J=b.values.find(function(sa){return"CUE"==sa.key}))M=J.data,I=M.includes("ONCE"),L=M.includes("PRE"),K=M.includes("POST");O=!1;(N=b.values.find(function(sa){return"X-TIMELINE-OCCUPIES"==sa.key}))?(P=N.data,O=P.includes("RANGE")):!B&&a.G.V()&&(O=!L&&!K);if(d){R=d.data;if(!R)return da.return(c);c.push({id:f,groupId:null, +startTime:h,endTime:k,uri:R,mimeType:null,isSkippable:m,skipOffset:r,skipFor:v,canJump:n,resumeOffset:A,playoutLimit:H,once:I,pre:L,post:K,timelineRange:O,loop:!1,overlay:null,displayOnBackground:!1,currentVideo:null,background:null});da.u(2);break}if(!e){da.u(2);break}S=e.data;if(!S)return da.return(c);wa(da,4);aa={type:11};return F(da,Rr(a,S,aa),6);case 6:W=da.h;Fa=ac(W);Ga=JSON.parse(Fa);if(xa=Ga["SKIP-CONTROL"])qa=xa["ENABLE-SKIP-AFTER"],"number"==typeof qa&&(r=parseFloat(qa),isNaN(qa)&&(r=m? +0:null)),Da=xa["ENABLE-SKIP-FOR"],"number"==typeof Da&&(v=parseFloat(Da),isNaN(Da)&&(v=null));for(Ja=0;Jad.startTimeInSeconds+d.durationInSeconds){d=h;c=f;break}}c&&d&&!a.M.includes(d.adId)&&(a.A=b,a.h.currentTime=c.startTimeInSeconds)}} +function cs(a){if(a.h.duration&&(a.g||a.j.length)){var b=a.h.currentTime,c=!1;if(a.g){c=!0;var d=a.C,e=d.startTimeInSeconds+.5*d.durationInSeconds,f=d.startTimeInSeconds+.75*d.durationInSeconds;b>=d.startTimeInSeconds+.25*d.durationInSeconds&&!a.s.includes("firstQuartile")?(a.s.push("firstQuartile"),es(a,"firstQuartile")):b>=e&&!a.s.includes("midpoint")?(a.s.push("midpoint"),es(a,"midpoint")):b>=f&&!a.s.includes("thirdQuartile")&&(a.s.push("thirdQuartile"),es(a,"thirdQuartile"));d=a.g.getRemainingTime(); +e=a.g.getDuration();a.g.canSkipNow()&&0=d||d>e)&&Xr(a)}if(!a.g||!a.g.isLinear()){a:for(d=t(a.j),e=d.next();!e.done;e=d.next()){e=e.value;if(a.g&&a.g.isLinear())break;for(f=0;fb){if(a.M.includes(g.adId)){if(a.h.ended)continue;a.h.currentTime=h;break a}Xr(a);a.L=e;a.g=new Vr(g,f+1,e.ads.length,!0,a.h);a.C=g;0===f&&es(a,"breakStart");fs(a);break}}}if(!a.g)for(d= +t(a.j),e=d.next();!e.done;e=d.next()){e=e.value;if(a.g)break;for(f=0;fb&&(a.h.currentTime=a.A),a.A=null)}}} +function Xr(a){if(a.g){for(;a.B.lastChild;)a.B.removeChild(a.B.firstChild);a.I||a.M.push(a.C.adId);var b=a.g.m;(void 0===b?0:b)?es(a,"skip"):es(a,"complete");b=t(a.m);for(var c=b.next();!c.done;c=b.next())c=c.value,a.o.Ja(c.target,c.type,c.listener);a.m=[];a.s=[];b=a.g.getPositionInSequence();c=a.g.getSequenceLength();b===c&&es(a,"breakEnd");a.g=null;a.C=null;a.L=null}} +function fs(a){var b=!1;a.h.paused?b=!0:(es(a,"impression"),es(a,"start"));a.m.push({target:a.h,type:"volumechange",listener:function(){a.h.muted&&es(a,"mute")}});a.m.push({target:a.h,type:"volumechange",listener:function(){a.h.muted||es(a,"unmute")}});a.m.push({target:a.h,type:"play",listener:function(){b?(es(a,"impression"),es(a,"start"),b=!1):es(a,"resume")}});a.m.push({target:a.h,type:"pause",listener:function(){es(a,"pause")}});for(var c=t(a.m),d=c.next();!d.done;d=c.next())d=d.value,a.o.D(d.target, +d.type,d.listener)} +function es(a,b){var c=a.C.trackingEvents.find(function(f){return f.eventType==b});c||(c=a.L.adBreakTrackingEvents.find(function(f){return f.eventType==b}));if(c){var d={type:10};c=t(c.beaconUrls);for(var e=c.next();!e.done;e=c.next())(e=e.value)&&""!=e&&(e=Lg([e],rg()),e.method="POST",a.K.request(7,e,d))}switch(b){case "impression":a.i(new V("ad-impression"));break;case "start":a.i(new V("ad-started",(new Map).set("ad",a.g)));break;case "mute":a.i(new V("ad-muted"));break;case "unmute":a.i(new V("ad-volume-changed"));break; +case "resume":a.i(new V("ad-resumed"));break;case "pause":a.i(new V("ad-paused"));break;case "firstQuartile":a.i(new V("ad-first-quartile"));break;case "midpoint":a.i(new V("ad-midpoint"));break;case "thirdQuartile":a.i(new V("ad-third-quartile"));break;case "complete":a.i(new V("ad-complete"));a.i(new V("ad-stopped"));break;case "skip":a.i(new V("ad-skipped"));a.i(new V("ad-stopped"));break;case "breakStart":a.B.setAttribute("ad-active","true");break;case "breakEnd":a.B.removeAttribute("ad-active"); +break;case "skipStateChanged":a.i(new V("ad-skip-state-changed"))}};function gs(a,b){this.g=a;this.i=null;this.h=b}p=gs.prototype;p.needsSkipUI=function(){return!0};p.isClientRendering=function(){return!1};p.hasCustomClick=function(){return!0};p.isUsingAnotherMediaElement=function(){return!1};p.getDuration=function(){return this.i?this.i.duration:-1};p.getMinSuggestedDuration=function(){return this.getDuration()};p.getRemainingTime=function(){return this.i?this.i.duration-this.i.currentTime:-1};p.isPaused=function(){return this.h.paused};p.isSkippable=function(){return this.g.isSkippable()}; +p.getTimeUntilSkippable=function(){var a=this.g.getSkipTimeOffset();a=this.getRemainingTime()-a;return Math.max(a,0)};p.canSkipNow=function(){return 0==this.getTimeUntilSkippable()};p.skip=function(){this.h.currentTime+=this.getRemainingTime()};p.pause=function(){return this.h.pause()};p.play=function(){return this.h.play()};p.getVolume=function(){return this.h.volume};p.setVolume=function(a){this.h.volume=a};p.isMuted=function(){return this.h.muted};p.isLinear=function(){return!0};p.resize=function(){}; +p.setMuted=function(a){this.h.muted=a};p.getSequenceLength=function(){var a=this.g.getAdPodInfo();return null==a?1:a.getTotalAds()};p.getPositionInSequence=function(){var a=this.g.getAdPodInfo();return null==a?1:a.getAdPosition()};p.getTitle=function(){return this.g.getTitle()};p.getDescription=function(){return this.g.getDescription()};p.getVastMediaBitrate=function(){return 0};p.getVastMediaHeight=function(){return this.g.getVastMediaHeight()};p.getVastMediaWidth=function(){return this.g.getVastMediaWidth()}; +p.getVastAdId=function(){return""};p.getAdId=function(){return this.g.getAdId()};p.getCreativeAdId=function(){return this.g.getCreativeAdId()};p.getAdvertiserName=function(){return this.g.getAdvertiserName()};p.getMediaUrl=function(){return null};p.getTimeOffset=function(){var a=this.g.getAdPodInfo();return null==a?0:a.getTimeOffset()};p.getPodIndex=function(){var a=this.g.getAdPodInfo();return null==a?0:a.getPodIndex()};p.release=function(){this.h=this.i=this.g=null};T("shaka.ads.ServerSideAd",gs); +gs.prototype.release=gs.prototype.release;gs.prototype.getPodIndex=gs.prototype.getPodIndex;gs.prototype.getTimeOffset=gs.prototype.getTimeOffset;gs.prototype.getMediaUrl=gs.prototype.getMediaUrl;gs.prototype.getAdvertiserName=gs.prototype.getAdvertiserName;gs.prototype.getCreativeAdId=gs.prototype.getCreativeAdId;gs.prototype.getAdId=gs.prototype.getAdId;gs.prototype.getVastAdId=gs.prototype.getVastAdId;gs.prototype.getVastMediaWidth=gs.prototype.getVastMediaWidth; +gs.prototype.getVastMediaHeight=gs.prototype.getVastMediaHeight;gs.prototype.getVastMediaBitrate=gs.prototype.getVastMediaBitrate;gs.prototype.getDescription=gs.prototype.getDescription;gs.prototype.getTitle=gs.prototype.getTitle;gs.prototype.getPositionInSequence=gs.prototype.getPositionInSequence;gs.prototype.getSequenceLength=gs.prototype.getSequenceLength;gs.prototype.setMuted=gs.prototype.setMuted;gs.prototype.resize=gs.prototype.resize;gs.prototype.isLinear=gs.prototype.isLinear; +gs.prototype.isMuted=gs.prototype.isMuted;gs.prototype.setVolume=gs.prototype.setVolume;gs.prototype.getVolume=gs.prototype.getVolume;gs.prototype.play=gs.prototype.play;gs.prototype.pause=gs.prototype.pause;gs.prototype.skip=gs.prototype.skip;gs.prototype.canSkipNow=gs.prototype.canSkipNow;gs.prototype.getTimeUntilSkippable=gs.prototype.getTimeUntilSkippable;gs.prototype.isSkippable=gs.prototype.isSkippable;gs.prototype.isPaused=gs.prototype.isPaused;gs.prototype.getRemainingTime=gs.prototype.getRemainingTime; +gs.prototype.getMinSuggestedDuration=gs.prototype.getMinSuggestedDuration;gs.prototype.getDuration=gs.prototype.getDuration;gs.prototype.isUsingAnotherMediaElement=gs.prototype.isUsingAnotherMediaElement;gs.prototype.hasCustomClick=gs.prototype.hasCustomClick;gs.prototype.isClientRendering=gs.prototype.isClientRendering;gs.prototype.needsSkipUI=gs.prototype.needsSkipUI;function hs(a,b,c,d){var e=this;this.s=a;this.l=b;this.j=null;this.F=NaN;this.i=d;this.G=!1;this.A=this.m=this.o=null;this.B="";this.C=[];this.h=new jb;a=new google.ima.dai.api.UiSettings;a.setLocale(c);this.g=new google.ima.dai.api.StreamManager(this.l,this.s,a);this.i(new V("ima-stream-manager-loaded",(new Map).set("imaStreamManager",this.g)));this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.LOADED,function(f){is(e,f)});this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.ERROR,function(){e.B.length? +e.j.resolve(e.B):e.j.reject("IMA Stream request returned an error and there was no backup asset uri provided.");e.j=null});this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,function(){});this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.STARTED,function(f){f=f.getAd();e.m=new gs(f,e.l);e.A&&(e.m.i=e.A);e.i(new V("ad-started",(new Map).set("ad",e.m)));e.s.setAttribute("ad-active","true")});this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED,function(){e.s.removeAttribute("ad-active"); +var f=e.l.currentTime;e.o&&e.o>f&&(e.l.currentTime=e.o,e.o=null)});this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.AD_PROGRESS,function(f){e.A=f.getStreamData().adProgressData;e.m&&(e.m.i=e.A)});this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.FIRST_QUARTILE,function(){e.i(new V("ad-first-quartile"))});this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.MIDPOINT,function(){e.i(new V("ad-midpoint"))});this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.THIRD_QUARTILE,function(){e.i(new V("ad-third-quartile"))}); +this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.COMPLETE,function(){e.i(new V("ad-complete"));e.i(new V("ad-stopped"));e.s.removeAttribute("ad-active");e.m=null});this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.SKIPPED,function(){e.i(new V("ad-skipped"));e.i(new V("ad-stopped"))});this.h.D(this.g,google.ima.dai.api.StreamEvent.Type.CUEPOINTS_CHANGED,function(f){var g=f.getStreamData();f=[];g=t(g.cuepoints);for(var h=g.next();!h.done;h=g.next())h=h.value,f.push({start:h.start,end:h.end});e.C= +f;e.i(new V("ad-cue-points-changed",(new Map).set("cuepoints",f)))})}p=hs.prototype;p.configure=function(){};p.stop=function(){this.B="";this.o=null;this.C=[]};p.release=function(){this.stop();this.h&&this.h.release()};p.onCueMetadataChange=function(a){if(a.key&&a.data){var b={};b[a.key]=a.data;this.g.onTimedMetadata(b)}};p.getCuePoints=function(){return this.C}; +function is(a,b){a.i(new V("ads-loaded",(new Map).set("loadTime",Date.now()/1E3-a.F)));b=b.getStreamData().url;a.j.resolve(b);a.j=null;a.G||a.h.D(a.l,"seeked",function(){var c=a.l.currentTime;if(0!=c){a.g.streamTimeForContentTime(c);var d=a.g.previousCuePointForStreamTime(c);d&&!d.played&&(a.o=c,a.l.currentTime=d.start)}})};function Z(){Dg.call(this);this.h=this.i=this.j=this.g=null;this.m=new mr;this.o=navigator.language;this.l=null}pa(Z,Dg);p=Z.prototype;p.setLocale=function(a){this.o=a};p.configure=function(a){this.l=a;this.g&&this.g.configure(this.l);this.j&&this.j.configure(this.l);this.h&&this.h.configure(this.l)};p.initInterstitial=function(a,b,c){var d=this;this.g&&this.g.release();this.g=new Ar(a,b,c,function(e){return js(d,e)});this.g.configure(this.l)}; +p.initClientSide=function(a,b,c){var d=this;if(!window.google||!google.ima||!google.ima.AdsLoader)throw new U(2,10,1E4);this.j&&this.j.release();this.j=new sr(a,b,this.o,c,function(e){return js(d,e)});this.j.configure(this.l)};p.release=function(){this.g&&(this.g.release(),this.g=null);this.j&&(this.j.release(),this.j=null);this.i&&(this.i.release(),this.i=null);this.h&&(this.h.release(),this.h=null);Dg.prototype.release.call(this)}; +p.onAssetUnload=function(){this.g&&this.g.stop();this.j&&this.j.stop();this.i&&this.i.stop();this.h&&this.h.stop();this.dispatchEvent(new V("ad-stopped"));this.dispatchEvent(new V("ad-content-attach-requested"));this.m=new mr};p.requestClientSideAds=function(a){if(!this.j)throw new U(1,10,10001);var b=this.j;b.g&&b.g.destroy();b.m&&b.m.contentComplete();b.G=Date.now()/1E3;b.m.requestAds(a)}; +p.updateClientSideAdsRenderingSettings=function(a){if(!this.j)throw new U(1,10,10001);var b=this.j;b.B=a;b.g&&b.g.updateAdsRenderingSettings(b.B)};p.initMediaTailor=function(a,b,c){var d=this;this.i&&this.i.release();this.i=new Wr(a,b,c,function(e){return js(d,e)})};p.requestMediaTailorStream=function(a,b,c){if(!this.i)throw new U(1,10,10005);var d=this.i;c=void 0===c?"":c;d.l?a=Promise.reject(new U(1,10,10004)):(d.l=new tg,Zr(d,a,b),d.H=c||"",d.P=Date.now()/1E3,a=d.l);return a}; +p.addMediaTailorTrackingUrl=function(a){if(!this.i)throw new U(1,10,10005);var b=this.i;b.G=a;b.i(new V("ads-loaded",(new Map).set("loadTime",0)))};p.initServerSide=function(a,b){var c=this;if(!window.google||!google.ima||!google.ima.dai)throw new U(2,10,10002);this.h&&this.h.release();this.h=new hs(a,b,this.o,function(d){return js(c,d)});this.h.configure(this.l)}; +p.requestServerSideStream=function(a,b){b=void 0===b?"":b;if(!this.h)throw new U(1,10,10003);a.adTagParameters||(a.adTagParameters={});var c=a.adTagParameters;(c.mpt||c.mpv)&&bb('You have attempted to set "mpt" and/or "mpv" parameters of the ad tag. Please note that those parameters are used for Shaka adoption tracking and will be overridden.');a.adTagParameters.mpt="shaka-player";a.adTagParameters.mpv="v4.15.0";c=this.h;c.j?a=Promise.reject(new U(1,10,10004)):(a instanceof google.ima.dai.api.LiveStreamRequest&& +(c.G=!0),c.j=new tg,c.g.requestStream(a),c.B=b||"",c.F=Date.now()/1E3,a=c.j);return a};p.replaceServerSideAdTagParameters=function(a){if(!this.h)throw new U(1,10,10003);(a.mpt||a.mpv)&&bb('You have attempted to set "mpt" and/or "mpv" parameters of the ad tag. Please note that those parameters are used for Shaka adoption tracking and will be overridden.');a.mpt="Shaka Player";a.mpv="v4.15.0";this.h.g.replaceAdTagParameters(a)}; +p.getServerSideCuePoints=function(){wb("AdManager.getServerSideCuePoints","Please use getCuePoints function.");return this.getCuePoints()};p.getCuePoints=function(){var a=[];this.h&&(a=a.concat(this.h.getCuePoints()));this.i&&(a=a.concat(this.i.getCuePoints()));return a};p.getStats=function(){var a=this.m;return{loadTimes:a.g,averageLoadTime:nr(a),started:a.h,overlayAds:a.j,playedCompletely:a.l,skipped:a.m,errors:a.i}};p.onManifestUpdated=function(a){if(this.i)this.i.onManifestUpdated(a)}; +p.onDashTimedMetadata=function(a){this.h&&"urn:google:dai:2018"==a.schemeIdUri&&this.h.g.processMetadata(a.schemeIdUri,a.eventNode?a.eventNode.attributes.messageData:null,a.startTime)};p.onHlsTimedMetadata=function(a,b){this.h&&this.h.g.processMetadata("ID3",a.data,b)};p.onCueMetadataChange=function(a){if(this.h)this.h.onCueMetadataChange(a)};p.onHLSInterstitialMetadata=function(a,b,c){this.l&&this.l.disableHLSInterstitial||(this.g||this.initInterstitial(null,a,b),this.g&&Nr(this.g,c))}; +p.onDASHInterstitialMetadata=function(a,b,c){if(!this.l||!this.l.disableDASHInterstitial){var d=c.schemeIdUri;if("urn:mpeg:dash:event:alternativeMPD:insert:2025"==d||"urn:mpeg:dash:event:alternativeMPD:replace:2025"==d){if(this.g||this.initInterstitial(null,a,b),this.g&&(a=this.g,b="urn:mpeg:dash:event:alternativeMPD:replace:2025"==c.schemeIdUri,d="urn:mpeg:dash:event:alternativeMPD:insert:2025"==c.schemeIdUri,b||d)){for(var e=c.startTime,f=c.endTime,g=null,h=0,k,l=t(c.eventNode.children),m=l.next();!m.done;m= +l.next())if(m=m.value,"AlternativeMPD"==m.tagName){if(m=m.attributes.uri){k=m;break}}else if("InsertPresentation"==m.tagName||"ReplacePresentation"==m.tagName){var n=m.attributes.url;if(n){k=n;(l=xd(m,"maxDuration",Dd))&&(g=l/c.timescale);(l=xd(m,"returnOffset",Dd))&&(h=l/c.timescale);b&&h&&(f=e+h);break}}k&&Pr(a,[{id:c.id,groupId:null,startTime:e,endTime:f,uri:k,mimeType:null,isSkippable:!1,skipOffset:null,skipFor:null,canJump:!0,resumeOffset:d?h:null,playoutLimit:g,once:!1,pre:!1,post:!1,timelineRange:b&& +!d,loop:!1,overlay:null,displayOnBackground:!1,currentVideo:null,background:null}])}}else("urn:mpeg:dash:event:2012"==d||"urn:scte:dash:scte214-events"==d)&&c.eventNode&&ud(c.eventNode,"OverlayEvent")&&(this.g||this.initInterstitial(null,a,b),this.g&&Qr(this.g,c))}};p.addCustomInterstitial=function(a){if(!this.g)throw new U(1,10,10006);Pr(this.g,[a])};p.addAdUrlInterstitial=function(a){if(!this.g)throw new U(1,10,10006);return this.g.addAdUrlInterstitial(a)}; +p.getInterstitialPlayer=function(){if(!this.g)throw new U(1,10,10006);return this.g.kd()};function js(a,b){if(b&&b.type)switch(b.type){case "ads-loaded":a.m.g.push(b.loadTime);break;case "ad-started":a.m.h++;var c=b.ad;c&&!c.isLinear()&&a.m.j++;break;case "ad-complete":a.m.l++;break;case "ad-skipped":a.m.m++;break;case "ad-error":a.m.i++}a.dispatchEvent(b)}T("shaka.ads.AdManager",Z);Z.prototype.getInterstitialPlayer=Z.prototype.getInterstitialPlayer;Z.prototype.addAdUrlInterstitial=Z.prototype.addAdUrlInterstitial; +Z.prototype.addCustomInterstitial=Z.prototype.addCustomInterstitial;Z.prototype.onDASHInterstitialMetadata=Z.prototype.onDASHInterstitialMetadata;Z.prototype.onHLSInterstitialMetadata=Z.prototype.onHLSInterstitialMetadata;Z.prototype.onCueMetadataChange=Z.prototype.onCueMetadataChange;Z.prototype.onHlsTimedMetadata=Z.prototype.onHlsTimedMetadata;Z.prototype.onDashTimedMetadata=Z.prototype.onDashTimedMetadata;Z.prototype.onManifestUpdated=Z.prototype.onManifestUpdated;Z.prototype.getStats=Z.prototype.getStats; +Z.prototype.getCuePoints=Z.prototype.getCuePoints;Z.prototype.getServerSideCuePoints=Z.prototype.getServerSideCuePoints;Z.prototype.replaceServerSideAdTagParameters=Z.prototype.replaceServerSideAdTagParameters;Z.prototype.requestServerSideStream=Z.prototype.requestServerSideStream;Z.prototype.initServerSide=Z.prototype.initServerSide;Z.prototype.addMediaTailorTrackingUrl=Z.prototype.addMediaTailorTrackingUrl;Z.prototype.requestMediaTailorStream=Z.prototype.requestMediaTailorStream; +Z.prototype.initMediaTailor=Z.prototype.initMediaTailor;Z.prototype.updateClientSideAdsRenderingSettings=Z.prototype.updateClientSideAdsRenderingSettings;Z.prototype.requestClientSideAds=Z.prototype.requestClientSideAds;Z.prototype.onAssetUnload=Z.prototype.onAssetUnload;Z.prototype.release=Z.prototype.release;Z.prototype.initClientSide=Z.prototype.initClientSide;Z.prototype.initInterstitial=Z.prototype.initInterstitial;Z.prototype.configure=Z.prototype.configure;Z.prototype.setLocale=Z.prototype.setLocale; +Z.ADS_LOADED="ads-loaded";Z.AD_STARTED="ad-started";Z.AD_FIRST_QUARTILE="ad-first-quartile";Z.AD_MIDPOINT="ad-midpoint";Z.AD_THIRD_QUARTILE="ad-third-quartile";Z.AD_COMPLETE="ad-complete";Z.AD_STOPPED="ad-stopped";Z.AD_SKIPPED="ad-skipped";Z.AD_VOLUME_CHANGED="ad-volume-changed";Z.AD_MUTED="ad-muted";Z.AD_PAUSED="ad-paused";Z.AD_RESUMED="ad-resumed";Z.AD_SKIP_STATE_CHANGED="ad-skip-state-changed";Z.CUEPOINTS_CHANGED="ad-cue-points-changed";Z.IMA_AD_MANAGER_LOADED="ima-ad-manager-loaded"; +Z.IMA_STREAM_MANAGER_LOADED="ima-stream-manager-loaded";Z.AD_CLICKED="ad-clicked";Z.AD_PROGRESS="ad-progress";Z.AD_BUFFERING="ad-buffering";Z.AD_IMPRESSION="ad-impression";Z.AD_DURATION_CHANGED="ad-duration-changed";Z.AD_CLOSED="ad-closed";Z.AD_LOADED="ad-loaded";Z.ALL_ADS_COMPLETED="all-ads-completed";Z.AD_LINEAR_CHANGED="ad-linear-changed";Z.AD_METADATA="ad-metadata";Z.AD_RECOVERABLE_ERROR="ad-recoverable-error";Z.AD_ERROR="ad-error";Z.AD_BREAK_READY="ad-break-ready";Z.AD_INTERACTION="ad-interaction"; +Z.AD_CONTENT_PAUSE_REQUESTED="ad-content-pause-requested";Z.AD_CONTENT_RESUME_REQUESTED="ad-content-resume-requested";Z.AD_CONTENT_ATTACH_REQUESTED="ad-content-attach-requested";Mp=function(){return new Z};function ks(a){return JSON.stringify(a,function(b,c){if("function"!=typeof c){if(c instanceof Event||c instanceof V){var d={};for(e in c)(b=c[e])&&"object"==typeof b?"detail"==e&&(d[e]=b):e in Event||(d[e]=b);return d}if(c instanceof Error){var e=new Set(["name","message","stack"]);for(d in c)e.add(d);d=t(Object.getOwnPropertyNames(c));for(b=d.next();!b.done;b=d.next())e.add(b.value);d={};e=t(e);for(b=e.next();!b.done;b=e.next())b=b.value,d[b]=c[b];c={__type__:"Error",contents:d}}else if(c instanceof +TimeRanges){e={__type__:"TimeRanges",length:c.length,start:[],end:[]};c=t(yj(c));for(d=c.next();!d.done;d=c.next())d=d.value,b=d.end,e.start.push(d.start),e.end.push(b);c=e}else c=ArrayBuffer.isView(c)&&1===c.BYTES_PER_ELEMENT?{__type__:"Uint8Array",entries:Array.from(c)}:"number"==typeof c?isNaN(c)?"NaN":isFinite(c)?c:0>c?"-Infinity":"Infinity":c;return c}})} +function ls(a){return JSON.parse(a,function(b,c){if("NaN"==c)var d=NaN;else if("-Infinity"==c)d=-Infinity;else if("Infinity"==c)d=Infinity;else if(c&&"object"==typeof c&&"TimeRanges"==c.__type__)d=ms(c);else if(c&&"object"==typeof c&&"Uint8Array"==c.__type__)d=new Uint8Array(c.entries);else if(c&&"object"==typeof c&&"Error"==c.__type__){b=c.contents;c=Error(b.message);for(d in b)c[d]=b[d];d=c}else d=c;return d})} +function ms(a){return{length:a.length,start:function(b){return a.start[b]},end:function(b){return a.end[b]}}} +var ns="ended play playing pause pausing ratechange seeked seeking timeupdate volumechange".split(" "),os="buffered currentTime duration ended loop muted paused playbackRate seeking videoHeight videoWidth volume".split(" "),ps=["loop","playbackRate"],qs=["pause","play"],rs=(new Map).set("getAssetUri",2).set("getAudioLanguages",4).set("getAudioLanguagesAndRoles",4).set("getBufferFullness",1).set("getBufferedInfo",2).set("getExpiration",2).set("getKeyStatuses",2).set("getPlaybackRate",2).set("getTextLanguages", +4).set("getTextLanguagesAndRoles",4).set("isAudioOnly",10).set("isBuffering",1).set("isInProgress",1).set("isLive",10).set("isTextTrackVisible",1).set("isVideoOnly",10).set("keySystem",10).set("seekRange",1).set("getLoadMode",10).set("getManifestType",10).set("isFullyLoaded",1).set("isEnded",1),ss=(new Map).set("getConfiguration",4).set("getConfigurationForLowLatency",4).set("getStats",5).set("getAudioTracks",2).set("getChaptersTracks",2).set("getImageTracks",2).set("getVideoTracks",2).set("getTextTracks", +2).set("getVariantTracks",2),ts=(new Map).set("getPlayheadTimeAsDate",1).set("getPresentationStartTimeAsDate",20).set("getSegmentAvailabilityDuration",20),us=[["getConfiguration","configure","getConfigurationForLowLatency","configurationForLowLatency"]],vs=[["isTextTrackVisible","setTextTrackVisibility"]],ws="cancelTrickPlay configure configurationForLowLatency getChapters resetConfiguration retryStreaming selectAudioLanguage selectAudioTrack selectTextLanguage selectTextTrack selectVariantTrack selectVariantsByLabel selectVideoTrack setTextTrackVisibility trickPlay updateStartTime goToLive useTrickPlayTrackIfAvailable".split(" "), +xs="addChaptersTrack addTextTrackAsync addThumbnailsTrack getAllThumbnails getChaptersAsync getThumbnails attach attachCanvas detach load unload".split(" ");function ys(a,b,c,d,e,f,g){var h=this;this.G=a;this.K=g;this.l=new $e(b);this.L=c;this.s=!1;this.A=d;this.F=e;this.M=f;this.i=this.m=!1;this.I="";this.o=null;this.B=function(){return zs(h)};this.C=function(k,l){k=ls(l);switch(k.type){case "event":var m=k.targetName,n=Bg(k.event);h.A(m,n);break;case "update":m=k.update;for(n in m){k=h.g[n]||{};for(var q in m[n])k[q]=m[n][q]}h.s&&(h.L(),h.s=!1);break;case "asyncComplete":if(q=k.id,n=k.error,l=k.res,k=h.h.get(q),h.h.delete(q),k)if(n){q=new U(n.severity, +n.category,n.code);for(m in n)q[m]=n[m];k.reject(q)}else k.resolve(l)}};this.g={video:{},player:{}};this.H=0;this.h=new Map;this.j=null;As.add(this)}p=ys.prototype;p.destroy=function(){As.delete(this);Bs(this);Cs&&Ds(this);this.l&&(this.l.stop(),this.l=null);this.F=this.A=null;this.i=this.m=!1;this.C=this.B=this.j=this.h=this.g=this.o=null;return Promise.resolve()};p.ub=function(){return this.i};p.Tg=function(){return this.I}; +p.init=function(){if(this.G.length)if(window.chrome&&chrome.cast&&chrome.cast.isAvailable){this.m=!0;this.l.Hb();var a=new chrome.cast.SessionRequest(this.G,[],null,this.K,null);a=new chrome.cast.ApiConfig(a,function(b){for(var c=t(As),d=c.next();!d.done;d=c.next()){d=d.value;var e=b;d.j=new tg;d.s=!0;Es(d,e)}},function(b){for(var c=t(As),d=c.next();!d.done;d=c.next())d=d.value,Fs="available"==b,d.l.Hb()},"origin_scoped");chrome.cast.initialize(a,function(){},function(){});Fs&&this.l.ha(Gs);(a=Cs)&& +a.status!=chrome.cast.SessionStatus.STOPPED?(this.j=new tg,this.s=!0,Es(this,a)):Cs=null}else window.__onGCastApiAvailable!==Hs&&(Is=window.__onGCastApiAvailable||null,window.__onGCastApiAvailable=Hs)};p.eh=function(a){this.o=a;this.i&&Js(this,{type:"appData",appData:this.o})}; +p.cast=function(){var a=this;return Q(function(b){if(!a.m)throw new U(1,8,8E3);if(!Fs)throw new U(1,8,8001);if(a.i)throw new U(1,8,8002);a.j=new tg;chrome.cast.requestSession(function(c){return Es(a,c)},function(c){return Ks(a,c)});return F(b,a.j,0)})};function Ls(a){a.i&&chrome.cast.requestSession(function(b){return Es(a,b)},function(b){return Ks(a,b)})}p.hd=function(){if(this.i){Bs(this);if(Cs){Ds(this);try{Cs.stop(function(){},function(){})}catch(a){}Cs=null}zs(this)}}; +p.get=function(a,b){var c=this;if("video"==a){if(qs.includes(b))return function(){return c.ui.apply(c,[a,b].concat(x(Oa.apply(0,arguments))))}}else if("player"==a){if(ts.has(b)&&!this.get("player","isLive")())return function(){};if(ws.includes(b))return function(){return c.ui.apply(c,[a,b].concat(x(Oa.apply(0,arguments))))};if(xs.includes(b))return function(){return c.Ek.apply(c,[a,b].concat(x(Oa.apply(0,arguments))))};if(rs.has(b)||ss.has(b))return function(){return c.g[a][b]}}return this.g[a][b]}; +p.set=function(a,b,c){this.g[a][b]=c;Js(this,{type:"set",targetName:a,property:b,value:c})};function Es(a,b){var c=a.M();Cs=b;b.addUpdateListener(a.B);b.addMessageListener("urn:x-cast:com.google.shaka.v2",a.C);zs(a);Js(a,{type:"init",initState:c,appData:a.o});a.j.resolve()}function Ks(a,b){var c=8003;switch(b.code){case "cancel":c=8004;break;case "timeout":c=8005;break;case "receiver_unavailable":c=8006}a.j.reject(new U(2,8,c,b))} +p.ui=function(a,b){Js(this,{type:"call",targetName:a,methodName:b,args:Oa.apply(2,arguments)})};p.Ek=function(a,b){var c=Oa.apply(2,arguments),d=new tg,e=this.H.toString();this.H++;this.h.set(e,d);try{Js(this,{type:"asyncCall",targetName:a,methodName:b,args:c,id:e})}catch(f){d.reject(f)}return d};function Ds(a){var b=Cs;b.removeUpdateListener(a.B);b.removeMessageListener("urn:x-cast:com.google.shaka.v2",a.C)} +function zs(a){var b=Cs?"connected"==Cs.status:!1;if(a.i&&!b){a.F();for(var c in a.g)a.g[c]={};Bs(a)}a.i=b;a.I=b?Cs.receiver.friendlyName:"";a.l.Hb()}function Bs(a){if(a.h)for(var b=t(a.h.keys()),c=b.next();!c.done;c=b.next()){c=c.value;var d=a.h.get(c);a.h.delete(c);d.reject(new U(1,7,7E3))}} +function Js(a,b){b=ks(b);var c=Cs;try{c.sendMessage("urn:x-cast:com.google.shaka.v2",b,function(){},eb)}catch(d){throw b=new U(2,8,8005,d),c=new V("error",(new Map).set("detail",b)),a.A("player",c),a.hd(),b;}}var Gs=.02,Fs=!1,Cs=null,Is=null,As=new Set;function Hs(a){Is?window.__onGCastApiAvailable=Is:delete window.__onGCastApiAvailable;Is=null;if(a)for(var b=t(As),c=b.next();!c.done;c=b.next())c.value.init();"function"===typeof window.__onGCastApiAvailable&&window.__onGCastApiAvailable(a)};function Ms(a,b,c,d){d=void 0===d?!1:d;Dg.call(this);var e=this;this.i=a;this.h=b;this.l=this.o=this.m=this.s=this.j=null;this.H=c;this.G=d;this.C=[];this.B=[];this.A=[];this.F=new Map;this.g=null;window.chrome?(this.g=new ys(c,function(){return Ns(e)},function(){return Os(e)},function(f,g){return Ps(e,f,g)},function(){return Qs(e)},function(){return Rs(e)},d),Ss(this)):(this.j=this.i,this.s=this.h)}pa(Ms,Dg);p=Ms.prototype; +p.destroy=function(a){this.g&&(void 0===a?0:a)&&this.g.hd();this.l&&(this.l.release(),this.l=null);a=[];this.h&&(a.push(this.h.destroy()),this.h=null);this.g&&(a.push(this.g.destroy()),this.g=null);this.s=this.j=this.i=null;Dg.prototype.release.call(this);return Promise.all(a)};p.Uj=function(){return this.j};p.kd=function(){return this.s};p.ej=function(){return this.g?this.g.m&&Fs:!1};p.ub=function(){return this.g?this.g.ub():!1};p.Tg=function(){return this.g?this.g.Tg():""}; +p.cast=function(){var a=this;return Q(function(b){return 1==b.g?a.g?F(b,a.g.cast(),2):b.return():a.h?F(b,a.h.rc(),0):b.return()})};p.eh=function(a){this.g&&this.g.eh(a)};p.Tk=function(){this.g&&Ls(this.g)};p.hd=function(){this.g&&this.g.hd()}; +p.fj=function(a,b){b=void 0===b?!1:b;var c=this;return Q(function(d){if(1==d.g){if(a==c.H&&b==c.G)return d.return();c.H=a;c.G=b;if(!c.g)return d.return();c.g.hd();return F(d,c.g.destroy(),2)}c.g=null;c.g=new ys(a,function(){return Ns(c)},function(){return Os(c)},function(e,f){return Ps(c,e,f)},function(){return Qs(c)},function(){return Rs(c)},b);c.g.init();G(d)})}; +function Ss(a){a.g.init();a.l=new jb;for(var b=t(ns),c=b.next();!c.done;c=b.next())a.l.D(a.i,c.value,function(f){a.g.ub()||(f=Bg(f),a.m.dispatchEvent(f))});for(var d in Cg)a.l.D(a.h,Cg[d],function(f){a.g.ub()||a.o.dispatchEvent(f)});a.j={};b={};for(var e in a.i)b={Ud:b.Ud},b.Ud=e,Object.defineProperty(a.j,b.Ud,{configurable:!1,enumerable:!0,get:function(f){return function(){return Ts(a,f.Ud)}}(b),set:function(f){return function(g){var h=f.Ud;a.g.ub()?a.g.set("video",h,g):a.i[h]=g}}(b)});a.s={};Us(a, +function(f){Object.defineProperty(a.s,f,{configurable:!1,enumerable:!0,get:function(){return Vs(a,f)}})});Ws(a);a.m=new Dg;a.m.xe=a.j;a.o=new Dg;a.o.xe=a.s;a.l.D(a.h,"unloading",function(){a.g&&a.g.ub()||Xs(a)})}function Ws(a){var b=new Map;Us(a,function(c,d){b.has(d)?(d=b.get(d),c.length=e)return null;for(var f=-1,g=-1,h=0;hc||127c||0>b))if(b>=c)for(--d;0<=d;d--)a.i[b+d]=a.i[c+d].map(function(f){return f});else for(var e=0;eb;b++)a.i.push(Ot())}function Ot(){for(var a=[],b=0;42>b;b++)a.push(null);return a}function Pt(a,b){Qt(a)&&(a.i[a.h][a.g]=new ut(b,a.C,a.A,a.s,a.B),a.g++)}function Qt(a){var b=a.gc;c++,b++)a.i[b]=a.i[c];for(c=0;1>c;c++,b++)a.i[b]=Ot()} +function St(a,b,c){var d=new Qd(a.j,b,"");d.textAlign=0===a.F?"left":1===a.F?"right":Sd;var e=d.region;a.I&&(e.id+="svc"+a.I);e.id+="win"+a.M;e.height=a.o;e.width=a.m;e.heightUnits=2;e.widthUnits=2;e.viewportAnchorX=a.H;e.viewportAnchorY=a.L;e.viewportAnchorUnits=a.K?Rc:2;switch(a.G){case 0:e.regionAnchorX=0;e.regionAnchorY=0;break;case 1:e.regionAnchorX=50;e.regionAnchorY=0;break;case 2:e.regionAnchorX=100;e.regionAnchorY=0;break;case 3:e.regionAnchorX=0;e.regionAnchorY=50;break;case 4:e.regionAnchorX= +50;e.regionAnchorY=50;break;case 5:e.regionAnchorX=100;e.regionAnchorY=50;break;case 6:e.regionAnchorX=0;e.regionAnchorY=100;break;case 7:e.regionAnchorX=50;e.regionAnchorY=100;break;case 8:e.regionAnchorX=100,e.regionAnchorY=100}if(c=rt(d,"svc"+c,a.i,a.j,b))a.j=b;return c}Mt.prototype.display=function(){this.l=!0};function Tt(){this.i=[];this.h=null;this.g=0}function Ut(a,b){3===b.type?(a.g=2*(b.value&63)-1,a.h=[]):a.h&&(0this.h.length)throw new U(2,2,3E3);this.g+=a}; +Vt.prototype.Bi=function(a){if(0>this.g-a)throw new U(2,2,3E3);this.g-=a};function Xt(a){this.i=a;this.h=[null,null,null,null,null,null,null,null];this.g=null} +function Yt(a,b,c,d){if(!a.g)return[];if(24==c)return c=Wt(b).value,d=Wt(b).value,c=function(f){return f.map(function(g){return("0"+(g&255).toString(16)).slice(-2)}).join("")}([c,d]),Pt(a.g,String.fromCharCode(parseInt(c,16))),[];b=a.g;var e=null;switch(c){case 8:!Qt(b)||0>=b.g&&0>=b.h||(0>=b.g?(b.g=b.m-1,b.h--):b.g--,b.i[b.h][b.g]=null);break;case 13:b.isVisible()&&(e=St(b,d,a.i));b.h+1>=b.o?Rt(b):b.h++;b.g=0;break;case 14:b.isVisible()&&(e=St(b,d,a.i));b.i[b.h]=Ot();b.g=0;break;case 12:b.isVisible()&& +(e=St(b,d,a.i)),Nt(b),b.h=0,b.g=0}return e?[e]:[]} +function Zt(a,b,c,d){if(128<=c&&135>=c)d=c&7,a.h[d]&&(a.g=a.h[d]);else{if(136===c){c=Wt(b).value;b=[];c=t($t(a,c));for(var e=c.next();!e.done;e=c.next()){e=a.h[e.value];if(e.isVisible()){var f=St(e,d,a.i);f&&b.push(f)}Nt(e)}return b}if(137===c)for(b=Wt(b).value,b=t($t(a,b)),c=b.next();!c.done;c=b.next())c=a.h[c.value],c.isVisible()||(c.j=d),c.display();else{if(138===c){c=Wt(b).value;b=null;c=t($t(a,c));for(e=c.next();!e.done;e=c.next())e=a.h[e.value],e.isVisible()&&(b=St(e,d,a.i)),e.l=!1;return b? +[b]:[]}if(139===c){c=Wt(b).value;b=null;c=t($t(a,c));for(e=c.next();!e.done;e=c.next())e=a.h[e.value],e.isVisible()?b=St(e,d,a.i):e.j=d,e.l=!e.l;return b?[b]:[]}if(140===c)return b=Wt(b).value,au(a,b,d);if(143===c)return d=au(a,255,d),bu(a),d;if(144===c)b.skip(1),d=Wt(b).value,a.g&&(a.g.A=0<(d&128),a.g.C=0<(d&64));else if(145===c)d=Wt(b).value,c=Wt(b).value,b.skip(1),a.g&&(b=cu((c&48)>>4,(c&12)>>2,c&3),a.g.B=cu((d&48)>>4,(d&12)>>2,d&3),a.g.s=b);else if(146===c)d=Wt(b).value,b=Wt(b).value,a.g&&(a= +a.g,a.h=d&15,a.g=b&63);else if(151===c)b.skip(1),b.skip(1),d=Wt(b).value,b.skip(1),a.g&&(a.g.F=d&3);else if(152<=c&&159>=c){c=(c&15)-8;e=null!==a.h[c];e||(f=new Mt(c,a.i),f.j=d,a.h[c]=f);d=Wt(b).value;f=Wt(b).value;var g=Wt(b).value,h=Wt(b).value,k=Wt(b).value;b=Wt(b).value;e&&0===(b&7)||(b=a.h[c],b.h=0,b.g=0,b.C=!1,b.A=!1,b.B="white",b.s="black");b=a.h[c];b.l=0<(d&32);b.L=f&127;b.H=g;b.G=(h&240)>>4;b.K=0<(f&128);b.o=(h&15)+1;b.m=(k&63)+1;a.g=a.h[c]}}}return[]} +function $t(a,b){for(var c=[],d=0;8>d;d++)1===(b&1)&&a.h[d]&&c.push(d),b>>=1;return c}function au(a,b,c){var d=[];b=t($t(a,b));for(var e=b.next();!e.done;e=b.next()){e=e.value;var f=a.h[e];f.isVisible()&&(f=St(f,c,a.i))&&d.push(f);a.h[e]=null}return d}function bu(a){a.g=null;a.h=[null,null,null,null,null,null,null,null]}function cu(a,b,c){var d={0:0,1:0,2:1,3:1};a=d[a];b=d[b];c=d[c];return du[a<<2|b<<1|c]} +var eu=new Map([[32," "],[33,"\u00a0"],[37,"\u2026"],[42,"\u0160"],[44,"\u0152"],[48,"\u2588"],[49,"\u2018"],[50,"\u2019"],[51,"\u201c"],[52,"\u201d"],[53,"\u2022"],[57,"\u2122"],[58,"\u0161"],[60,"\u0153"],[61,"\u2120"],[63,"\u0178"],[118,"\u215b"],[119,"\u215c"],[120,"\u215d"],[121,"\u215e"],[122,"\u2502"],[123,"\u2510"],[124,"\u2514"],[125,"\u2500"],[126,"\u2518"],[127,"\u250c"]]),du="black blue green cyan red magenta yellow white".split(" ");function fu(){this.h=[];this.g=[];this.i=new Tt;this.l=0;this.m=new Map([["CC1",new Gt(0,0)],["CC2",new Gt(0,1)],["CC3",new Gt(1,0)],["CC4",new Gt(1,1)]]);this.s=this.o=0;this.j=new Map;this.B=!0;this.A=new Set;gu(this)}fu.prototype.clear=function(){this.l=0;this.h=[];this.g=[];var a=this.i;a.i=[];a.h=[];a.g=0;gu(this);a=t(this.j.values());for(var b=a.next();!b.done;b=a.next())bu(b.value)}; +function gu(a){a.o=0;a.s=0;for(var b=t(a.m.values()),c=b.next();!c.done;c=b.next())c=c.value,c.h=0,c.g=c.j,c.m=null,wt(c.i),wt(c.j),wt(c.o);a.B=!0} +fu.prototype.extract=function(a,b){if(this.B){for(var c=t(this.m.values()),d=c.next();!d.done;d=c.next())d.value.l=b;this.B=!1}a=new Zg(a,0);if(!(8>a.getLength())&&181===a.X()&&49===a.Aa()&&1195456820===a.T()&&3===a.X()&&(c=a.X(),0!==(c&64)))for(c&=31,a.skip(1),d=0;d>2,g=a.X(),h=a.X();f&&(e&=3,0===e||1===e?this.h.push({pts:b,type:e,Ab:g,dc:h,order:this.h.length}):(this.g.push({pts:b,type:e,value:g,order:this.g.length}),this.g.push({pts:b,type:2,value:h,order:this.g.length})))}}; +fu.prototype.decode=function(){function a(e,f){return e.pts-f.pts||e.order-f.order}var b=[];this.h.sort(a);this.g.sort(a);for(var c=t(this.h),d=c.next();!d.done;d=c.next())(d=hu(this,d.value))&&b.push(d);c=t(this.g);for(d=c.next();!d.done;d=c.next())Ut(this.i,d.value);c=t(this.i.i);for(d=c.next();!d.done;d=c.next())d=iu(this,d.value),b.push.apply(b,x(d));this.i.i=[];this.h=[];this.g=[];return b}; +function hu(a,b){var c=b.type;if(16===(b.Ab&112)){var d=b.Ab>>3&1;0===c?a.o=d:a.s=d}d="CC"+((c<<1|(c?a.s:a.o))+1);c=a.m.get(d);if(255===b.Ab&&255===b.dc||!b.Ab&&!b.dc||!ju(b.Ab)||!ju(b.dc))return 45<=++a.l&&gu(a),null;a.l=0;b.Ab&=127;b.dc&=127;var e=b.Ab;if(1<=e&&15>=e||!b.Ab&&!b.dc)return null;e=null;if(16===(b.Ab&112))a:{a.A.add(d),d=b.Ab;a=b.dc;if(c.m===(d<<8|a))c.m=null;else if(c.m=d<<8|a,16===(d&240)&&64===(a&192)){b=[11,11,1,2,3,4,12,13,14,15,5,6,7,8,9,10][(d&7)<<1|a>>5&1];d="white";e=!1;var f= +null;var g=95=g?d=Lt[Math.floor(g/2)]:15>=g?e=!0:f=Math.floor((g-16)/2);a=1===(a&1);4!==c.h&&(g=c.g,3===c.h&&b!==g.g&&(c=1+b-g.h,Ft(g,c,1+g.g-g.h,g.h),zt(g,0,c-1),zt(g,b+1,15-b)),g.g=b,g.m=a,g.j=e,g.l=d,g.s=f,g.o="black")}else if(17===(d&247)&&32===(a&240))c.g.m=!1,c.g.j=!1,c.g.l="white",At(c.g,0,32),d=!1,b=Lt[(a&14)>>1],"white_italics"===b&&(b="white",d=!0),c.g.m=1===(a&1),c.g.j=d,c.g.l=b;else if(16===(d&247)&&32===(a&240)||23===(d&247)&&45===(a&255))b="black",0===(d&7)&&(b=Kt[(a& +14)>>1]),c.g.o=b;else if(17===(d&247)&&48===(a&240))At(c.g,1,a);else if(18===(d&246)&&32===(a&224))At(c.g,d&1?3:2,a);else{if(20===(d&246)&&32===(a&240)){a=b.pts;d=null;switch(b.dc){case 32:It(c);break;case 33:c=c.g;c.i[c.g].pop();break;case 37:d=Ht(c,2,a);break;case 38:d=Ht(c,3,a);break;case 39:d=Ht(c,4,a);break;case 40:At(c.g,0,32);break;case 41:c.h=2;c.g=c.i;c.g.h=0;c.l=a;break;case 42:wt(c.o);Jt(c);break;case 43:Jt(c);break;case 44:b=c.i;d=null;4!==c.h&&(d=xt(b,c.l,a));zt(b,0,15);break;case 45:b= +c.g;3!==c.h?d=null:(d=xt(b,c.l,a),e=b.g-b.h+1,Ft(b,e-1,e,b.h),zt(b,0,e-1),zt(b,b.g,15-b.g),c.l=a);break;case 46:zt(c.j,0,15);break;case 47:b=null,4!==c.h&&(b=xt(c.i,c.l,a)),d=c.j,c.j=c.i,c.i=d,It(c),c.l=a,d=b}e=d;break a}(23==d||31==d)&&33<=a&&35>=a&&(c.g.A=a-32)}e=null}else a=b.dc,At(c.g,0,b.Ab),At(c.g,0,a);return e} +function iu(a,b){var c=[];try{for(;b.Fa();){var d=Wt(b).value,e=(d&224)>>5,f=d&31;7===e&&0!=f&&(e=Wt(b).value&63);if(0!=e){a.A.add("svc"+e);a.j.has(e)||a.j.set(e,new Xt(e));for(var g=a.j.get(e),h=b.Ma();b.Ma()-h=m)var r=Yt(e,k,m,n);else if(128<=m&&159>=m)r=Zt(e,k,m,n);else{if(4096<=m&&4127>=m)e=k,k=m&255,8<=k&&15>=k?e.skip(1):16<=k&&23>=k?e.skip(2):24<=k&&31>=k&&e.skip(3);else if(4224<=m&&4255>=m)e=k,k=m& +255,128<=k&&135>=k?e.skip(4):136<=k&&143>=k&&e.skip(5);else if(32<=m&&127>=m)k=m,e.g&&(127===k?Pt(e.g,"\u266a"):Pt(e.g,String.fromCharCode(k)));else if(160<=m&&255>=m)e.g&&Pt(e.g,String.fromCharCode(m));else if(4128<=m&&4223>=m){if(k=m&255,e.g)if(eu.has(k)){var u=eu.get(k);Pt(e.g,u)}else Pt(e.g,"_")}else 4256<=m&&4351>=m&&e.g&&(160!=(m&255)?Pt(e.g,"_"):Pt(e.g,"[CC]"));r=[]}c.push.apply(c,x(r))}}}}catch(w){if(w instanceof U&&3E3===w.code)cb("CEA708_INVALID_DATA","Buffer read out of bounds / invalid CEA-708 Data."); +else throw w;}return c}function ju(a){for(var b=0;a;)b^=a&1,a>>=1;return 1===b}fu.prototype.getStreams=function(){return Array.from(this.A)};T("shaka.cea.CeaDecoder",fu);Nc=function(){return new fu};function ku(a){for(var b=[],c=a,d=a=0;d>1&63;r=39==r||40==r;break;case ru:h=2;b.skip(1);r=q>>1&63;r=23==r||24==r;break;default:return}if(r)for(q=0,lc.byteLength){c=[];break a}var f=Tb(c,a,e);b.push({type:d,value:f});a+=e}c=b}return c}function uu(a){a=mc(rd(a));a=tu(a).filter(function(b){return b.type===vu})[0];if(!a)return null;a=bc(a.value,!0);return(a=jd(a,"WRMHEADER"))?a:null} +function wu(a){try{var b=uu(a);if(b)a:{for(var c=t(td(b,"DATA")),d=c.next();!d.done;d=c.next()){var e=d.value;if(e.children)for(var f=t(e.children),g=f.next();!g.done;g=f.next()){var h=g.value;if("LA_URL"==h.tagName){var k=rd(h);break a}}}k=""}else k="";return k}catch(l){return""}}var vu=1;function xu(a,b,c){var d=yu(a),e=null;a=[];var f=[],g=null,h=new Set(d.map(function(l){return l.keyId}));h.delete(null);var k="cenc";if(1"+a+"");return wu(a)}return""} +function Au(a,b,c,d,e){var f=[];c=t(c);for(var g=c.next();!g.done;g=c.next()){g=g.value;var h=d[g.wd];if(h){var k;if((k=vd(g.node,"urn:microsoft:playready","pro"))&&rd(k)){k=rd(k);k=mc(k);var l=new Uint8Array([154,4,240,121,152,64,66,134,171,146,230,91,224,136,95,149]);k=[{initData:nh(k,l,new Set,0),initDataType:"cenc",keyId:g.keyId}]}else k=null;l=null;if("urn:uuid:e2719d58-a985-b3c9-781a-b030af78d30e"===g.wd){l=g;var m=e;if(0==m.size)l=null;else{var n=new Uint8Array([16,119,239,236,192,178,77,2, +172,227,60,30,82,226,251,75]),q=new Uint8Array([]);l=[{initData:nh(q,n,m,1),initDataType:"cenc",keyId:l.keyId}]}}k=rc(h,b,g.init||a||k||l);if(h=Du.get(h))k.licenseServerUri=h(g);f.push(k)}}return f}function yu(a){var b=[];a=t(a);for(var c=a.next();!c.done;c=a.next())(c=Eu(c.value))&&b.push(c);return b} +function Eu(a){var b=a.attributes.schemeIdUri,c=yd(a,"urn:mpeg:cenc:2013","default_KID"),d=wd(a,"urn:mpeg:cenc:2013","pssh").map(sd),e=a.attributes.value;if(!b)return null;b=b.toLowerCase();if(c&&(c=c.replace(/-/g,"").toLowerCase(),c.includes(" ")))throw new U(2,4,4009);var f=[];try{f=d.map(function(g){return{initDataType:"cenc",initData:mc(g),keyId:null}})}catch(g){throw new U(2,4,4007);}return{node:a,wd:b,keyId:c,init:0v)if(r){r=xd(r,"t",Fd);if(null== +r)break;else if(u>=r)break;v=Math.ceil((r-u)/w)-1}else{if(Infinity==a)break;else if(u/f>=a)break;v=Math.ceil((a*f-u)/w)-1}0>>31;q&=2147483647;var u=g.reader.T();g.reader.skip(4);if(1==r)throw new U(2,3,3006);h.push(new qj(l/k+c,(l+u)/k+c,function(){return f},a,a+q-1,b,c,d,e));l+=u;a+=q}g.parser.stop();return h};function Ou(a){this.h=Yb(a);this.g=new Zg(this.h,0)}Ou.prototype.Fa=function(){return this.g.Fa()}; +function Pu(a){var b=Qu(a);if(7=c&&(c=v.timeline+1)}-1==k&&(k=c);r=new pv(n,a.J.originalId,a.bandwidth,a.J.cb,a.Jb,u,w,m,g,a.J.Af,k)}n.timeline&&"image"!==a.ma.contentType&&"text"!==a.ma.contentType&&a.presentationTimeline.oi(r.h?r.h.timeline:[],u);d&&a.hc&&(d.segmentIndex=r);d=(d=(d=n.timeline)&&d[d.length-1])?d.end+n.$b:-1;l=-1;r instanceof pv&&(l=r.Oe());return{endTime:d,timeline:l,Jc:function(){r instanceof pv&&0==r.getNumReferences()&&ov(r,n,u,w,m);return Promise.resolve(r)}, +timescale:n.timescale}}function jv(a){return a.Cc}function lv(a){var b=Gu(a,jv),c=Hu(a,jv,"media"),d=Hu(a,jv,"index"),e=Hu(a,jv,"k"),f=0;e&&(f=parseInt(e,10));return{Ef:b.Ef,gb:b.gb,timescale:b.timescale,fe:b.fe,$b:b.$b,wh:b.wh,timeline:b.timeline,Ac:c&&hc(c),Sd:d,mimeType:a.J.mimeType,codecs:a.J.codecs,bandwidth:a.bandwidth,qk:f}} +function mv(a){var b=a.Sd?1:0;b+=a.timeline?1:0;b+=a.gb?1:0;if(0==b)throw new U(2,4,4002);1!=b&&(a.Sd&&(a.timeline=null),a.Ef=null,a.gb=null);if(!a.Sd&&!a.Ac)throw new U(2,4,4002);} +function nv(a,b,c,d,e,f,g,h){function k(J){var M=J-v,O=M*w,N=b.Ef,P=M*N;"BigInt"in window&&P>Number.MAX_SAFE_INTEGER&&(P=BigInt(M)*BigInt(N));O+=q;M=O+w;N=Math.min(M,m());var R=[],S=b.qk;if(S)for(var aa=(N-O)/S,W={},Fa=0;Fam()&&!O.length?null:O})}return Promise.resolve(L)} +function kv(a,b){var c=a.J.Ye;c||(c=Hu(a,jv,"initialization"));if(!c)return null;c=hc(c);var d=a.J.originalId,e=a.bandwidth||null,f=a.J.cb,g=a.Jb;b=new oj(function(){var h=Fu(c,d,null,null,e,null);return qc(f(),[h],g())},0,null,Xu(a),null,null,b,a.ma.encrypted);b.codecs=a.J.codecs;b.mimeType=a.J.mimeType;a.na&&(b.g=a.na.start+a.na.duration);return b} +function pv(a,b,c,d,e,f,g,h,k,l,m){Cl.call(this,[]);this.h=a;this.F=b;this.B=c;this.C=d;this.H=e;this.j=f;this.l=g;this.s=h;this.A=k;this.G=l;this.I=m;qv(this)}pa(pv,Cl);p=pv.prototype;p.getNumReferences=function(){return this.h?this.h.timeline.length:0};p.release=function(){Cl.prototype.release.call(this);this.h=null}; +p.$a=function(a){if(this.h){for(var b=0,c=this.h.timeline,d=0;d=b&&(this.g=this.g.slice(b)),this.i+=b,0===this.getNumReferences()&&this.release())}}; +function ov(a,b,c,d,e){rv(a,e);if(a.h){c=a.h.timeline;a.h.Ac!==b.Ac&&(a.h.Ac=b.Ac);if(c.length){var f=c[c.length-1];b=b.timeline.filter(function(g){return g.end>f.end})}else b=b.timeline.slice();0=a.l||0>=d.end||b.push(d);a.h.timeline=b;a.$a(a.j)}} +p.find=function(a){if(this.h&&this.h.timeline&&this.h.timeline.length&&a=this.l)return null;for(var c=b.length-1,d=0;d=f&&aa||a>=this.getNumReferences()||!this.h)return null;var c=this.g[a];if(!c){var d=this.h.timeline[a],e=d.Kk,f=d.xh+this.h.wh;c=this.j-this.h.$b;var g=this.j+d.end,h=g;a===this.getNumReferences()-1&&Infinity!==this.l&&(h=.1h&&a.j.delete(f);d=d.filter(function(k){for(var l=t(a.j.keys()),m=l.next();!m.done;m=l.next())if(m.value.includes((new Bb(k.location)).Bb))return!1;return!0});d.length&&(a.B=d[0].Qg);d=d.map(function(k){return k.location});if(!d.length&&a.h)for(e=t(a.h.split(",")),g=e.next();!g.done;g=e.next())if(g=b.get(g.value))a.B=a.h,d.push(g);if(!d.length)for(b=t(b.values()),e=b.next();!e.done;e=b.next())d.push(e.value);return c?d:qc(a.i,d)};function zv(){this.l=[];this.h=[];this.g=[];this.j=[];this.i=[];this.s=this.o=!1;this.m=new Set}p=zv.prototype;p.release=function(){for(var a=t(this.h.concat(this.g,this.j,this.i)),b=a.next();!b.done;b=a.next())b=b.value,b.segmentIndex&&b.segmentIndex.release();this.h=[];this.g=[];this.j=[];this.i=[];this.l=[];this.s=this.o=!1;this.m.clear()};p.Tj=function(){return this.l};p.Bg=function(){return this.j.slice()};p.yj=function(){return this.i}; +p.Lh=function(a,b){if(a){if("audio"==a.type)for(var c=t(this.h),d=c.next();!d.done;d=c.next())d=d.value,d.matchedStreams=d.matchedStreams.filter(function(e){return e!==a});else if("video"==a.type)for(c=t(this.g),d=c.next();!d.done;d=c.next())d=d.value,d.matchedStreams=d.matchedStreams.filter(function(e){return e!==a}),d.trickModeVideo&&(d.trickModeVideo.matchedStreams=d.trickModeVideo.matchedStreams.filter(function(e){return e!==a})),d.dependencyStream&&(d.dependencyStream.matchedStreams=d.dependencyStream.matchedStreams.filter(function(e){return e!== +a}));else if(a.type==wc)for(c=t(this.j),d=c.next();!d.done;d=c.next())d=d.value,d.matchedStreams=d.matchedStreams.filter(function(e){return e!==a});else if("image"==a.type)for(c=t(this.i),d=c.next();!d.done;d=c.next())d=d.value,d.matchedStreams=d.matchedStreams.filter(function(e){return e!==a});a.segmentIndex&&a.closeSegmentIndex();this.m.delete(b)}}; +function Av(a,b){var c=[],d=[],e=[],f=[];a=t(a);for(var g=a.next();!g.done;g=a.next()){var h=g.value;g=new Map(h.audioStreams.map(function(n){return[Bv(n),n]}));var k=new Map(h.videoStreams.map(function(n){return[Cv(n),n]})),l=new Map(h.textStreams.map(function(n){return[Dv(n),n]}));h=new Map(h.imageStreams.map(function(n){return[Ev(n),n]}));if(b){var m=Fv(wc);l.set(Dv(m),m);m=Fv("image");h.set(Ev(m),m)}c.push(g);d.push(k);e.push(l);f.push(h)}return{Eh:c,Xi:d,Ui:e,Yh:f}} +p.$f=function(a,b,c){c=void 0===c?!1:c;var d=this,e,f,g,h,k,l,m,n,q,r,u,w,v,y,z,A,B,E,H,C,D,I,L,K,J,M,O,N,P,R,S,aa;return Q(function(W){if(1==W.g){e=yc;if(!b&&1==a.length)return f=Av(a,!1),g=f.Eh,h=f.Xi,k=f.Ui,l=f.Yh,d.h=Array.from(g[0].values()),d.g=Array.from(h[0].values()),d.j=Array.from(k[0].values()),d.i=Array.from(l[0].values()),W.u(2);m=c?d.m.size:0;n=-1;for(q=0;q=d?h.push(new Set(c[k].values())):h.push(new Set);l=t(b);m=l.next();case 2:if(m.done){K.u(4);break}n=m.value;return F(K,Nv(a,n,c,d,f,h,g),5);case 5:q=K.h;if(!q)throw new U(2,4,4037);m=l.next();K.u(2);break;case 4:r=t(h);for(u=r.next();!u.done;u=r.next())for(w=u.value,v=t(w),y=v.next();!y.done;y=v.next())z=y.value,(A=Ov(a,z,c,e,f,h))&&b.push(A);B=t(h);for(E=B.next();!E.done;E= +B.next())for(H=E.value,C=t(H),D=C.next(),I={};!D.done;I={kh:void 0},D=C.next())if(I.kh=D.value,!Pv(I.kh)&&(L=b.some(function(J){return function(M){return Qv(a,J.kh,M)}}(I))))throw new U(2,4,4037);return K.return(b)}})}function Nv(a,b,c,d,e,f,g){return Q(function(h){if(1==h.g)return Rv(a,c,b,0d)return!0;if(ed.length)return!0;if(e.lengthd)return!0;if(ed.length)return!0;if(e.lengtha){if(c<=a||c-ab-a)return uw}else{if(c>a)return uw;if(a-ca-b)return uw}return ww}function vw(a,b,c){b=Math.abs(a-b);a=Math.abs(a-c);return av&&w>u&&a.M++;null==w&&(w=u);if(!(null!==a.N&&null!==r&&null!==q&&q< +a.N)||a.F.includes(r)||l+1==d.length){null!==q&&(null===a.N||q>a.N)&&(a.N=q);k=Ww(a,b,c,{start:q,duration:w,node:m,ai:null==w||!n});h.push(k);b.ra.id&&w&&a.va.set(b.ra.id,w);if(null==w){k=null;break}k=q+w}}if(e)for(b=t(h),c=b.next();!c.done;c=b.next())c=c.value.id,a.F.includes(c)||a.F.push(c);else a.F=h.map(function(y){return y.id});return null!=f?{periods:h,duration:f+g,Nh:!1}:{periods:h,duration:k,Nh:!0}} +function Pw(a){var b=Array.from(a.C.keys()).filter(function(h){return!a.F.includes(h)});b=t(b);for(var c=b.next();!c.done;c=b.next()){c=c.value;for(var d=!0,e=t(a.C.get(c)),f=e.next();!f.done;f=e.next()){f=f.value;var g=a.o.get(f);g&&(g.segmentIndex&&0!=g.segmentIndex.getNumReferences()?d=!1:(a.m&&a.m.Lh(g,c),a.o.delete(f)))}d&&a.C.delete(c)}}function Qw(a,b){b=new Set(b.map(function(e){return e.id}));for(var c=t(a.B.keys()),d=c.next();!d.done;d=c.next())d=d.value,b.has(d)||a.B.delete(d)} +function Ww(a,b,c,d){b.ra=Xw(a,d.node,null,c);b.na=d;b.ra.pb=b.pb;b.ra.id||(b.ra.id="__shaka_period_"+d.start);var e=qd(d.node,"EventStream");c=b.presentationTimeline.Eb();e=t(e);for(var f=e.next();!f.done;f=e.next())Yw(a,d.start,d.duration,f.value,c);c=qd(d.node,"SupplementalProperty");c=t(c);for(e=c.next();!e.done;e=c.next())if(e=e.value,"urn:mpeg:dash:urlparam:2014"==e.attributes.schemeIdUri&&(e=Zw(a,e)))b.Jb=e;c=qd(d.node,"AdaptationSet").map(function(r,u){return $w(a,b,u,r)}).filter(cf);if(b.hc){e= +[];f=t(c);for(var g=f.next();!g.done;g=f.next()){g=t(g.value.Gk);for(var h=g.next();!h.done;h=g.next())e.push(h.value)}if(e.length!=(new Set(e)).size)throw new U(2,4,4018);}e=new Map;f=t(c);for(g=f.next();!g.done;g=f.next())for(g=t(g.value.mj),h=g.next();!h.done;h=g.next()){var k=t(h.value);h=k.next().value;k=k.next().value;e.set(h,k)}if(e.size)for(f=null,g=t(c),h=g.next();!h.done;h=g.next()){h=h.value;k=[];for(var l=t(h.streams),m=l.next(),n={};!m.done;n={lh:void 0},m=l.next())if(n.lh=m.value,e.has(n.lh.originalId)){f|| +(f=qd(d.node,"AdaptationSet").map(function(r,u){return $w(a,b,u,r)}).filter(cf));m=t(f);for(var q=m.next();!q.done;q=m.next())if(q=q.value.streams.find(function(r){return function(u){return u.originalId==r.lh.originalId}}(n)))q.dependencyStream=e.get(q.originalId),q.originalId+=q.dependencyStream.originalId,k.push(q)}k.length&&h.streams.push.apply(h.streams,x(k))}d=c.filter(function(r){return!r.vh});c=c.filter(function(r){return r.vh});if(!a.g.disableIFrames)for(c=t(c),e=c.next();!e.done;e=c.next())for(e= +e.value,f=e.vh.split(" "),g=t(d),h=g.next();!h.done;h=g.next())if(h=h.value,f.includes(h.id))for(h=t(h.streams),k=h.next();!k.done;k=h.next())cg(k.value,e.streams);c=ax(a.g.disableAudio,d,"audio");e=ax(a.g.disableVideo,d,"video");f=ax(a.g.disableText,d,wc);d=ax(a.g.disableThumbnails,d,"image");if(0===e.length&&0===c.length)throw new U(2,4,4004);return{id:b.ra.id,audioStreams:c,videoStreams:e,textStreams:f,imageStreams:d}} +function ax(a,b,c){return a||!b.length?[]:b.reduce(function(d,e){if(e.contentType!=c)return d;d.push.apply(d,x(e.streams));return d},[])} +function $w(a,b,c,d){function e(J){var M=J.attributes["dvb:fontFamily"];J=J.attributes["dvb:url"];M&&J&&(J=qc(b.ma.cb(),[J],b.Jb()),a.j.addFont(M,J[0]))}function f(J){switch(J){case 1:case 5:case 6:case 7:return"srgb";case 9:return"rec2020";case 11:case 12:return"p3"}}function g(J){switch(J){case 1:case 6:case 13:case 14:case 15:return"SDR";case 16:return"PQ";case 18:return"HLG"}}b.ma=Xw(a,d,b.ra,null);b.ma.position=c;var h=!1;c=qd(d,"Role");var k=c.map(function(J){return J.attributes.value}).filter(cf), +l=void 0,m=b.ma.contentType==wc;m&&(l="subtitle");c=t(c);for(var n=c.next();!n.done;n=c.next()){n=n.value;var q=n.attributes.schemeIdUri;if(null==q||"urn:mpeg:dash:role:2011"==q)switch(n=n.attributes.value,n){case "main":h=!0;break;case "caption":case "subtitle":l=n}}var r=qd(d,"EssentialProperty");c=null;var u=!1;n=null;q=!1;r=t(r);for(var w=r.next();!w.done;w=r.next()){w=w.value;var v=w.attributes.schemeIdUri;if("http://dashif.org/guidelines/trickmode"==v)c=w.attributes.value;else if("urn:mpeg:mpegB:cicp:TransferCharacteristics"== +v)var y=g(parseInt(w.attributes.value,10));else if("urn:mpeg:mpegB:cicp:ColourPrimaries"==v)var z=f(parseInt(w.attributes.value,10));else"urn:mpeg:mpegB:cicp:MatrixCoefficients"!=v&&("urn:mpeg:dash:ssr:2023"==v&&a.g.dash.enableFastSwitching?u=!0:"urn:dvb:dash:fontdownload:2014"==v?e(w):"urn:mpeg:dash:urlparam:2014"==v?(n=Zw(a,w))||(q=!0):q=!0)}if(q)return null;var A=null;q=qd(d,"SupplementalProperty");q=t(q);for(r=q.next();!r.done;r=q.next())r=r.value,w=r.attributes.schemeIdUri,"http://dashif.org/guidelines/last-segment-number"== +w?A=parseInt(r.attributes.value,10)-1:"urn:mpeg:mpegB:cicp:TransferCharacteristics"==w?y=g(parseInt(r.attributes.value,10)):"urn:mpeg:mpegB:cicp:ColourPrimaries"==w?z=f(parseInt(r.attributes.value,10)):"urn:dvb:dash:fontdownload:2014"==w?e(r):"urn:mpeg:dash:urlparam:2014"==w&&(n=Zw(a,r));n&&(b.Jb=n);n=qd(d,"Accessibility");var B=new Map,E;n=t(n);for(q=n.next();!q.done;q=n.next())if(r=q.value,q=r.attributes.schemeIdUri,r=r.attributes.value,"urn:scte:dash:cc:cea-608:2015"!=q||a.g.disableText)if("urn:scte:dash:cc:cea-708:2015"!= +q||a.g.disableText)"urn:mpeg:dash:role:2011"==q?null!=r&&(k.push(r),"captions"==r&&(l="caption")):"urn:tva:metadata:cs:AudioPurposeCS:2007"==q&&("1"==r?E="visually impaired":"2"==r?E="hard of hearing":"9"==r&&(E="spoken subtitles"));else if(q=1,null!=r)for(r=t(r.split(";")),w=r.next();!w.done;w=r.next()){v=w.value;var H=w=void 0;v.includes("=")?(v=v.split("="),w="svc"+v[0],H=v[1].split(",")[0].split(":").pop()):(w="svc"+q,q++,H=v);B.set(w,gf(H))}else B.set("svc1","und");else if(q=1,null!=r)for(r= +r.split(";"),w=t(r),v=w.next();!v.done;v=w.next()){H=v.value;var C=v=void 0;H.includes("=")?(H=H.split("="),v=H[0].startsWith("CC")?H[0]:"CC"+H[0],C=H[1]||"und"):(v="CC"+q,2==r.length?q+=2:q++,C=H);B.set(v,gf(C))}else B.set("CC1","und");n=qd(d,"ContentProtection");var D=xu(n,a.g.ignoreDrmInfo,a.g.dash.keySystemsByURI);b.ma.encrypted=0a.K)){var c=a.K;0<=a.g.updatePeriod&&(c=a.g.updatePeriod);a.L.ha(Math.max(c-b,Wa(a.xa)))}} +function Xw(a,b,c,d){c=c||{contentType:"",mimeType:"",codecs:"",emsgSchemeIdUris:[],frameRate:void 0,pixelAspectRatio:void 0,mf:null,audioSamplingRate:null,pb:0,Af:0,encrypted:!1};d=d||c.cb;var e=b.attributes.id,f=b.attributes.supplementalId,g=qd(b,"BaseURL"),h,k=!1;if(a.h)for(var l=t(g),m=l.next();!m.done;m=l.next()){var n=m.value;m=n.attributes.serviceLocation;n=sd(n);m&&n&&(xv(a.h,e,m,n),k=!0)}k&&a.h||(h=g.map(sd));l=b.attributes.contentType||c.contentType;m=b.attributes.mimeType||c.mimeType;n= +im([b.attributes.codecs||c.codecs]).join(",");var q=xd(b,"frameRate",Id)||c.frameRate,r=b.attributes.sar||c.pixelAspectRatio,u=gx(qd(b,"InbandEventStream"),c.emsgSchemeIdUris),w=qd(b,"AudioChannelConfiguration");w=hx(w)||c.mf;var v=xd(b,"audioSamplingRate",Fd)||c.audioSamplingRate;l||(l=cx(m,n));var y=ud(b,"SegmentBase"),z=ud(b,"SegmentTemplate"),A=y?xd(y,"availabilityTimeOffset",Gd)||0:0,B=z?xd(z,"availabilityTimeOffset",Gd)||0:0,E=g&&g.length?xd(g[0],"availabilityTimeOffset",Gd)||0:0;A=c.pb+E+A+ +B;B=null;(E=ud(b,"SegmentSequenceProperties"))&&(E=ud(E,"SAP"))&&(B=xd(E,"cadence",Dd));E=b.attributes.label;var H=qd(b,"Label");H&&H.length&&(H=H[0],rd(H)&&(E=rd(H)));return{cb:function(){return qc(d(),g.length?a.h&&k?yv(a.h,e):h?h:[]:[])},xd:y||c.xd,pc:ud(b,"SegmentList")||c.pc,Cc:z||c.Cc,vf:ud(b,"ProducerReferenceTime")||c.vf,width:xd(b,"width",Fd)||c.width,height:xd(b,"height",Fd)||c.height,contentType:l,mimeType:m,codecs:n,frameRate:q,pixelAspectRatio:r,emsgSchemeIdUris:u,id:f||e,originalId:e, +language:b.attributes.lang,mf:w,audioSamplingRate:v,pb:A,Ye:null,Af:B||c.Af,label:E||null,encrypted:!1}}function gx(a,b){b=b.slice();a=t(a);for(var c=a.next();!c.done;c=a.next())c=c.value.attributes.schemeIdUri,b.includes(c)||b.push(c);return b} +function hx(a){a=t(a);for(var b=a.next();!b.done;b=a.next()){b=b.value;var c=b.attributes.schemeIdUri;if(c&&(b=b.attributes.value))switch(c){case "urn:mpeg:dash:outputChannelPositionList:2012":return b.trim().split(/ +/).length;case "urn:mpeg:dash:23003:3:audio_channel_configuration:2011":case "urn:dts:dash:audio_channel_configuration:2012":b=parseInt(b,10);if(!b)continue;return b;case "tag:dolby.com,2015:dash:audio_channel_configuration:2015":c=[2,1,2,2,2,2,1,2,2,1,1,1,1,2,1,1,2,2];b=parseInt(b, +16);if(!b)continue;for(var d=0,e=0;ec}).map(sd).filter(cf);return d.length?qc(a.A,d):[]}T("shaka.dash.DashParser",Bw);si("application/dash+xml",function(){return new Bw});si("video/vnd.mpeg.dash.mpd",function(){return new Bw});function jx(){}T("shaka.dependencies",jx);jx.has=function(a){return kx.has(a)};jx.add=function(a,b){if(!lx[a])throw Error(a+" is not supported");a==mx?wb("mux.js","mux.js is no longer used in Shaka Player."):kx.set(a,function(){return b})};var mx="muxjs",lx={um:mx,ISOBoxer:"ISOBoxer"};jx.Allowed=lx;var kx=new Map([["ISOBoxer",function(){return window.ISOBoxer}]]);function nx(){this.j=new pb(function(){return navigator.userAgent.match(/Smart( ?|_)TV/i)||navigator.userAgent.match(/Android ?TV/i)?"TV":navigator.userAgentData?navigator.userAgentData.mobile?"MOBILE":"DESKTOP":/(?:iPhone|iPad|iPod)/.test(navigator.userAgent)?"MOBILE":navigator.userAgentData&&navigator.userAgentData.platform?"android"==navigator.userAgentData.platform.toLowerCase()?"MOBILE":"DESKTOP":navigator.userAgent.includes("Android")?"MOBILE":"DESKTOP"});this.l=new pb(function(){return navigator.vendor.includes("Apple")&& +(navigator.userAgent.includes("Version/")||navigator.userAgent.includes("OS/"))?"WEBKIT":navigator.userAgent.includes("Edge/")?"EDGE":navigator.userAgent.includes("Chrome/")?"CHROMIUM":navigator.userAgent.includes("Firefox/")?"GECKO":"UNKNOWN"})}function vi(){var a=window.ManagedMediaSource||window.MediaSource;return a&&a.isTypeSupported?!0:!1}p=nx.prototype;p.bc=function(){return!!navigator.mediaCapabilities};p.La=function(){return this.j.value()};p.Ea=function(){return this.l.value()};p.be=function(){return!1}; +p.wi=function(){return!1};p.Ze=function(){return!1};p.xi=function(){return!1};p.ae=function(){return!1};p.Xc=function(){return!0};p.Yc=function(){return!0};p.ge=function(){return!0};p.Di=function(){return 0};p.ec=function(){return Promise.resolve({width:Infinity,height:Infinity})};p.Mi=function(){return!1};p.jh=function(){return!1}; +p.Ta=function(a){var b=this.La();if("TV"===b||"CONSOLE"===b||"CAST"===b)a.ads.customPlayheadTracker=!0,a.ads.skipPlayDetection=!0,a.ads.supportsMultipleMediaElements=!1;return a};p.oh=function(){return!!window.indexedDB};p.ti=function(){return[]};function un(a){qb();return void 0!==window.matchMedia&&window.matchMedia("(color-gamut: p3)").matches?a?"HLG":"PQ":"SDR"}p.Ti=function(){return!1};p.ii=function(){return!1};p.Zg=function(){return!1};p.nh=function(){return!0};p.ji=function(){return!1}; +p.Si=function(){return!0};p.toString=function(){return"Device: "+this.Mb()+" v"+this.Ca()+"; Type: "+this.La()};function ox(){nx.call(this);this.g=new pb(function(){var a=navigator.userAgent.match(/Version\/(\d+)/);return a?parseInt(a[1],10):(a=navigator.userAgent.match(/OS (\d+)(?:_\d+)?/))?parseInt(a[1],10):null});this.h=new pb(function(){return/(?:iPhone|iPad|iPod)/.test(navigator.userAgent)||1this.g&&a.push("opus");return a};p.ii=function(){return!0};p.ji=function(){return 3===this.Ca()};navigator.userAgent.includes("Tizen")&&(tb=function(){return new xx});function yx(){nx.apply(this,arguments)}pa(yx,nx);yx.prototype.Ca=function(){return null};yx.prototype.Mb=function(){return"Vizio"};yx.prototype.La=function(){return"TV"};yx.prototype.bc=function(){return!1};navigator.userAgent.includes("VIZIO SmartCast")&&(tb=function(){return new yx});function zx(){nx.call(this);this.h=new pb(function(){return navigator.userAgent.includes("DT_STB_BCM")});this.g=new pb(function(){if(navigator.userAgent.includes("DT_STB_BCM"))return 11;var a=navigator.userAgent.match(/Version\/(\d+)/);return a?parseInt(a[1],10):(a=navigator.userAgent.match(/OS (\d+)(?:_\d+)?/))?parseInt(a[1],10):null})}pa(zx,nx);p=zx.prototype;p.Ca=function(){return this.g.value()};p.Mb=function(){return"WebKit STB"};p.La=function(){return"TV"};p.Ea=function(){return"WEBKIT"}; +p.bc=function(){return!1};p.Xc=function(){var a=this.g.value();return null!==a?15<=a:!0};p.ec=function(){return Promise.resolve({width:window.screen.width*window.devicePixelRatio,height:window.screen.height*window.devicePixelRatio})};p.nh=function(){return!this.h.value()}; +if(navigator.userAgent.includes("DT_STB_BCM")||navigator.userAgent.includes("DT_STB_BCM")||!(!(navigator.vendor||"").includes("Apple")||/(?:iPhone|iPad|iPod)/.test(navigator.userAgent)||1b.length||"data"!=b[0])throw new U(2,1,1004,a);b=b.slice(1).join(":").split(",");if(2>b.length)throw new U(2,1,1004,a);var c=b[0];a=window.decodeURIComponent(b.slice(1).join(","));b=c.split(";");c=b[0];var d=!1;1",lc(b),""].join("\n")))d.licenseServerUri=wu(b);d=Promise.resolve(d)}else d=Promise.resolve(null);return d}).set("urn:uuid:3d5e6d35-9b9a-41e8-b843-dd3c6e72c42c",function(b){var c=Jx(b,"METHOD");if(["SAMPLE-AES","SAMPLE-AES-CTR"].includes(c)){var d="cenc";"SAMPLE-AES"==c&&(d="cbcs");c=Jx(b,"URI");c=$x(c.split("?")[0]);c=Tb(c.data);d=rc("com.huawei.wiseplay",d,[{initDataType:"cenc",initData:c}]);(b=Ix(b,"KEYID"))&&d.keyIds.add(b.toLowerCase().substr(2)); +b=Promise.resolve(d)}else b=Promise.resolve(null);return b});this.ab=new Set;this.i=new Map;this.l=null;this.C="";this.Pa=new Tx;this.K=-1;this.ia=Infinity;this.$=this.mc=this.Za=!1;this.B=new $e(function(){if(a.U&&!a.g.continueLoadingWhenPaused&&(a.S.Ja(a.U,"timeupdate"),a.U.paused)){a.S.za(a.U,"timeupdate",function(){return cy(a)});return}cy(a)});this.Ba=dy;this.m=null;this.Ua=0;this.o=Infinity;this.Ya=this.Ka=this.P=0;this.W=new Eg;this.G=new Map;this.H=new Map;this.xa=new Map;this.oa=new Map; +this.L=new Map;this.ua=new Map;this.va=new Map;this.kc=this.ka=!1;this.eb=new Va(5);this.j=null;this.N=!0;this.S=new jb;this.s=this.U=null;this.Xb=function(){return!1}}p=ay.prototype;p.configure=function(a,b){var c=this.h&&a.updatePeriod!=this.g.updatePeriod&&0<=a.updatePeriod;this.g=a;b&&(this.Xb=b);this.j&&this.j.configure(this.g);c&&this.m&&this.m.presentationTimeline.V()&&this.B.Hb()}; +p.start=function(a,b){var c=this,d;return Q(function(e){return 1==e.g?(c.h=b,c.ka=b.isLowLatencyMode(),F(e,ey(c,[a]).promise,2)):3!=e.g?(d=e.h,c.C=d.uri,F(e,fy(c,d.data),3)):e.return(c.m)})}; +p.stop=function(){this.B&&(this.B.stop(),this.B=null);var a=[];this.W&&(a.push(this.W.destroy()),this.W=null);this.g=this.h=null;this.ab.clear();this.m=null;this.i.clear();this.I.clear();this.H.clear();this.A.clear();this.xa.clear();this.oa.clear();this.L.clear();this.ua.clear();this.va.clear();this.j&&this.j.destroy();this.S&&(this.S.release(),this.S=null);return Promise.all(a)}; +p.update=function(){var a=this,b,c,d,e,f,g,h,k,l,m,n,q;return Q(function(r){if(1==r.g){if(!gy(a))return r.return();b=[];c=Array.from(a.i.values());a.o=Infinity;a.m.gapCount=0;d=c.filter(function(u){return u.stream.segmentIndex});e=t(d);for(f=e.next();!f.done;f=e.next())g=f.value,b.push(hy(a,g));return F(r,Promise.all(b),2)}iy(a,d.map(function(u){return u.stream}));h=d.some(function(u){return 0==u.Od});d.length&&!h&&(k=jy,ky(a,k.$i),l=d.map(function(u){return u.ic}),a.l.ob(Math.min.apply(Math,x(l))), +a.h.updateDuration());h&&ly(a);m=t(d);for(n=m.next();!n.done;n=m.next())q=n.value,q.stream.isAudioMuxedInVideo||!q.stream.segmentIndex||Qf(q.stream.segmentIndex)||a.h.disableStream(q.stream);G(r)})};function my(a,b){return gy(a)?a.M.get(b.type):b.gf} +function hy(a,b){var c,d,e,f,g,h,k,l,m,n,q,r,u,w,v,y,z,A,B,E,H,C,D,I,L,K,J,M,O,N,P,R,S,aa,W,Fa,Ga;return Q(function(xa){switch(xa.g){case 1:if(b.stream.isAudioMuxedInVideo)return xa.return();c=[];d=t(b.O());for(e=d.next();!e.done;e=d.next())f=e.value,g=new Bb(f),h=g.g,b.Le&&(0<=b.Qb&&h.add("_HLS_msn",String(b.Qb)),0<=b.Rb&&h.add("_HLS_part",String(b.Rb))),b.Me&&h.add("_HLS_skip","YES"),Qb(h)&&Fb(g,Gb(h.toString())),c.push(g.toString());wa(xa,2);return F(xa,ey(a,c,!0).promise,4);case 4:k=xa.h;za(xa, +3);break;case 2:throw l=Aa(xa),a.h&&a.h.disableStream(b.stream),l;case 3:if(!b.stream.segmentIndex)return xa.return();m=Ux(a.Pa,k.data);if(1!=m.type)throw new U(2,4,4017);n=k.uri;n==k.originalUri||b.O().includes(n)||b.wf.push(n);q=Mx(m.ea,"EXT-X-DEFINE");r=ny(a,q,n);u=b.stream;w=my(a,b);return F(xa,oy(a,m,u.mimeType,b.O,r),5);case 5:v=xa.h;y=v.keyIds;z=v.drmInfos;A=v.encrypted;B=v.Dh;u.encrypted||!A||B||(u.encrypted=!0);E=function(qa,Da){return qa.size===Da.size&&[].concat(x(qa)).every(function(Ja){return Da.has(Ja)})}; +E(u.keyIds,y)||(u.keyIds=y,u.drmInfos=z,a.h.newDrmInfo(u));H=py(a,m,w,r,b.O,b.type);C=H.segments;if(D=H.bandwidth)u.bandwidth=D;I=Rl(u);L=t(C);for(K=L.next();!K.done;K=L.next())J=K.value,J.Z&&(J.Z.nd=I);u.segmentIndex.Vd(C,a.l.Eb());C.length&&(M=Px(m.ea,"EXT-X-MEDIA-SEQUENCE",0),N=(O=Ox(m.ea,"EXT-X-SKIP"))?Number(Ix(O,"SKIPPED-SEGMENTS")):0,P=qy(M,C),R=P.Qb,S=P.Rb,b.Qb=R+N,b.Rb=S,aa=w.get(M),u.segmentIndex.$a(aa));if(W=Qf(u.segmentIndex))b.Rc=W.startTime,Fa=C[C.length-1],b.ic=Fa.endTime;if(Ga=Ox(m.ea, +"EXT-X-ENDLIST"))b.Od=!0;ry(a,m);sy(a,m.ea,u.type,r,b.O);G(xa)}})}p.onExpirationUpdated=function(){};p.onInitialVariantChosen=function(){};p.banLocation=function(a){this.j&&this.j.banLocation(a)};p.setMediaElement=function(a){this.U=a}; +function ty(a,b,c){c=void 0===c?!1:c;for(var d=-1==a.K,e=t(b),f=e.next();!f.done;f=e.next()){f=f.value;var g=f.stream.segmentIndex,h=my(a,f);if(g=Qf(g)){h=t(h);for(var k=h.next();!k.done;k=h.next()){k=t(k.value);var l=k.next().value;if(k.next().value==g.startTime){d&&(a.K=Math.max(a.K,l));f.ig=l;break}}}}if(!(0>a.K))for(b=t(b),d=b.next();!d.done;d=b.next())if(d=d.value,uy(a,d.type)||c)if(e=d.stream.segmentIndex)if(f=a.K-d.ig,0Math.abs(c))){b.Rc+=c;b.ic+=c;a=my(a,b);for(var d=t(a),e=d.next();!e.done;e=d.next()){var f=t(e.value);e=f.next().value;f=f.next().value;a.set(e,f+c)}b.O()}} +function fy(a,b){var c,d,e,f,g,h,k,l,m,n,q,r,u,w,v,y,z,A,B,E,H,C,D,I,L,K,J,M,O,N,P,R,S,aa,W,Fa,Ga,xa,qa,Da,Ja,ra,da;return Q(function(sa){switch(sa.g){case 1:c=yc;d=Ux(a.Pa,b);e=Mx(d.ea,"EXT-X-DEFINE");f=[];g=[];h=[];a.l=new el(null,0);a.l.Wc(!0);k=function(){return[a.C]};l=null;m=new Map;if(1==d.type)return a.N=!1,R=Mx(d.ea,"EXT-X-DEFINE"),m=ny(a,R,a.C),l=c.wa,S="",aa=new Map,F(sa,xy(a,a.F++,m,d,k,"",l,S,!0,"Media Playlist",null,aa,null,!1,null,!1),7);yy(a,e);n=Mx(d.ea,"EXT-X-MEDIA");q=Mx(d.ea,"EXT-X-STREAM-INF"); +r=Mx(d.ea,"EXT-X-IMAGE-STREAM-INF");u=Mx(d.ea,"EXT-X-I-FRAME-STREAM-INF");w=Mx(d.ea,"EXT-X-SESSION-KEY");v=Mx(d.ea,"EXT-X-SESSION-DATA");y=Mx(d.ea,"EXT-X-CONTENT-STEERING");zy(a,v);return F(sa,Ay(a,y),4);case 4:if(!a.g.ignoreSupplementalCodecs){z=[];A=t(q);B=A.next();for(E={};!B.done;E={Qi:void 0},B=A.next())if(H=B.value,C=Ix(H,"SUPPLEMENTAL-CODECS"))E.Qi=C.split(/\s*,\s*/).map(function(Za){return Za.split("/")[0]}),D=H.attributes.map(function(Za){return function($a){var hb=$a.name,rb=$a.value;"CODECS"== +hb&&(rb=Za.Qi.join(","),$a=$a.value.split(","),1<$a.length&&($a=uc("audio",$a))&&(rb+=","+$a));return new Lx(hb,rb)}}(E)),z.push(new Fx(H.id,H.name,D,null));q.push.apply(q,x(z));I=[];L=t(u);K=L.next();for(J={};!K.done;J={Ri:void 0},K=L.next())if(M=K.value,O=Ix(M,"SUPPLEMENTAL-CODECS"))J.Ri=O.split(/\s*,\s*/).map(function(Za){return Za.split("/")[0]}),N=M.attributes.map(function(Za){return function($a){var hb=$a.name;$a=$a.value;"CODECS"==hb&&($a=Za.Ri.join(","));return new Lx(hb,$a)}}(J)),I.push(new Fx(M.id, +M.name,N,null));u.push.apply(u,x(I))}By(a,q);Cy(a,n);P=Dy(a,u);return F(sa,Ey(a,q,w,n,k,a.A,P),5);case 5:return f=sa.h,g=Fy(a,n),F(sa,Gy(a,r,u),6);case 6:h=sa.h;sa.u(3);break;case 7:W=sa.h,a.i.set(a.C,W),W.stream&&(Fa=Rl(W.stream),W.stream.segmentIndex.Cb(function(Za){Za.Z&&(Za.Z.nd=Fa)})),l=W.stream.type,Ga=!0,a.g.disableAudio&&"audio"==W.type?Ga=!1:a.g.disableVideo&&"video"==W.type&&!W.stream.codecs.includes(",")&&(Ga=!1),Ga&&f.push({id:0,language:gf(S||"und"),disabledUntilTime:0,primary:!0,audio:"audio"== +W.type?W.stream:null,video:"video"==W.type?W.stream:null,bandwidth:W.stream.bandwidth||0,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]});case 3:if(!a.h)throw new U(2,7,7001);Hy(a,d);1==d.type&&(gy(a)&&(Iy(a,d),xa=a.o,a.B.ha(xa)),qa=Array.from(a.i.values()),Jy(a,qa),ly(a),sy(a,d.ea,l,m,k));a.m={presentationTimeline:a.l,variants:f,textStreams:g,imageStreams:h,offlineSessionIds:[],sequenceMode:a.g.hls.sequenceMode,ignoreManifestTimestampsInSegmentsMode:a.g.hls.ignoreManifestTimestampsInSegmentsMode, +type:"HLS",serviceDescription:null,nextUrl:null,periodCount:1,gapCount:0,isLowLatency:!1,startTime:a.s};if(a.$||!a.g.hls.disableCodecGuessing){sa.u(8);break}Da=[];Ja=t(a.m.variants);for(ra=Ja.next();!ra.done;ra=Ja.next())da=ra.value,da.audio&&""===da.audio.codecs&&Da.push(da.audio.createSegmentIndex()),da.video&&""===da.video.codecs&&Da.push(da.video.createSegmentIndex());return F(sa,Promise.all(Da),8);case 8:a.h.makeTextStreamsForClosedCaptions(a.m),G(sa)}})} +function Ky(a,b){var c,d,e,f,g,h,k,l,m,n,q,r,u,w,v,y,z,A;return Q(function(B){if(1==B.g){c=gm(a.g.hls.mediaPlaylistFullMimeType);if(!b.length)return B.return(c);d=Ly(a,b);e=d.segment;f=d.segmentIndex;g=e.O();h=g[0];k=new Bb(h);l=k.mb.split(".").pop();return(m=My.get(l))?B.return(gm(m)):F(B,Promise.all([Ny(a,e.Z,0),Ny(a,e,f)]),2)}n=B.h;q=n[1].mimeType;r=n[0].data;u=n[1].data;w="mp4 mp4a m4s m4i m4a m4f cmfa mp4v m4v cmfv fmp4".split(" ");v=["audio/mp4","video/mp4","video/iso.segment"];y=e.Z||v.includes(q); +if(!y&&qk(Tb(u))){var E=u,H=a.g.disableAudio,C=a.g.disableVideo,D=a.g.disableText;var I=Tb(E);var L=(new ak).parse(I),K=L.Ld();I=L.Cg();var J=[],M=!1,O=!1;if(!H)switch(K.audio){case "aac":case "aac-loas":L.rb().length&&(J.push("mp4a.40.2"),M=!0);break;case "mp3":L.rb().length&&(J.push("mp4a.40.34"),M=!0);break;case "ac3":L.rb().length&&(J.push("ac-3"),M=!0);break;case "ec3":L.rb().length&&(J.push("ec-3"),M=!0);break;case "opus":L.rb().length&&(J.push("opus"),M=!0)}if(!C)switch(K.video){case "avc":I.codec? +J.push(I.codec):J.push("avc1.42E01E");O=!0;break;case "hvc":I.codec?J.push(I.codec):J.push("hvc1.1.6.L93.90");O=!0;break;case "av1":J.push("av01.0.01M.08"),O=!0}if(J.length){H=M&&!O;C=new Map;if(O&&!D){D=new Lc("video/mp2t");D.rf(E);E=t(D.Of());for(O=E.next();!O.done;O=E.next())O=O.value,C.set(O,O);D.Bd()}I={type:H?"audio":"video",mimeType:"video/mp2t",codecs:J.join(", "),language:null,height:I.height,width:I.width,channelCount:null,sampleRate:null,closedCaptions:C,le:null,colorGamut:null,frameRate:I.frameRate}}else I= +null;if(z=I)return B.return(z)}else if(y||w.includes(l))if(A=hm(r,u,a.g.disableText))return B.return(A);return q?B.return(gm(q)):B.return(c)})} +function Ny(a,b,c){var d,e,f,g,h,k;return Q(function(l){switch(l.g){case 1:if(!b)return l.return({mimeType:null,data:null});d=Rg;e=mm(b.O(),b.wc(),b.uc(),a.g.retryParameters);f=b instanceof qj?1:0;return F(l,Oy(a,e,d,{type:f}).promise,2);case 2:g=l.h;h=g.data;if(!b.aesKey){l.u(3);break}return F(l,lm(h,b.aesKey,c),4);case 4:h=l.h;case 3:return b instanceof qj?b.ee(h,!0):b.ee(h),(k=g.headers["content-type"])&&(k=k.split(";")[0].toLowerCase()),l.return({mimeType:k,data:h})}})} +function ly(a){if(gy(a)){if(a.Ba==Py){for(var b=Infinity,c=Infinity,d=t(a.i.values()),e=d.next();!e.done;e=d.next())e=e.value,e.stream.segmentIndex&&"text"!=e.stream.type&&!e.stream.isAudioMuxedInVideo&&(b=Math.min(b,e.ic),c=Math.min(c,e.Rc));b=b-c||0;isNaN(a.g.availabilityWindowOverride)||(b=a.g.availabilityWindowOverride);a.l.Bf(b)}}else a.l.ob(Qy(a));if(!a.l.o)for(b=t(a.i.values()),c=b.next();!c.done;c=b.next())c=c.value,!c.stream.segmentIndex||"audio"!=c.type&&"video"!=c.type||(c=Qf(c.stream.segmentIndex))&& +c.h&&a.l.gh(c.h);a.l.ef()}function yy(a,b){var c=(new Bb(a.C)).g;b=t(b);for(var d=b.next();!d.done;d=b.next()){var e=d.value;d=Ix(e,"NAME");var f=Ix(e,"VALUE");e=Ix(e,"QUERYPARAM");d&&f&&(a.A.has(d)||a.A.set(d,f));e&&(d=c.get(e)[0])&&!a.A.has(d)&&a.A.set(e,d)}} +function ny(a,b,c){c=(new Bb(c)).g;var d=new Map;b=t(b);for(var e=b.next();!e.done;e=b.next()){var f=e.value,g=Ix(f,"NAME"),h=Ix(f,"VALUE");e=Ix(f,"QUERYPARAM");f=Ix(f,"IMPORT");g&&h&&(d.has(g)||d.set(g,h));e&&(g=c.get(e)[0])&&!d.has(g)&&d.set(e,g);f&&(e=a.A.get(f))&&d.set(f,e)}return d} +function By(a,b){b=t(b);for(var c=b.next();!c.done;c=b.next()){var d=c.value,e=Ix(d,"AUDIO");c=Ix(d,"VIDEO");var f=Ix(d,"SUBTITLES");d=Ry(a,d);if(f){var g=uc(wc,d);a.H.set(f,g);Uc(d,g)}e&&(f=uc("audio",d),f||(f=a.g.hls.defaultAudioCodec),a.H.set(e,f));c&&(e=uc("video",d),e||(e=a.g.hls.defaultVideoCodec),a.H.set(c,e))}} +function zy(a,b){b=t(b);for(var c=b.next();!c.done;c=b.next()){var d=c.value,e=Ix(d,"DATA-ID");c=Ix(d,"URI");var f=Ix(d,"LANGUAGE");d=Ix(d,"VALUE");e=(new Map).set("id",e);c&&e.set("uri",Qx([a.C],c,a.A)[0]);f&&e.set("language",f);d&&e.set("value",d);c=new V("sessiondata",e);if(a.h)a.h.onEvent(c)}} +function Ay(a,b){var c,d,e,f,g,h;return Q(function(k){if(!a.h||!a.g)return k.return();d=t(b);for(e=d.next();!e.done;e=d.next())if(f=e.value,g=Ix(f,"PATHWAY-ID"),h=Ix(f,"SERVER-URI"),g&&h){a.j=new tv(a.h);a.j.configure(a.g);a.j.i=[a.C];a.j.setManifestType("HLS");a.j.h=g;c=uv(a.j,h);break}return F(k,c,0)})} +function Fy(a,b){var c=Nx(b,"SUBTITLES");b=c.map(function(g){if(a.g.disableText)return null;try{return Sy(a,[g],new Map).stream}catch(h){if(a.g.hls.ignoreTextStreamFailures)return null;throw h;}});c=t(c);for(var d=c.next();!d.done;d=c.next()){var e=Jx(d.value,"GROUP-ID");if(d=a.H.get(e))if(e=a.I.get(e)){e=t(e);for(var f=e.next();!f.done;f=e.next())f=f.value,f.stream.codecs=d,f.stream.mimeType=Ty(wc,d)||Uy(wc),Vy(f.stream)}}return b.filter(function(g){return g})} +function Vy(a){var b=new Set([De(a.mimeType,a.codecs)]);a.segmentIndex&&a.segmentIndex.Cb(function(c){c.mimeType&&b.add(De(c.mimeType,a.codecs))});a.fullMimeTypes=b} +function Gy(a,b,c){var d,e;return Q(function(f){if(1==f.g)return d=b.map(function(g){var h,k,l;return Q(function(m){if(1==m.g){if(h=a.g.disableThumbnails)return m.return(null);wa(m,2);return F(m,Wy(a,g),4)}if(2!=m.g)return k=m.h,m.return(k.stream);l=Aa(m);if(a.g.hls.ignoreImageStreamFailures)return m.return(null);throw l;})}).concat(c.map(function(g){if(a.g.disableThumbnails)return null;try{var h=Xy(a,g);return"image"!==h.stream.type?null:h.stream}catch(k){if(a.g.hls.ignoreImageStreamFailures)return null; +throw k;}})),F(f,Promise.all(d),2);e=f.h;return f.return(e.filter(function(g){return g}))})}function Yy(a,b,c){b=b.filter(function(h){var k=Ix(h,"URI")||"";h=Ix(h,"TYPE");return"SUBTITLES"!=h&&(""!=k||"AUDIO"==h)});var d={};b=t(b);for(var e=b.next();!e.done;e=b.next()){e=e.value;var f=Gx(e,!a.j);d[f]?d[f].push(e):d[f]=[e]}for(var g in d)Sy(a,d[g],c,!1)}function Dy(a,b){return b.map(function(c){c=Xy(a,c);return"video"!==c.stream.type?null:c.stream}).filter(function(c){return c})} +function Ey(a,b,c,d,e,f,g){var h,k,l,m,n,q,r,u,w,v,y,z,A,B,E,H,C,D,I,L,K,J,M,O,N,P,R,S,aa,W,Fa,Ga,xa,qa,Da,Ja;return Q(function(ra){switch(ra.g){case 1:h=[];k=new Set;if(a.g.ignoreDrmInfo||!(0d-2&&(e=Math.max(1,d-2));for(e=d-e;ea.s&&(c=Math.min(-a.s,c),a.s+=c);a.l.Ii(0);a.l.fh(c);a.l.Wc(!1)} +function jz(a,b,c,d,e){var f=Ox(c,"EXT-X-MAP");if(!f)return null;var g=Jx(f,"URI"),h=Qx(d(),g,e);g=[h.toString(),Ix(f,"BYTERANGE","")].join("-");if(!a.xa.has(g)){var k=void 0,l=null,m=!1;c=t(c);for(var n=c.next();!n.done;n=c.next())n=n.value,"EXT-X-KEY"==n.name?(m=Jx(n,"METHOD"),Zy(m)&&n.idK?1:0}),c=0;cm))continue}if(null==m){var r=Ix(g,"DURATION")||Ix(g,"PLANNED-DURATION");if(r){var u= +parseFloat(r);isNaN(u)||(m=l+u);if(0>k-f+u)continue}}var w=Ix(g,"CLASS")||"com.apple.quicktime.HLS",v="YES"==Ix(g,"END-ON-NEXT");if(null==m&&v){for(var y=c+1;yk){m=Math.max(0,B-f);break}}}if(null==m)continue}y=["CLASS","START-DATE","END-DATE","DURATION","END-ON-NEXT"];for(var E=[],H=t(g.attributes),C=H.next();!C.done;C=H.next()){var D=C.value;if(!y.includes(D.name)){var I= +Sx(D.value,d);if("X-ASSET-URI"==D.name||"X-ASSET-LIST"==D.name)I=Qx(e(),D.value,d)[0];E.push({key:D.name,description:"",data:I,mimeType:null,pictureType:null})}}if(1C)if(D){D=xd(D,"t",Fd);if(null==D)break;else if(I>=D)break;C=Math.ceil((D-I)/L)-1}else{if(Infinity==z)break;else if(I/v>=z)break;C=Math.ceil((z*v-I)/L)-1}for(D=0;D<=C;++D)E=I+L,B.push({start:I/v,end:E/v,xh:I}),I=E}v=B;y=t(y);for(z=y.next();!z.done;z=y.next())(z=Bz(a,w,z.value,v,u,l))&&("audio"!=z.type||a.g.disableAudio?"video"!=z.type||a.g.disableVideo?z.type!=wc||a.g.disableText||m.push(z):n.push(z):r.push(z))}q=[];r=t(0>1,c[1]=d<<7|b<<3|a>>1,c[2]=a<<7|8,c[3]=0,b=new Uint16Array(2),b[0]=(c[0]<<8)+c[1],b[1]=(c[2]<<8)+c[3],b[0].toString(16)+b[1].toString(16);c=new Uint8Array(2);c[0]=16|d>>1;c[1]=d<<7|b<<3; +b=new Uint16Array(1);b[0]=(c[0]<<8)+c[1];return b[0].toString(16)}function Fz(a,b){var c=0;"AACH"===a&&(c=5);b?0===c&&(c=(parseInt(b.substr(0,2),16)&248)>>3):(c=2,"AACH"===a&&(c=5));return"mp4a.40."+c}function Gz(a){var b=/00000001[0-9]7/.exec(a);return b.length&&a?"avc1."+a.substr(a.indexOf(b[0])+10,6):""} +function Hz(a,b,c,d,e){var f=d.attributes.Url.replace("{bitrate}",String(c.bandwidth));d=[];e=t(e);for(var g=e.next(),h={};!g.done;h={Df:void 0},g=e.next())h.Df=g.value,d.push(new qj(h.Df.start,h.Df.end,function(k){return function(){return qc(a.l,[f.replace("{start time}",String(k.Df.xh))])}}(h),0,null,b,0,0,c.mssPrivateData.duration));return d}T("shaka.mss.MssParser",yz); +var Dz="AAC AACL AACH AACP AVC1 H264 TTML DFXP".split(" "),Cz=(new Map).set("CAPT","main").set("SUBT","alternate").set("DESC","main");si("application/vnd.ms-sstr+xml",function(){return new yz});function Iz(a,b,c,d,e,f,g){if(200<=c&&299>=c&&202!=c||304==c)return{uri:e||d,originalUri:d,data:b,status:c,headers:a,fromCache:!!a["x-shaka-from-cache"],originalRequest:f};f=null;try{f=dc(b)}catch(h){}throw new U(401==c||403==c?2:1,1,1001,d,c,f,a,g,e||d);};function Jz(){} +function Kz(a,b,c,d,e,f){var g=new Lz;Xg(b.headers).forEach(function(m,n){g.append(n,m)});var h=new Mz,k={Hh:!1,Vi:!1};a=Nz(a,b,c,{body:b.body||void 0,headers:g,method:b.method,signal:h.signal,credentials:b.allowCrossSiteCredentials?"include":void 0},k,d,e,b.streamDataCallback,f.minBytesForProgressEvents||0);a=new ug(a,function(){k.Hh=!0;h.abort();return Promise.resolve()});if(b=b.retryParameters.timeout){var l=new $e(function(){k.Vi=!0;h.abort()});l.ha(b/1E3);a.finally(function(){l.stop()})}return a} +function Nz(a,b,c,d,e,f,g,h,k){var l,m,n,q,r,u,w,v,y,z,A,B,E,H,C;return Q(function(D){switch(D.g){case 1:return l=Oz,m=Pz,q=new ArrayBuffer(0),u=r=0,w={},v=Date.now(),wa(D,2),F(D,l(a,d),4);case 4:n=D.h;w=Qz(n.headers);g(w);if("HEAD"==d.method){D.u(5);break}z=(y=n.headers.get("Content-Length"))?parseInt(y,10):0;if(!n.body)return F(D,n.arrayBuffer(),9);A=n.clone().body.getReader();B=function(I){function L(){var K,J,M,O;return Q(function(N){switch(N.g){case 1:return wa(N,2),F(N,A.read(),4);case 4:K= +N.h;za(N,3);break;case 2:return Aa(N),N.return();case 3:if(K.done){N.u(5);break}r+=K.value.byteLength;if(!h){N.u(5);break}return F(N,h(K.value),5);case 5:J=Date.now();M=r-u;if(100=k||K.done)O=K.done?0:z-r,f(J-v,M,O),u=r,v=J;K.done?I.close():(I.enqueue(K.value),L());G(N)}})}L()};new m({start:B});return F(D,n.arrayBuffer(),8);case 8:q=D.h;D.u(5);break;case 9:q=D.h,E=Date.now(),f(E-v,q.byteLength,0);case 5:b.headers.Range&&(H=b.headers.Range.replace("bytes=","").split("-").filter(function(I){return I}).map(function(I){return parseInt(I, +10)}),2==H.length&&q.byteLength!=H[1]-H[0]+1&&bb("Payload length does not match range requested bytes",b,n));za(D,3);break;case 2:C=Aa(D);if(e.Hh)throw new U(1,1,7001,a,c);if(e.Vi)throw new U(1,1,1003,a,c);throw new U(1,1,1002,a,C,c);case 3:return D.return(Iz(w,q,n.status,a,n.url,b,c))}})}function Qz(a){var b={};a.forEach(function(c,d){b[d.trim()]=c});return b} +function Rz(){if(window.ReadableStream)try{new ReadableStream({})}catch(a){return!1}else return!1;if(window.Response){if(!(new Response("")).body)return!1}else return!1;return!(!window.fetch||"polyfill"in window.fetch||!window.AbortController)}T("shaka.net.HttpFetchPlugin",Jz);Jz.isSupported=Rz;Jz.parse=Kz;var Oz=window.fetch,Mz=window.AbortController,Pz=window.ReadableStream,Lz=window.Headers;Rz()&&(Hg("http",Kz,2,!0),Hg("https",Kz,2,!0),Hg("blob",Kz,2,!0));function Sz(){} +function Tz(a,b,c,d,e,f){var g=new Uz,h=Date.now(),k=0,l=new Promise(function(m,n){g.open(b.method,a,!0);g.responseType="arraybuffer";g.timeout=b.retryParameters.timeout;g.withCredentials=b.allowCrossSiteCredentials;g.onabort=function(){n(new U(1,1,7001,a,c))};var q=!1;g.onreadystatechange=function(){if(2==g.readyState&&!q){var u=Vz(g);e(u);q=!0}};g.onload=function(u){var w=Vz(g),v=g.response;try{d(Date.now()-h,u.loaded-k,0);var y=Iz(w,v,g.status,a,g.responseURL,b,c);m(y)}catch(z){n(z)}};g.onerror= +function(u){n(new U(1,1,1002,a,u,c))};g.ontimeout=function(){n(new U(1,1,1003,a,c))};g.onprogress=function(u){var w=Date.now(),v=f.minBytesForProgressEvents||0,y=u.loaded-k;if(100=v||u.lengthComputable&&u.loaded==u.total)d(w-h,y,4==g.readyState?0:u.total-u.loaded),k=u.loaded,h=w};for(var r in b.headers)g.setRequestHeader(r.toLowerCase(),b.headers[r]);g.send(b.body)});return new ug(l,function(){g.abort();return Promise.resolve()})} +function Vz(a){var b=a.getAllResponseHeaders().trim().split("\r\n");a={};b=t(b);for(var c=b.next();!c.done;c=b.next())c=c.value.split(": "),a[c[0].toLowerCase()]=c.slice(1).join(": ");return a}T("shaka.net.HttpXHRPlugin",Sz);Sz.parse=Tz;var Uz=window.XMLHttpRequest;Hg("http",Tz,1,!0);Hg("https",Tz,1,!0);Hg("blob",Tz,1,!0);function Wz(a,b,c,d,e){this.g=a;this.i=b;this.groupId=c;this.h=d;this.j=e}function Xz(a){var b=a.Wb(!1);return b?lc(b):a.O().map(function(c){return"{"+encodeURI(c.split("#xywh=")[0])+"}"}).join("")+":"+a.startByte+":"+a.endByte}function Yz(a,b){return mm(a.g.O(),a.g.startByte,a.g.endByte,b.streaming.retryParameters)};function Zz(){this.g=this.j=this.i=0;this.h=new Map;this.l=0}function $z(a,b){a.i+=b;var c=a.l;a.l++;a.h.set(c,b);return c}Zz.prototype.close=function(a,b){if(this.h.has(a)){var c=this.h.get(a);this.h.delete(a);this.j+=c;this.g+=b}};function aA(a){return 0==a.i?0:a.j/a.i};function bA(a){var b=this;this.s=a;this.i=new Map;this.h=new Tg(function(){return cA(b).catch(function(){})});this.j=[];this.o=function(){};this.m=function(){};this.g=new Zz;this.l=!1}bA.prototype.destroy=function(){return this.h.destroy()};function dA(a,b,c){a.o=b;a.m=c}function cA(a){a.l=!0;var b=a.j.map(function(c){return c()});a.j=[];return Promise.all(b)} +bA.prototype.queue=function(a,b,c,d,e){var f=this;Ug(this.h);var g=(this.i.get(a)||Promise.resolve()).then(function(){var h,k,l,m,n,q,r;return Q(function(u){if(1==u.g)return F(u,eA(f,b),2);h=u.h;if(f.h.g)throw new U(2,9,7001);if(d)for(m in k=Tb(h),l=new mh(k),l.data)n=Number(m),q=l.data[n],r=l.g[n],f.m(q,r);f.g.close(c,h.byteLength);f.o(aA(f.g),f.g.g);return u.return(e(h))})});this.i.set(a,g);return g}; +function fA(a,b,c,d,e,f){Ug(a.h);var g=(a.i.get(b)||Promise.resolve()).then(function(){if(a.h.g)throw new U(2,9,7001);if(e){var h=Tb(c);h=new mh(h);for(var k in h.data){var l=Number(k);a.m(h.data[l],h.g[l])}}a.g.close(d,c.byteLength);a.o(aA(a.g),a.g.g);return f(c)});a.i.set(b,g)}function gA(a){return Q(function(b){return 1==b.g?F(b,Promise.all(a.i.values()),2):b.return(a.g.g)})} +function eA(a,b){var c,d,e,f;return Q(function(g){if(1==g.g)return c=Rg,d=a.s.request(c,b),e=function(){return d.abort()},a.j.push(e),F(g,d.promise,2);f=g.h;Uc(a.j,e);return g.return(f.data)})};function hA(a,b){var c=this;this.i=a;this.h=a.objectStore(b);this.g=new tg;a.onabort=function(d){d.preventDefault();c.g.reject()};a.onerror=function(d){d.preventDefault();c.g.reject()};a.oncomplete=function(){c.g.resolve()}}hA.prototype.abort=function(){var a=this;return Q(function(b){if(1==b.g){try{a.i.abort()}catch(c){}wa(b,2);return F(b,a.g,4)}if(2!=b.g)return za(b,0);Aa(b);G(b)})}; +function iA(a,b){return new Promise(function(c,d){var e=a.h.openCursor();e.onerror=d;e.onsuccess=function(){var f;return Q(function(g){if(1==g.g){if(null==e.result)return c(),g.return();f=e.result;return F(g,b(f.key,f.value,f),2)}f.continue();G(g)})}})}hA.prototype.store=function(){return this.h};hA.prototype.promise=function(){return this.g};function jA(a){this.h=a;this.g=[]}jA.prototype.destroy=function(){return Promise.all(this.g.map(function(a){return a.abort()}))};function kA(a,b){return lA(a,b,"readwrite")}function lA(a,b,c){c=a.h.transaction([b],c);var d=new hA(c,b);a.g.push(d);d.promise().then(function(){Uc(a.g,d)},function(){Uc(a.g,d)});return d};function mA(a,b,c){this.h=new jA(a);this.i=b;this.g=c}p=mA.prototype;p.destroy=function(){return this.h.destroy()};p.hasFixedKeySpace=function(){return!0};p.addSegments=function(){return nA(this.i)};p.removeSegments=function(a,b){return oA(this,this.i,a,b)};p.getSegments=function(a){var b=this,c;return Q(function(d){if(1==d.g)return F(d,pA(b,b.i,a),2);c=d.h;return d.return(c.map(function(e){return b.Jh(e)}))})};p.addManifests=function(){return nA(this.g)}; +p.updateManifest=function(){return Promise.reject(new U(2,9,9016,"Cannot modify values in "+this.g))};function qA(a,b,c){a=kA(a.h,a.g);var d=a.store();d.get(b).onsuccess=function(){d.put(c,b)};return a.promise()}p.updateManifestExpiration=function(a,b){var c=kA(this.h,this.g),d=c.store();d.get(a).onsuccess=function(e){if(e=e.target.result)e.expiration=b,d.put(e,a)};return c.promise()};p.removeManifests=function(a,b){return oA(this,this.g,a,b)}; +p.getManifests=function(a){var b=this,c;return Q(function(d){if(1==d.g)return F(d,pA(b,b.g,a),2);c=d.h;return d.return(Promise.all(c.map(function(e){return b.Gd(e)})))})};p.getAllManifests=function(){var a=this,b,c;return Q(function(d){return 1==d.g?(b=lA(a.h,a.g,"readonly"),c=new Map,F(d,iA(b,function(e,f){var g;return Q(function(h){if(1==h.g)return F(h,a.Gd(f),2);g=h.h;c.set(e,g);G(h)})}),2)):3!=d.g?F(d,b.promise(),3):d.return(c)})};p.Jh=function(a){return a};p.Gd=function(a){return Promise.resolve(a)}; +function nA(a){return Promise.reject(new U(2,9,9011,"Cannot add new value to "+a))}p.add=function(a,b){var c=this,d,e,f,g,h,k,l;return Q(function(m){if(1==m.g){d=kA(c.h,a);e=d.store();f=[];g=t(b);h=g.next();for(k={};!h.done;k={Wg:void 0},h=g.next())l=h.value,k.Wg=e.add(l),k.Wg.onsuccess=function(n){return function(){f.push(n.Wg.result)}}(k);return F(m,d.promise(),2)}return m.return(f)})}; +function oA(a,b,c,d){a=kA(a.h,b);b=a.store();c=t(c);for(var e=c.next(),f={};!e.done;f={Ig:void 0},e=c.next())f.Ig=e.value,b.delete(f.Ig).onsuccess=function(g){return function(){return d(g.Ig)}}(f);return a.promise()} +function pA(a,b,c){var d,e,f,g,h,k,l;return Q(function(m){if(1==m.g){d=lA(a.h,b,"readonly");e=d.store();f={};g=[];h=t(c);k=h.next();for(l={};!k.done;l={xf:void 0,$e:void 0},k=h.next())l.$e=k.value,l.xf=e.get(l.$e),l.xf.onsuccess=function(n){return function(){void 0==n.xf.result&&g.push(n.$e);f[n.$e]=n.xf.result}}(l);return F(m,d.promise(),2)}if(g.length)throw new U(2,9,9012,"Could not find values for "+g);return m.return(c.map(function(n){return f[n]}))})};function rA(a){this.g=new jA(a)}rA.prototype.destroy=function(){return this.g.destroy()};rA.prototype.getAll=function(){var a=this,b,c;return Q(function(d){return 1==d.g?(b=lA(a.g,"session-ids","readonly"),c=[],F(d,iA(b,function(e,f){c.push(f)}),2)):3!=d.g?F(d,b.promise(),3):d.return(c)})};rA.prototype.add=function(a){var b=kA(this.g,"session-ids"),c=b.store();a=t(a);for(var d=a.next();!d.done;d=a.next())c.add(d.value);return b.promise()}; +rA.prototype.remove=function(a){var b=this,c;return Q(function(d){return 1==d.g?(c=kA(b.g,"session-ids"),F(d,iA(c,function(e,f,g){a.includes(f.sessionId)&&g.delete()}),2)):F(d,c.promise(),0)})};function sA(){this.g=new Map}sA.prototype.destroy=function(){for(var a=[],b=t(this.g.values()),c=b.next();!c.done;c=b.next())a.push(c.value.destroy());this.g.clear();return Promise.all(a)};sA.prototype.init=function(){var a=this;tA.forEach(function(e,f){(e=e())&&a.g.set(f,e)});for(var b=[],c=t(this.g.values()),d=c.next();!d.done;d=c.next())b.push(d.value.init());return Promise.all(b)}; +function uA(a){var b=null;a.g.forEach(function(c,d){c.getCells().forEach(function(e,f){e.hasFixedKeySpace()||b||(b={path:{Pb:d,bb:f},bb:e})})});if(b)return b;throw new U(2,9,9013,"Could not find a cell that supports add-operations");}function vA(a,b){a.g.forEach(function(c,d){c.getCells().forEach(function(e,f){b({Pb:d,bb:f},e)})})} +function wA(a,b,c){a=a.g.get(b);if(!a)throw new U(2,9,9013,"Could not find mechanism with name "+b);b=a.getCells().get(c);if(!b)throw new U(2,9,9013,"Could not find cell with name "+c);return b}function xA(a,b){a.g.forEach(function(c){b(c.getEmeSessionCell())})}function yA(a){var b=Array.from(a.g.keys());if(!b.length)throw new U(2,9,9E3,"No supported storage mechanisms found");return a.g.get(b[0]).getEmeSessionCell()} +function zA(a){var b,c,d;return Q(function(e){return 1==e.g?(b=Array.from(a.g.values()),c=0b;if(!k||!l){m.u(3);break}return F(m,f.updateManifestExpiration(d.key(),b),3);case 3:return Ba(m),F(m,e.destroy(),10);case 10:Ca(m,0);break;case 2:Aa(m),m.u(3)}})}; +p.onInitialVariantChosen=function(){};p.banLocation=function(){};p.setMediaElement=function(){};si("application/x-offline-manifest",function(){return new UA});function VA(){}function WA(a,b){var c=NA(a);c&&"manifest"==c.g?(a={uri:a,originalUri:a,data:new ArrayBuffer(0),headers:{"content-type":"application/x-offline-manifest"},originalRequest:b},a=xg(a)):a=c&&"segment"==c.g?XA(c.key(),c,b):vg(new U(2,1,9004,a));return a} +function XA(a,b,c){var d=new sA;return xg(void 0).Va(function(){return d.init()}).Va(function(){return wA(d,b.Pb(),b.bb())}).Va(function(e){return e.getSegments([b.key()])}).Va(function(e){return{uri:b,data:e[0].data,headers:{},originalRequest:c}}).finally(function(){return d.destroy()})}T("shaka.offline.OfflineScheme",VA);VA.plugin=WA;Hg("offline",WA);function YA(a,b,c){var d,e,f,g,h,k;return Q(function(l){switch(l.g){case 1:d=[];for(var m=[],n=t(c),q=n.next();!q.done;q=n.next()){q=q.value;for(var r=!1,u=t(m),w=u.next();!w.done;w=u.next())if(w=w.value,ZA(w.info,q)){w.sessionIds.push(q.sessionId);r=!0;break}r||m.push({info:q,sessionIds:[q.sessionId]})}e=t(m);f=e.next();case 2:if(f.done){l.u(4);break}g=f.value;h=$A(a,b,g);return F(l,h,5);case 5:k=l.h;d=d.concat(k);f=e.next();l.u(2);break;case 4:return l.return(d)}})} +function $A(a,b,c){var d,e;return Q(function(f){switch(f.g){case 1:return d=new oh({lc:b,onError:function(){},nf:function(){},onExpirationUpdated:function(){},onEvent:function(){}}),wa(f,2),d.configure(a),F(f,zh(d,c.info.keySystem,c.info.licenseUri,c.info.serverCertificate,c.info.audioCapabilities,c.info.videoCapabilities),4);case 4:za(f,3);break;case 2:return Aa(f),F(f,d.destroy(),5);case 5:return f.return([]);case 3:return e=[],F(f,Promise.all(c.sessionIds.map(function(g){return Q(function(h){if(1== +h.g)return wa(h,2),F(h,Lh(d,g),4);if(2!=h.g)return e.push(g),za(h,0);Aa(h);G(h)})})),6);case 6:return F(f,d.destroy(),7);case 7:return f.return(e)}})}function ZA(a,b){function c(d,e){return d.robustness==e.robustness&&d.contentType==e.contentType}return a.keySystem==b.keySystem&&a.licenseUri==b.licenseUri&&Vc(a.audioCapabilities,b.audioCapabilities,c)&&Vc(a.videoCapabilities,b.videoCapabilities,c)};function aB(a,b,c){var d=b.presentationTimeline.getDuration();b=bB(b);return{offlineUri:null,originalManifestUri:a,duration:d,size:0,expiration:Infinity,tracks:b,appMetadata:c,isIncomplete:!1}}function cB(a,b){var c=PA(new OA(a.Pb(),a.bb()),b),d=b.appMetadata||{};c=bB(c);return{offlineUri:a.toString(),originalManifestUri:b.originalManifestUri,duration:b.duration,size:b.size,expiration:b.expiration,tracks:c,appMetadata:d,isIncomplete:b.isIncomplete||!1}} +function bB(a){var b=[],c=$f(a.variants);c=t(c);for(var d=c.next();!d.done;d=c.next())b.push(Lf(d.value));a=t(a.textStreams);for(c=a.next();!c.done;c=a.next())b.push(Of(c.value));return b};function dB(){this.g=new Map}function eB(a,b){var c=b.audio,d=b.video;c&&!d&&a.g.set(c.id,c.bandwidth||b.bandwidth);!c&&d&&a.g.set(d.id,d.bandwidth||b.bandwidth);if(c&&d){var e=c.bandwidth||393216,f=d.bandwidth||b.bandwidth-e;0>=f&&(f=b.bandwidth);a.g.set(c.id,e);a.g.set(d.id,f)}}function fB(a,b){a.g.set(b.id,b.bandwidth||2048)}function gB(a,b){a=a.g.get(b);null==a&&(a=0);return a};function hB(a){var b=this;if(a&&a.constructor!=Y)throw new U(2,9,9008);this.g=this.h=null;a?(this.h=a.g,this.g=a.Nb()):(this.h=wn(),this.g=new Gg,this.g.configure(this.h.networking));this.i=[];this.l=[];var c=!a;this.j=new Tg(function(){var d,e,f,g,h;return Q(function(k){switch(k.g){case 1:return F(k,Promise.all(b.l.map(function(l){return cA(l)})),2);case 2:d=function(){};e=[];f=t(b.i);for(g=f.next();!g.done;g=f.next())h=g.value,e.push(h.then(d,d));return F(k,Promise.all(e),3);case 3:if(!c){k.u(4); +break}return F(k,b.g.destroy(),4);case 4:b.h=null,b.g=null,G(k)}})});this.m=1E9}function iB(){if(vi(qb()))a:{var a=t(tA.values());for(var b=a.next();!b.done;b=a.next())if(b=b.value,b=b()){b.destroy();a=!0;break a}a=!1}else a=!1;return a}p=hB.prototype;p.destroy=function(){return this.j.destroy()};p.configure=function(a,b){2==arguments.length&&"string"==typeof a&&(a=bn(a,b));return Bn(this.h,a)};p.getConfiguration=function(){var a=wn();Bn(a,this.h,wn());return a};p.Nb=function(){return this.g}; +p.store=function(a,b,c,d,e){var f=this,g=this.getConfiguration(),h=new bA(this.g);this.l.push(h);b=jB(this,a,b||{},d||[],e||[],function(){var k;return Q(function(l){if(1==l.g)return c?l.u(2):F(l,vo(a,f.g,g.manifest.retryParameters),3);2!=l.g&&(c=l.h);k=xi(a,c||null);return l.return(k())})},g,h);b=new ug(b,function(){return cA(h)});b.finally(function(){Uc(f.l,h)});return kB(this,b)}; +function jB(a,b,c,d,e,f,g,h){var k,l,m,n,q,r,u,w,v,y,z,A,B,E,H,C,D,I,L,K,J,M,O,N;return Q(function(P){switch(P.g){case 1:return lB(),l=k=null,m=new sA,r=q=n=null,wa(P,2,3),F(P,f(),5);case 5:return k=P.h,F(P,mB(a,b,k,g),6);case 6:u=P.h;nB(a);w=!u.presentationTimeline.V()&&!u.presentationTimeline.Oc();if(!w)throw new U(2,9,9005,b);v=t(d);y=v.next();case 7:if(y.done){P.u(9);break}z=y.value;return F(P,oB(a,z,u),10);case 10:A=P.h;u.imageStreams.push(A);nB(a);y=v.next();P.u(7);break;case 9:B=t(e),E=B.next(); +case 11:if(E.done)return Bh(g.drm.clearKeys,u.variants),D=u.variants.some(function(R){if(R.audio)for(var S=t(R.audio.drmInfos),aa=S.next();!aa.done;aa=S.next())if(aa.value.licenseServerUri.startsWith("data:"))return!0;if(R.video)for(R=t(R.video.drmInfos),S=R.next();!S.done;S=R.next())if(S.value.licenseServerUri.startsWith("data:"))return!0;return!1}),I=g.offline.usePersistentLicense,D&&(I=!1),F(P,a.dd(u,function(R){r=r||R},g,I),15);H=E.value;return F(P,pB(a,u,H.uri,H.language,H.kind,H.mime,H.codecs), +14);case 14:C=P.h;u.textStreams.push(C);nB(a);E=B.next();P.u(11);break;case 15:l=P.h;nB(a);if(r)throw r;return F(P,qB(u,l,g,I),16);case 16:return F(P,m.init(),17);case 17:return nB(a),F(P,uA(m),18);case 18:return n=P.h,nB(a),L=rB(l,u,b,c,g,h,I),K=L.ik,J=L.sh,F(P,n.bb.addManifests([K]),19);case 19:M=P.h;nB(a);q=M[0];nB(a);if(r)throw r;return F(P,sB(a,J,q,K,h,g,n.bb,u,l,I),20);case 20:return nB(a),tB(u,K,l,I),F(P,n.bb.updateManifest(q,K),21);case 21:return nB(a),O=new MA("manifest",n.path.Pb,n.path.bb, +q),P.return(cB(O,K));case 3:return Ba(P),F(P,m.destroy(),22);case 22:if(!k){P.u(23);break}return F(P,k.stop(),23);case 23:if(!l){P.u(25);break}return F(P,l.destroy(),25);case 25:Ca(P,0);break;case 2:N=Aa(P);if(null==q){P.u(27);break}return F(P,uB(q),27);case 27:throw r||N;}})} +function sB(a,b,c,d,e,f,g,h,k,l){var m,n,q,r,u,w,v,y,z,A,B;return Q(function(E){switch(E.g){case 1:m={};n=0;q=function(){if(a.j.g||e.l)throw new U(2,9,7001);};r=function(H,C){var D,I,L,K,J,M,O,N,P;return Q(function(R){if(1==R.g){D=t(H);I=D.next();for(L={};!I.done;L={fc:void 0},I=D.next())L.fc=I.value,q(),K=Yz(L.fc,f),J=L.fc.i,M=L.fc.h,O=function(S){return function(aa){var W,Fa,Ga,xa;return Q(function(qa){switch(qa.g){case 1:W=S.fc.g;Fa=W.Wb(!1);if(!W.aesKey||Fa){qa.u(2);break}return F(qa,lm(aa,W.aesKey, +S.fc.j),3);case 3:aa=qa.h;case 2:return Ga=Xz(W),F(qa,g.addSegments([{data:aa}]),4);case 4:xa=qa.h,q(),m[Ga]=xa[0],n+=aa.byteLength,G(qa)}})}}(L),N=L.fc.g,(P=N.Wb(!1))?fA(e,L.fc.groupId,P,J,M,O):e.queue(L.fc.groupId,K,J,M,O);return F(R,gA(e),2)}q();if(!C||e.l)return R.u(0);tB(h,d,k,l);return F(R,g.updateManifest(c,d),0)})};u=!1;wa(E,2);if(!vB(h)||!u||wB(h)){E.u(4);break}return F(E,r(b.filter(function(H){return H.h}),!0),5);case 5:return q(),b=b.filter(function(H){return!H.h}),w=m,v=n,m={},n=0,F(E, +xB(g,c,d,w,v,function(){return nB(a)}),6);case 6:q();case 4:if(u){E.u(7);break}return F(E,r(b,!1),8);case 8:return q(),y=m,z=n,m={},n=0,F(E,xB(g,c,d,y,z,function(){return q()}),9);case 9:q();case 7:za(E,0);break;case 2:return A=Aa(E),B=Object.values(m),F(E,g.removeSegments(B,function(){}),10);case 10:throw A;}})} +function uB(a){var b,c,d,e;return Q(function(f){switch(f.g){case 1:return b=new sA,F(f,b.init(),2);case 2:return F(f,uA(b),3);case 3:return c=f.h,d=new MA("manifest",c.path.Pb,c.path.bb,a),F(f,b.destroy(),4);case 4:return e=new hB,F(f,e.remove(d.toString()),0)}})} +function xB(a,b,c,d,e,f){var g,h,k,l,m,n,q,r,u,w,v;return Q(function(y){switch(y.g){case 1:g=!1;wa(y,2);h=!0;k=t(c.streams);for(l=k.next();!l.done;l=k.next())for(m=l.value,n=t(m.segments),q=n.next();!q.done;q=n.next())r=q.value,u=r.pendingSegmentRefId?d[r.pendingSegmentRefId]:null,null!=u&&(r.dataKey=u,r.pendingSegmentRefId=void 0),u=r.pendingInitSegmentRefId?d[r.pendingInitSegmentRefId]:null,null!=u&&(r.initSegmentKey=u,r.pendingInitSegmentRefId=void 0),r.pendingSegmentRefId&&(h=!1),r.pendingInitSegmentRefId&& +(h=!1);c.size+=e;h&&(c.isIncomplete=!1);return F(y,a.updateManifest(b,c),4);case 4:g=!0;f();za(y,0);break;case 2:return w=Aa(y),F(y,uB(b),5);case 5:if(g){y.u(6);break}v=Object.values(d);return F(y,a.removeSegments(v,function(){}),6);case 6:throw w;}})} +function qB(a,b,c,d){var e,f,g,h,k,l,m,n,q,r,u,w,v,y,z,A,B,E,H,C,D,I,L,K,J,M,O,N,P,R;return Q(function(S){switch(S.g){case 1:return e={width:Infinity,height:Infinity},sf(a,c.restrictions,e),F(S,vf(b,a,d,c.drm.preferredKeySystems,c.drm.keySystemsMapping),2);case 2:f=[];g=c.preferredDecodingAttributes;h=c.preferredVideoCodecs;k=c.preferredAudioCodecs;l=c.preferredTextFormats;qf(a,h,k,g,l);m=t(a.variants);for(n=m.next();!n.done;n=m.next())q=n.value,f.push(Lf(q));r=t(a.textStreams);for(u=r.next();!u.done;u= +r.next())w=u.value,f.push(Of(w));v=t(a.imageStreams);for(y=v.next();!y.done;y=v.next())z=y.value,f.push(Pf(z));return F(S,c.offline.trackSelectionCallback(f),3);case 3:A=S.h;B=a.presentationTimeline.getDuration();E=0;H=t(A);for(C=H.next();!C.done;C=H.next())D=C.value,I=D.bandwidth*B/8,E+=I;wa(S,4);return F(S,c.offline.downloadSizeCallback(E),6);case 6:L=S.h;if(!L)throw new U(2,9,9014);za(S,5);break;case 4:K=Aa(S);if(K instanceof U)throw K;throw new U(2,9,9015);case 5:J=new Set;M=new Set;O=new Set; +N=t(A);for(P=N.next();!P.done;P=N.next())R=P.value,"variant"==R.type&&J.add(R.id),"text"==R.type&&M.add(R.id),"image"==R.type&&O.add(R.id);a.variants=a.variants.filter(function(aa){return J.has(aa.id)});a.textStreams=a.textStreams.filter(function(aa){return M.has(aa.id)});a.imageStreams=a.imageStreams.filter(function(aa){return O.has(aa.id)});yB(a);G(S)}})} +function rB(a,b,c,d,e,f,g){var h=aB(c,b,d),k=e.offline.progressCallback;dA(f,function(u,w){h.size=w;k(h,u)},function(u,w){l&&g&&m==w&&Hh(a,"cenc",u)});var l=vB(b)&&!wB(b),m=null;l&&(m=zB.get(a.h.keySystem));for(var n=new dB,q=t(b.textStreams),r=q.next();!r.done;r=q.next())n.g.set(r.value.id,52);q=t(b.imageStreams);for(r=q.next();!r.done;r=q.next())fB(n,r.value);q=t(b.variants);for(r=q.next();!r.done;r=q.next())eB(n,r.value);f=AB(f,n,b,e);e=f.streams;f=f.sh;(n=a.h)&&g&&(n.initData=[]);return{ik:{creationTime:Date.now(), +originalManifestUri:c,duration:b.presentationTimeline.getDuration(),size:0,expiration:a.Md(),streams:e,sessionIds:g?Qh(a):[],drmInfo:n,appMetadata:d,isIncomplete:!0,sequenceMode:b.sequenceMode,type:b.type},sh:f}}function vB(a){return a.variants.some(function(b){var c=b.audio&&b.audio.encrypted;return b.video&&b.video.encrypted||c})} +function wB(a){return a.variants.some(function(b){return(b.video?b.video.drmInfos:[]).concat(b.audio?b.audio.drmInfos:[]).some(function(c){return c.initData&&c.initData.length})})}function tB(a,b,c,d){b.expiration=c.Md();c=Qh(c);b.sessionIds=d?c:[];if(vB(a)&&d&&!c.length)throw new U(2,9,9007);}p.remove=function(a){return BB(this,CB(this,a))}; +function CB(a,b){var c,d,e,f,g,h;return Q(function(k){switch(k.g){case 1:lB();c=NA(b);if(null==c||"manifest"!=c.g)throw new U(2,9,9004,b);d=c;e=new sA;ya(k,2);return F(k,e.init(),4);case 4:return F(k,wA(e,d.Pb(),d.bb()),5);case 5:return f=k.h,F(k,f.getManifests([d.key()]),6);case 6:return g=k.h,h=g[0],F(k,Promise.all([DB(a,h,e),EB(f,d,h)]),2);case 2:return Ba(k),F(k,e.destroy(),8);case 8:Ca(k,0)}})} +function FB(a,b){for(var c=[],d=t(a.streams),e=d.next();!e.done;e=d.next())e=e.value,b&&"video"==e.type?c.push({contentType:De(e.mimeType,e.codecs),robustness:a.drmInfo.videoRobustness}):b||"audio"!=e.type||c.push({contentType:De(e.mimeType,e.codecs),robustness:a.drmInfo.audioRobustness});return c}function DB(a,b,c){return Q(function(d){return F(d,GB(a.g,a.h.drm,c,b),0)})} +function EB(a,b,c){function d(){}var e=HB(c);cB(b,c);return Promise.all([a.removeSegments(e,d),a.removeManifests([b.key()],d)])}p.Fk=function(){return BB(this,IB(this))}; +function IB(a){var b,c,d,e,f,g,h,k,l,m;return Q(function(n){switch(n.g){case 1:return lB(),b=a.g,c=a.h.drm,d=new sA,e=!1,ya(n,2),F(n,d.init(),4);case 4:f=[],xA(d,function(q){return f.push(q)}),g=t(f),h=g.next();case 5:if(h.done){n.u(2);break}k=h.value;return F(n,k.getAll(),8);case 8:return l=n.h,F(n,YA(c,b,l),9);case 9:return m=n.h,F(n,k.remove(m),10);case 10:m.length!=l.length&&(e=!0);h=g.next();n.u(5);break;case 2:return Ba(n),F(n,d.destroy(),11);case 11:Ca(n,3);break;case 3:return n.return(!e)}})} +p.list=function(){return BB(this,JB())};function JB(){var a,b,c;return Q(function(d){switch(d.g){case 1:return lB(),a=[],b=new sA,ya(d,2),F(d,b.init(),4);case 4:return c=Promise.resolve(),vA(b,function(e,f){c=c.then(function(){var g;return Q(function(h){if(1==h.g)return F(h,f.getAllManifests(),2);g=h.h;g.forEach(function(k,l){k=cB(new MA("manifest",e.Pb,e.bb,l),k);a.push(k)});G(h)})})}),F(d,c,2);case 2:return Ba(d),F(d,b.destroy(),6);case 6:Ca(d,3);break;case 3:return d.return(a)}})} +function mB(a,b,c,d){var e,f,g,h,k;return Q(function(l){if(1==l.g)return e=null,f=a.g,g={networkingEngine:f,filter:function(){return Promise.resolve()},makeTextStreamsForClosedCaptions:function(){},onTimelineRegionAdded:function(){},onEvent:function(){},onError:function(m){e=m},isLowLatencyMode:function(){return!1},updateDuration:function(){},newDrmInfo:function(){},onManifestUpdated:function(){},getBandwidthEstimate:function(){return d.abr.defaultBandwidthEstimate},onMetadata:function(){},disableStream:function(){}, +addFont:function(){}},c.configure(d.manifest),nB(a),F(l,c.start(b,g),2);if(3!=l.g)return h=l.h,nB(a),k=KB(h),F(l,Promise.all(Vg(k,function(m){return m.createSegmentIndex()})),3);nB(a);if(e)throw e;return l.return(h)})} +function oB(a,b,c){var d,e,f,g,h,k,l,m,n,q,r,u,w,v,y;return Q(function(z){switch(z.g){case 1:return F(z,LB(a,b),2);case 2:d=z.h;if("text/vtt"!=d)throw new U(1,2,2017,b);return F(z,MB(b,a.g,a.h.streaming.retryParameters),3);case 3:e=z.h;f=Se(d);if(!f)throw new U(2,2,2014,d);g=f();h={periodStart:0,segmentStart:0,segmentEnd:c.presentationTimeline.getDuration(),vttOffset:0};k=Tb(e);l=g.parseMedia(k,h,b,[]);m=[];n=t(l);q=n.next();for(r={};!q.done;r={Jf:void 0,fd:void 0},q=n.next())r.fd=q.value,r.Jf=null, +u=function(A){return function(){null==A.Jf&&(A.Jf=qc([b],[A.fd.payload]));return A.Jf||[]}}(r),w=new qj(r.fd.startTime,r.fd.endTime,u,0,null,null,0,0,Infinity),r.fd.payload.includes("#xywh")&&(v=r.fd.payload.split("#xywh=")[1].split(","),4===v.length&&w.Cf({height:parseInt(v[3],10),positionX:parseInt(v[0],10),positionY:parseInt(v[1],10),width:parseInt(v[2],10)})),m.push(w);y=d;if(!m.length){z.u(4);break}return F(z,vo(m[0].O()[0],a.g,a.h.manifest.retryParameters),5);case 5:y=z.h;case 4:return z.return({id:a.m++, +originalId:null,groupId:null,createSegmentIndex:function(){return Promise.resolve()},segmentIndex:new Cl(m),mimeType:y||"",codecs:"",kind:"",encrypted:!1,drmInfos:[],keyIds:new Set,language:"und",originalLanguage:null,label:null,type:"image",primary:!1,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:null,roles:[],forced:!1,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,closedCaptions:null,tilesLayout:"1x1",accessibilityPurpose:null,external:!0,fastSwitching:!1,fullMimeTypes:new Set([De(y|| +"","")]),isAudioMuxedInVideo:!1,baseOriginalId:null})}})} +function pB(a,b,c,d,e,f,g){var h,k,l;return Q(function(m){if(1==m.g)return f?m.u(2):F(m,LB(a,c),3);2!=m.g&&(f=m.h);h={id:a.m++,originalId:null,groupId:null,createSegmentIndex:function(){return Promise.resolve()},segmentIndex:El(0,b.presentationTimeline.getDuration(),[c]),mimeType:f||"",codecs:g||"",kind:e,encrypted:!1,drmInfos:[],keyIds:new Set,language:d,originalLanguage:d,label:null,type:wc,primary:!1,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:null,roles:[],forced:!1,channelsCount:null, +audioSamplingRate:null,spatialAudio:!1,closedCaptions:null,accessibilityPurpose:null,external:!0,fastSwitching:!1,fullMimeTypes:new Set([De(f||"",g||"")]),isAudioMuxedInVideo:!1,baseOriginalId:null};k=De(h.mimeType,h.codecs);l=Te(k);if(!l)throw new U(2,2,2014,f);return m.return(h)})} +function LB(a,b){var c;return Q(function(d){switch(d.g){case 1:return wa(d,2),F(d,vo(b,a.g,a.h.streaming.retryParameters),4);case 4:c=d.h;za(d,3);break;case 2:Aa(d);case 3:if(c)return d.return(c);throw new U(1,2,2011,b);}})}function MB(a,b,c){var d,e,f;return Q(function(g){if(1==g.g)return d=Rg,e=Lg([a],c),e.method="GET",F(g,b.request(d,e).promise,2);f=g.h;return g.return(f.data)})} +p.dd=function(a,b,c,d){var e=this,f;return Q(function(g){return 1==g.g?(f=new oh({lc:e.g,onError:b,nf:function(){},onExpirationUpdated:function(){},onEvent:function(){}}),f.configure(c.drm),F(g,wh(f,a.variants,d),2)):3!=g.g?F(g,Jh(f),3):g.return(f)})}; +function AB(a,b,c,d){var e=new Map,f=KB(c),g=new Map;f=t(f);for(var h=f.next();!h.done;h=f.next()){h=h.value;var k=NB(a,b,c,h,d,e);g.set(h.id,k)}a=t(c.variants);for(b=a.next();!b.done;b=a.next())b=b.value,b.audio&&g.get(b.audio.id).variantIds.push(b.id),b.video&&g.get(b.video.id).variantIds.push(b.id);return{streams:Array.from(g.values()),sh:Array.from(e.values())}} +function NB(a,b,c,d,e,f){var g={id:d.id,originalId:d.originalId,groupId:d.groupId,primary:d.primary,type:d.type,mimeType:d.mimeType,codecs:d.codecs,frameRate:d.frameRate,pixelAspectRatio:d.pixelAspectRatio,hdr:d.hdr,colorGamut:d.colorGamut,videoLayout:d.videoLayout,kind:d.kind,language:d.language,originalLanguage:d.originalLanguage,label:d.label,width:d.width||null,height:d.height||null,encrypted:d.encrypted,keyIds:d.keyIds,segments:[],variantIds:[],roles:d.roles,forced:d.forced,channelsCount:d.channelsCount, +audioSamplingRate:d.audioSamplingRate,spatialAudio:d.spatialAudio,closedCaptions:d.closedCaptions,tilesLayout:d.tilesLayout,mssPrivateData:d.mssPrivateData,external:d.external,fastSwitching:d.fastSwitching,isAudioMuxedInVideo:d.isAudioMuxedInVideo},h=e.offline.numberOfParallelDownloads,k=0===h?d.id:0;OB(d,c.presentationTimeline.Eb(),function(l,m){var n=Xz(l),q=void 0;if(!f.has(n)){var r=l.endTime-l.startTime;r=gB(b,d.id)*r;r=$z(a.g,r);f.set(n,new Wz(l,r,k,!1,m))}l.Z&&(q=Xz(l.Z),f.has(q)||(r=.5*gB(b, +d.id),r=$z(a.g,r),f.set(q,new Wz(l.Z,r,k,!0,m))));g.segments.push({pendingInitSegmentRefId:q,initSegmentKey:q?0:null,startTime:l.startTime,endTime:l.endTime,appendWindowStart:l.appendWindowStart,appendWindowEnd:l.appendWindowEnd,timestampOffset:l.timestampOffset,tilesLayout:l.tilesLayout,pendingSegmentRefId:n,dataKey:0,mimeType:l.mimeType,codecs:l.codecs,thumbnailSprite:l.thumbnailSprite});0!==h&&(k=(k+1)%h)});return g} +function OB(a,b,c){b=a.segmentIndex.find(b);if(null!=b)for(var d=a.segmentIndex.get(b);d;)c(d,b),d=a.segmentIndex.get(++b)}function nB(a){if(a.j.g)throw new U(2,9,7001);}function lB(){if(!iB())throw new U(2,9,9E3);}function BB(a,b){return Q(function(c){if(1==c.g)return a.i.push(b),ya(c,2),F(c,b,4);if(2!=c.g)return c.return(c.h);Ba(c);Uc(a.i,b);return Ca(c,0)})}function kB(a,b){var c=b.promise;a.i.push(c);return b.finally(function(){Uc(a.i,c)})} +function HB(a){var b=new Set;a=t(a.streams);for(var c=a.next();!c.done;c=a.next()){c=t(c.value.segments);for(var d=c.next();!d.done;d=c.next())d=d.value,null!=d.initSegmentKey&&b.add(d.initSegmentKey),b.add(d.dataKey)}return Array.from(b)} +function GB(a,b,c,d){var e,f,g;return Q(function(h){if(1==h.g){if(!d.drmInfo)return h.return();e=yA(c);f=d.sessionIds.map(function(k){return{sessionId:k,keySystem:d.drmInfo.keySystem,licenseUri:d.drmInfo.licenseServerUri,serverCertificate:d.drmInfo.serverCertificate,audioCapabilities:FB(d,!1),videoCapabilities:FB(d,!0)}});return F(h,YA(b,a,f),2)}return 3!=h.g?(g=h.h,F(h,e.remove(g),3)):F(h,e.add(f.filter(function(k){return!g.includes(k.sessionId)})),0)})} +function KB(a){for(var b=new Set,c=t(a.variants),d=c.next();!d.done;d=c.next())d=d.value,d.audio&&b.add(d.audio),d.video&&b.add(d.video);c=t(a.textStreams);for(d=c.next();!d.done;d=c.next())b.add(d.value);a=t(a.imageStreams);for(c=a.next();!c.done;c=a.next())b.add(c.value);return b} +function yB(a){a.variants.map(function(f){return f.video});var b=new Set(a.variants.map(function(f){return f.audio}));a=a.textStreams;for(var c=t(b),d=c.next();!d.done;d=c.next()){d=t(b);for(var e=d.next();!e.done;e=d.next());}b=t(a);for(c=b.next();!c.done;c=b.next())for(c=t(a),d=c.next();!d.done;d=c.next());}T("shaka.offline.Storage",hB);hB.deleteAll=function(){var a;return Q(function(b){return 1==b.g?(a=new sA,ya(b,2),F(b,zA(a),2)):5!=b.g?(Ba(b),F(b,a.destroy(),5)):Ca(b,0)})}; +hB.prototype.list=hB.prototype.list;hB.prototype.removeEmeSessions=hB.prototype.Fk;hB.prototype.remove=hB.prototype.remove;hB.prototype.store=hB.prototype.store;hB.prototype.getNetworkingEngine=hB.prototype.Nb;hB.prototype.getConfiguration=hB.prototype.getConfiguration;hB.prototype.configure=hB.prototype.configure;hB.prototype.destroy=hB.prototype.destroy;hB.support=iB; +var zB=(new Map).set("org.w3.clearkey","1077efecc0b24d02ace33c1e52e2fb4b").set("com.widevine.alpha","edef8ba979d64acea3c827dcd51d21ed").set("com.microsoft.playready","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.recommendation","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.software","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.hardware","9a04f07998404286ab92e65be0885f95").set("com.huawei.wiseplay","3d5e6d359b9a41e8b843dd3c6e72c42c"); +Up("offline",iB);function PB(){}function QB(a,b){a={priority:b||0,callback:a};for(b=0;b=b?(jC(),kC()):15>=b&&jC());a=t(a.ti());for(b=a.next();!b.done;b=a.next())lC(b.value);(window.MediaSource||window.ManagedMediaSource)&&mC();window.MediaSource&&MediaSource.isTypeSupported('video/webm; codecs="vp9"')&&!MediaSource.isTypeSupported('video/webm; codecs="vp09.00.10.08"')&&nC()} +function jC(){var a=MediaSource.prototype.addSourceBuffer;MediaSource.prototype.addSourceBuffer=function(){var b=a.apply(this,Oa.apply(0,arguments));b.abort=function(){};return b}}function kC(){var a=SourceBuffer.prototype.remove;SourceBuffer.prototype.remove=function(b,c){return a.call(this,b,c-.001)}} +function mC(){if(window.MediaSource){var a=MediaSource.isTypeSupported.bind(MediaSource);MediaSource.isTypeSupported=function(c){return"mp2t"!=He(c)&&a(c)}}if(window.ManagedMediaSource){var b=ManagedMediaSource.isTypeSupported.bind(ManagedMediaSource);window.ManagedMediaSource.isTypeSupported=function(c){return"mp2t"!=He(c)&&b(c)}}} +function lC(a){var b=MediaSource.isTypeSupported.bind(MediaSource);MediaSource.isTypeSupported=function(d){return Ke(d)!=a&&b(d)};if(window.ManagedMediaSource){var c=ManagedMediaSource.isTypeSupported.bind(ManagedMediaSource);window.ManagedMediaSource.isTypeSupported=function(d){return Ke(d)!=a&&c(d)}}} +function nC(){var a=MediaSource.isTypeSupported;qb().Si()&&(MediaSource.isTypeSupported=function(b){var c=b.split(/ *; */),d=c.findIndex(function(g){return g.startsWith("codecs=")});if(0>d)return a(b);var e=c[d].replace("codecs=","").replace(/"/g,"").split(/\s*,\s*/),f=e.findIndex(function(g){return g.startsWith("vp09")});0<=f&&(e[f]="vp9",c[d]='codecs="'+e.join(",")+'"',b=c.join("; "));return a(b)})}PB.MediaSource=hC;hC.install=iC;QB(iC);function oC(){}function pC(){screen.orientation&&screen.orientation.unlock||(void 0!=screen.orientation?qC():void 0!=window.orientation&&rC())}function qC(){void 0===screen.orientation.lock&&(screen.orientation.lock=function(){return Promise.resolve()});void 0===screen.orientation.unlock&&(screen.orientation.unlock=function(){})} +function rC(){function a(){switch(window.orientation){case -90:b.type="landscape-secondary";b.angle=270;break;case 0:b.type="portrait-primary";b.angle=0;break;case 90:b.type="landscape-primary";b.angle=90;break;case 180:b.type="portrait-secondary",b.angle=180}}var b=new sC;screen.orientation=b;a();window.addEventListener("orientationchange",function(){a();var c=new V("change");b.dispatchEvent(c)})}PB.Orientation=oC;oC.install=pC;function sC(){Dg.call(this);this.type="";this.angle=0}pa(sC,Dg); +sC.prototype.lock=function(a){function b(d){return screen.lockOrientation?screen.lockOrientation(d):screen.mozLockOrientation?screen.mozLockOrientation(d):screen.msLockOrientation?screen.msLockOrientation(d):!1}var c=!1;switch(a){case "natural":c=b("default");break;case "any":c=!0;this.unlock();break;default:c=b(a)}if(c)return Promise.resolve();a=Error("screen.orientation.lock() is not available on this device");a.name="NotSupportedError";a.code=DOMException.NOT_SUPPORTED_ERR;return Promise.reject(a)}; +sC.prototype.unlock=function(){screen.unlockOrientation?screen.unlockOrientation():screen.mozUnlockOrientation?screen.mozUnlockOrientation():screen.msUnlockOrientation&&screen.msUnlockOrientation()};QB(pC);function tC(){}var uC,vC,wC,xC,yC,zC; +function AC(a){if(window.HTMLVideoElement&&window.WebKitMediaKeys&&window.shakaMediaKeysPolyfill!=BC){if(void 0===a?0:a)uC=!0,vC=Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype,"mediaKeys"),wC=HTMLMediaElement.prototype.setMediaKeys,xC=window.MediaKeys,yC=window.MediaKeySystemAccess,zC=navigator.requestMediaKeySystemAccess;delete HTMLMediaElement.prototype.mediaKeys;HTMLMediaElement.prototype.mediaKeys=null;HTMLMediaElement.prototype.setMediaKeys=CC;window.MediaKeys=DC;window.MediaKeySystemAccess= +EC;navigator.requestMediaKeySystemAccess=FC;window.shakaMediaKeysPolyfill=BC;Df.clear();pg.clear()}}function FC(a,b){try{var c=new EC(a,b);return Promise.resolve(c)}catch(d){return Promise.reject(d)}}function CC(a){var b=this.mediaKeys;b&&b!=a&&GC(b,null);delete this.mediaKeys;return(this.mediaKeys=a)?GC(a,this):Promise.resolve()} +function HC(a){a=Tb(a.initData);if(Yb(a).getUint32(0,!0)+4!=a.byteLength)throw new RangeError("Malformed FairPlay init data");a=bc(a.subarray(4),!0);a=ec(a);var b=new Event("encrypted");b.initDataType="skd";b.initData=Ub(a);this.dispatchEvent(b)}PB.PatchedMediaKeysApple=tC; +tC.uninstall=function(){window.shakaMediaKeysPolyfill==BC&&uC&&(uC=!1,Object.defineProperty(HTMLMediaElement.prototype,"mediaKeys",vC),HTMLMediaElement.prototype.setMediaKeys=wC,window.MediaKeys=xC,window.MediaKeySystemAccess=yC,navigator.requestMediaKeySystemAccess=zC,vC=zC=wC=yC=xC=null,window.shakaMediaKeysPolyfill="",Df.clear(),pg.clear())};tC.install=AC; +function EC(a,b){this.keySystem=a;if(a.startsWith("com.apple.fps"))for(a=t(b),b=a.next();!b.done;b=a.next()){var c=b.value;if("required"==c.persistentState)b=null;else{b={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:c.initDataTypes,sessionTypes:["temporary"],label:c.label};var d=!1,e=!1;if(c.audioCapabilities)for(var f=t(c.audioCapabilities),g=f.next();!g.done;g=f.next())g=g.value,g.contentType&&(d=!0,WebKitMediaKeys.isTypeSupported(this.keySystem, +g.contentType.split(";")[0])&&(b.audioCapabilities.push(g),e=!0));if(c.videoCapabilities)for(c=t(c.videoCapabilities),f=c.next();!f.done;f=c.next())f=f.value,f.contentType&&(d=!0,WebKitMediaKeys.isTypeSupported(this.keySystem,f.contentType.split(";")[0])&&(b.videoCapabilities.push(f),e=!0));d||(e=WebKitMediaKeys.isTypeSupported(this.keySystem,"video/mp4"));b=e?b:null}if(b){this.g=b;return}}a=Error("Unsupported keySystem");a.name="NotSupportedError";a.code=DOMException.NOT_SUPPORTED_ERR;throw a;} +EC.prototype.createMediaKeys=function(){var a=new DC(this.keySystem);return Promise.resolve(a)};EC.prototype.getConfiguration=function(){return this.g};function DC(a){this.h=new WebKitMediaKeys(a);this.g=new jb}DC.prototype.createSession=function(a){a=a||"temporary";if("temporary"!=a)throw new TypeError("Session type "+a+" is unsupported on this platform.");return new IC(this.h,a)};DC.prototype.setServerCertificate=function(){return Promise.resolve(!1)}; +function GC(a,b){a.g.Ra();if(!b)return Promise.resolve();a.g.D(b,"webkitneedkey",HC);try{return ll(b,HTMLMediaElement.HAVE_METADATA,a.g,function(){b.webkitSetMediaKeys(a.h)}),Promise.resolve()}catch(c){return Promise.reject(c)}}DC.prototype.getStatusForPolicy=function(){return Promise.resolve("usable")};function IC(a){Dg.call(this);this.i=null;this.l=a;this.g=this.h=null;this.j=new jb;this.sessionId="";this.expiration=NaN;this.closed=new tg;this.keyStatuses=new JC}pa(IC,Dg);p=IC.prototype; +p.generateRequest=function(a,b){var c=this;this.h=new tg;try{var d=this.l.createSession("video/mp4",Tb(b));this.i=d;this.sessionId=d.sessionId||"";this.j.D(this.i,"webkitkeymessage",function(e){c.h&&(c.h.resolve(),c.h=null);e=(new Map).set("messageType",void 0==c.keyStatuses.xc()?"license-request":"license-renewal").set("message",Ub(e.message));e=new V("message",e);c.dispatchEvent(e)});this.j.D(d,"webkitkeyadded",function(){c.g&&(KC(c,"usable"),c.g.resolve(),c.g=null)});this.j.D(d,"webkitkeyerror", +function(){var e=Error("EME PatchedMediaKeysApple key error");e.errorCode=c.i.error;if(null!=c.h)c.h.reject(e),c.h=null;else if(null!=c.g)c.g.reject(e),c.g=null;else switch(c.i.error.code){case WebKitMediaKeyError.MEDIA_KEYERR_OUTPUT:case WebKitMediaKeyError.MEDIA_KEYERR_HARDWARECHANGE:KC(c,"output-not-allowed");break;default:KC(c,"internal-error")}});KC(this,"status-pending")}catch(e){this.h.reject(e)}return this.h};p.load=function(){return Promise.reject(Error("MediaKeySession.load not yet supported"))}; +p.update=function(a){this.g=new tg;try{this.i.update(Tb(a))}catch(b){this.g.reject(b)}return this.g};p.close=function(){try{this.i.close(),this.closed.resolve(),this.j.Ra()}catch(a){this.closed.reject(a)}return this.closed};p.remove=function(){return Promise.reject(Error("MediaKeySession.remove is only applicable for persistent licenses, which are not supported on this platform"))};function KC(a,b){var c=a.keyStatuses;c.size=void 0==b?0:1;c.g=b;b=new V("keystatuseschange");a.dispatchEvent(b)} +function JC(){this.size=0;this.g=void 0}p=JC.prototype;p.xc=function(){return this.g};p.forEach=function(a){this.g&&a(this.g,og.value())};p.get=function(a){if(this.has(a))return this.g};p.has=function(a){var b=og.value();return this.g&&Sb(a,b)?!0:!1};p.entries=function(){};p.keys=function(){};p.values=function(){};var BC="apple";QB(function(){window.HTMLVideoElement&&window.WebKitMediaKeys&&(navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration||AC())});function LC(){}function MC(){if(window.MediaKeys){var a=qb();MediaKeys.prototype.setServerCertificate&&a.ge()||(MediaKeys.prototype.setServerCertificate=NC)}}function NC(){return Promise.resolve(!1)}PB.PatchedMediaKeysCert=LC;LC.install=MC;QB(MC);function OC(){} +function PC(){if(!(!window.HTMLVideoElement||navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration)){if(HTMLMediaElement.prototype.webkitGenerateKeyRequest)QC="webkit";else if(!HTMLMediaElement.prototype.generateKeyRequest)return;navigator.requestMediaKeySystemAccess=RC;delete HTMLMediaElement.prototype.mediaKeys;HTMLMediaElement.prototype.mediaKeys=null;HTMLMediaElement.prototype.setMediaKeys=SC;window.MediaKeys=TC;window.MediaKeySystemAccess=UC;window.shakaMediaKeysPolyfill=VC}} +function WC(a){var b=QC;return b?b+a.charAt(0).toUpperCase()+a.slice(1):a}function RC(a,b){try{var c=new UC(a,b);return Promise.resolve(c)}catch(d){return Promise.reject(d)}}function SC(a){var b=this.mediaKeys;b&&b!=a&&XC(b,null);delete this.mediaKeys;(this.mediaKeys=a)&&XC(a,this);return Promise.resolve()}PB.PatchedMediaKeysWebkit=OC;OC.install=PC; +function UC(a,b){this.g=this.keySystem=a;var c=!1;"org.w3.clearkey"==a&&(this.g="webkit-org.w3.clearkey",c=!1);var d=!1;var e=document.getElementsByTagName("video");e=e.length?e[0]:document.createElement("video");b=t(b);for(var f=b.next();!f.done;f=b.next()){f=f.value;var g={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:f.initDataTypes,sessionTypes:["temporary"],label:f.label},h=!1;if(f.audioCapabilities)for(var k=t(f.audioCapabilities), +l=k.next();!l.done;l=k.next())l=l.value,l.contentType&&(h=!0,e.canPlayType(l.contentType.split(";")[0],this.g)&&(g.audioCapabilities.push(l),d=!0));if(f.videoCapabilities)for(k=t(f.videoCapabilities),l=k.next();!l.done;l=k.next())l=l.value,l.contentType&&(h=!0,e.canPlayType(l.contentType,this.g)&&(g.videoCapabilities.push(l),d=!0));h||(d=e.canPlayType("video/mp4",this.g)||e.canPlayType("video/webm",this.g));"required"==f.persistentState&&(c?(g.persistentState="required",g.sessionTypes=["persistent-license"]): +d=!1);if(d){this.h=g;return}}c="Unsupported keySystem";if("org.w3.clearkey"==a||"com.widevine.alpha"==a)c="None of the requested configurations were supported.";a=Error(c);a.name="NotSupportedError";a.code=DOMException.NOT_SUPPORTED_ERR;throw a;}UC.prototype.createMediaKeys=function(){var a=new TC(this.g);return Promise.resolve(a)};UC.prototype.getConfiguration=function(){return this.h};function TC(a){this.l=a;this.h=null;this.g=new jb;this.i=[];this.j=new Map} +function XC(a,b){a.h=b;a.g.Ra();var c=QC;b&&(a.g.D(b,c+"needkey",function(d){var e=new CustomEvent("encrypted");e.initDataType="cenc";e.initData=Ub(d.initData);a.h.dispatchEvent(e)}),a.g.D(b,c+"keymessage",function(d){var e=YC(a,d.sessionId);e&&(d=(new Map).set("messageType",void 0==e.keyStatuses.xc()?"licenserequest":"licenserenewal").set("message",d.message),d=new V("message",d),e.h&&(e.h.resolve(),e.h=null),e.dispatchEvent(d))}),a.g.D(b,c+"keyadded",function(d){(d=YC(a,d.sessionId))&&d.ready()}), +a.g.D(b,c+"keyerror",function(d){var e=YC(a,d.sessionId);if(e){var f=Error("EME v0.1b key error"),g=d.errorCode;g.systemCode=d.systemCode;f.errorCode=g;!d.sessionId&&e.h?(45==d.systemCode&&(f.message="Unsupported session type."),e.h.reject(f),e.h=null):d.sessionId&&e.g?(e.g.reject(f),e.g=null):(f=d.systemCode,d.errorCode.code==MediaKeyError.MEDIA_KEYERR_OUTPUT?ZC(e,"output-restricted"):1==f?ZC(e,"expired"):ZC(e,"internal-error"))}}))} +TC.prototype.createSession=function(a){a=a||"temporary";if("temporary"!=a&&"persistent-license"!=a)throw new TypeError("Session type "+a+" is unsupported on this platform.");var b=this.h||document.createElement("video");b.src||(b.src="about:blank");a=new $C(b,this.l,a);this.i.push(a);return a};TC.prototype.setServerCertificate=function(){return Promise.resolve(!1)};TC.prototype.getStatusForPolicy=function(){return Promise.resolve("usable")}; +function YC(a,b){var c=a.j.get(b);return c?c:(c=a.i.shift())?(c.sessionId=b,a.j.set(b,c),c):null}function $C(a,b,c){Dg.call(this);this.j=a;this.m=!1;this.g=this.h=null;this.i=b;this.l=c;this.sessionId="";this.expiration=NaN;this.closed=new tg;this.keyStatuses=new aD}pa($C,Dg);p=$C.prototype;p.ready=function(){ZC(this,"usable");this.g&&this.g.resolve();this.g=null}; +function bD(a,b,c){if(a.m)return Promise.reject(Error("The session is already initialized."));a.m=!0;try{if("persistent-license"==a.l)if(c)var d=Tb(ec("LOAD_SESSION|"+c));else{var e=ec("PERSISTENT|");d=pc(e,b)}else d=Tb(b)}catch(g){return Promise.reject(g)}a.h=new tg;var f=WC("generateKeyRequest");try{a.j[f](a.i,d)}catch(g){if("InvalidStateError"!=g.name)return a.h=null,Promise.reject(g);(new $e(function(){try{a.j[f](a.i,d)}catch(h){a.h.reject(h),a.h=null}})).ha(.01)}return a.h} +function cD(a,b,c){if(a.g)a.g.then(function(){return cD(a,b,c)}).catch(function(){return cD(a,b,c)});else{a.g=b;if("webkit-org.w3.clearkey"==a.i){var d=ac(c);var e=JSON.parse(d);"oct"!=e.keys[0].kty&&(a.g.reject(Error("Response is not a valid JSON Web Key Set.")),a.g=null);d=mc(e.keys[0].k);e=mc(e.keys[0].kid)}else d=Tb(c),e=null;var f=WC("addKey");try{a.j[f](a.i,d,e,a.sessionId)}catch(g){a.g.reject(g),a.g=null}}} +function ZC(a,b){var c=a.keyStatuses;c.size=void 0==b?0:1;c.g=b;b=new V("keystatuseschange");a.dispatchEvent(b)}p.generateRequest=function(a,b){return bD(this,b,null)};p.load=function(a){return"persistent-license"==this.l?bD(this,null,a):Promise.reject(Error("Not a persistent session."))};p.update=function(a){var b=new tg;cD(this,b,a);return b}; +p.close=function(){if("persistent-license"!=this.l){if(!this.sessionId)return this.closed.reject(Error("The session is not callable.")),this.closed;var a=WC("cancelKeyRequest");try{this.j[a](this.i,this.sessionId)}catch(b){}}this.closed.resolve();return this.closed};p.remove=function(){return"persistent-license"!=this.l?Promise.reject(Error("Not a persistent session.")):this.close()};function aD(){this.size=0;this.g=void 0}p=aD.prototype;p.xc=function(){return this.g}; +p.forEach=function(a){this.g&&a(this.g,og.value())};p.get=function(a){if(this.has(a))return this.g};p.has=function(a){var b=og.value();return this.g&&Sb(a,b)?!0:!1};p.entries=function(){};p.keys=function(){};p.values=function(){};var QC="",VC="webkit";QB(PC);function dD(){}function eD(){if(window.HTMLVideoElement){var a=HTMLVideoElement.prototype;a.requestPictureInPicture&&document.exitPictureInPicture||!a.webkitSupportsPresentationMode||(document.pictureInPictureEnabled=!0,document.pictureInPictureElement=null,a.requestPictureInPicture=fD,Object.defineProperty(a,"disablePictureInPicture",{get:gD,set:hD,enumerable:!0,configurable:!0}),document.exitPictureInPicture=iD,document.addEventListener("webkitpresentationmodechanged",jD,!0))}} +function jD(a){a=a.target;if("picture-in-picture"==a.webkitPresentationMode){document.pictureInPictureElement=a;var b=new Event("enterpictureinpicture");a.dispatchEvent(b)}else document.pictureInPictureElement==a&&(document.pictureInPictureElement=null),b=new Event("leavepictureinpicture"),a.dispatchEvent(b)} +function fD(){return this.webkitSupportsPresentationMode("picture-in-picture")?(this.webkitSetPresentationMode("picture-in-picture"),document.pictureInPictureElement=this,Promise.resolve()):Promise.reject(Error("PiP not allowed by video element"))}function iD(){var a=document.pictureInPictureElement;return a?(a.webkitSetPresentationMode("inline"),document.pictureInPictureElement=null,Promise.resolve()):Promise.reject(Error("No picture in picture element found"))} +function gD(){return this.hasAttribute("disablePictureInPicture")?!0:!this.webkitSupportsPresentationMode("picture-in-picture")}function hD(a){a?this.setAttribute("disablePictureInPicture",""):this.removeAttribute("disablePictureInPicture")}PB.PiPWebkit=dD;dD.install=eD;QB(eD);function kD(){}function lD(){window.crypto&&("randomUUID"in window.crypto||(window.crypto.randomUUID=mD))}function mD(){var a=URL.createObjectURL(new Blob),b=a.toString();URL.revokeObjectURL(a);return b.substr(b.lastIndexOf("/")+1)}PB.RandomUUID=kD;kD.install=lD;QB(lD);function nD(){}function oD(){var a=Symbol.prototype;"description"in a||Object.defineProperty(a,"description",{get:pD})}function pD(){var a=/\((.*)\)/.exec(this.toString());return a?a[1]:void 0}PB.Symbol=nD;nD.install=oD;QB(oD);function qD(){}function rD(){for(var a=t([Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,Int8Array,Int16Array,Int32Array,Float32Array,Float64Array]),b=a.next();!b.done;b=a.next())b=b.value,b.prototype.indexOf||(b.prototype.indexOf=sD),b.prototype.lastIndexOf||(b.prototype.lastIndexOf=tD),b.prototype.includes||(b.prototype.includes=uD)}function sD(a,b){return Array.prototype.indexOf.call(this,a,b)}function tD(a,b){return Array.prototype.lastIndexOf.call(this,a,b)} +function uD(a,b){return-1!==this.indexOf(a,b)}PB.TypedArray=qD;qD.install=rD;QB(rD);function vD(){}function wD(){if(window.HTMLMediaElement){var a=HTMLMediaElement.prototype.play;HTMLMediaElement.prototype.play=function(){var b=a.apply(this);b&&b.catch(function(){});return b}}}PB.VideoPlayPromise=vD;vD.install=wD;QB(wD);function xD(){}function yD(){if(window.HTMLVideoElement){var a=HTMLVideoElement.prototype;!a.getVideoPlaybackQuality&&("webkitDroppedFrameCount"in a||"number"===typeof wi().webkitDroppedFrameCount)&&(a.getVideoPlaybackQuality=zD)}}function zD(){return{droppedVideoFrames:this.webkitDroppedFrameCount,totalVideoFrames:this.webkitDecodedFrameCount,corruptedVideoFrames:0,creationTime:NaN,totalFrameDelay:0}}PB.VideoPlaybackQuality=xD;xD.install=yD;QB(yD);function AD(){}function BD(){if(!window.VTTCue&&window.TextTrackCue){var a=null,b=TextTrackCue.length;if(3==b)a=CD;else if(6==b)a=DD;else{try{var c=!!CD(1,2,"")}catch(d){c=!1}c&&(a=CD)}a&&(window.VTTCue=function(d,e,f){return a(d,e,f)})}}function CD(a,b,c){return new window.TextTrackCue(a,b,c)}function DD(a,b,c){return new window.TextTrackCue(a+"-"+b+"-"+c,a,b,c)}PB.VTTCue=AD;AD.install=BD;QB(BD);function ED(a){Dg.call(this);this.h=a;this.l=null;this.g=[];this.i=-1;this.j=null;this.m=new jb}pa(ED,Dg);p=ED.prototype;p.destroy=function(){var a=this;return Q(function(b){if(1==b.g)return F(b,a.removeAllItems(),2);a.h=null;a.m&&(a.m.release(),a.m=null);Dg.prototype.release.call(a);G(b)})};p.configure=function(a){this.l=a};p.getConfiguration=function(){return this.l};p.getCurrentItem=function(){return this.g.length&&0<=this.i&&this.i=b.g.length)throw new U(2,7,7007);c=b.g[a];b.i!=a&&(b.i=a,b.dispatchEvent(new V("currentitemchanged")));d=b.h.h;e=b.l?b.l.preloadNextUrlWindow:0;0=b.g.length||f||b.h.V()||!d.duration)return E.return();y=b.h.Sa().end-d.currentTime;if(isNaN(y)){E.u(0);break}if(!(y<=e)){E.u(0);break}z= +b.l&&b.l.repeatMode;A=null;b.i+1 can only be inside
    in TTML");q=t(qd(e,"div"));for(r=q.next();!r.done;r=q.next())if(qd(r.value,"span").length)throw new U(2,2,2001," can only be inside

    in TTML");if(b=OD(e,b,g,h,k,f,l,n,m,null,!1,c,d))b.backgroundColor||(b.backgroundColor="transparent"), +a.push(b);return a}; +function OD(a,b,c,d,e,f,g,h,k,l,m,n,q){var r=l;if(od(a)){if(!m)return null;var u={tagName:"span",children:[rd(a)],attributes:{},parent:null}}else u=a;for(var w=null,v=t(PD),y=v.next();!y.done&&!(w=QD(u,"backgroundImage",d,"#",y.value)[0]);y=v.next());v=null;y=zd(u,PD,"backgroundImage");var z=/^(urn:)(mpeg:[a-z0-9][a-z0-9-]{0,31}:)(subs:)([0-9]+)$/;if(y&&z.test(y)){v=parseInt(y.split(":").pop(),10)-1;if(v>=q.length)return null;v=q[v]}else n&&y&&!y.startsWith("#")&&(z=new Bb(n),y=new Bb(y),(y=z.resolve(y).toString())&& +(v=y));if("p"==a.tagName||w||v)m=!0;a=m;y="default"==(u.attributes["xml:space"]||(h?"default":"preserve"));z=u.children.every(od);h=[];if(!z)for(var A=t(u.children),B=A.next();!B.done;B=A.next())(B=OD(B.value,b,c,d,e,f,g,y,k,u,m,n,q))&&h.push(B);d=null!=l;n=rd(u);n=u.children.length&&n&&/\S/.test(n);A=u.attributes.begin||u.attributes.end||u.attributes.dur;if(!(A||n||"br"==u.tagName||0!=h.length||d&&!y))return null;q=RD(u,c);n=q.start;for(q=q.end;r&&r.tagName&&"tt"!=r.tagName;)q=SD(r,c,n,q),n=q.start, +q=q.end,r=r.parent;null==n&&(n=0);n+=b.periodStart;q=null==q?Infinity:q+b.periodStart;n=Math.max(n,b.segmentStart);q=Math.min(q,b.segmentEnd);if(!A&&0c.length)return f;var g=a;for(a=null;!a&&!(a=e?yd(g,e,b):g.attributes[b])&&(g=g.parent,g););if(b=a)for(b=t(b.split(" ")),e=b.next();!e.done;e=b.next())for(e=e.value,a=t(c),g=a.next();!g.done;g=a.next())if(g=g.value,d+g.attributes["xml:id"]==e){f.push(g);break}return f} +function SD(a,b,c,d){a=RD(a,b);null==c?c=a.start:null!=a.start&&(c+=a.start);null==d?d=a.end:null!=a.start&&(d+=a.start);return{start:c,end:d}}function RD(a,b){var c=fE(a.attributes.begin,b),d=fE(a.attributes.end,b);a=fE(a.attributes.dur,b);null==d&&null!=a&&(d=c+a);return{start:c,end:d}} +function fE(a,b){var c=null;if(gE.test(a)){a=gE.exec(a);c=Number(a[1]);var d=Number(a[2]),e=Number(a[3]),f=Number(a[4]);f+=(Number(a[5])||0)/b.h;e+=f/b.frameRate;c=e+60*d+3600*c}else if(hE.test(a))c=iE(hE,a);else if(jE.test(a))c=iE(jE,a);else if(kE.test(a))a=kE.exec(a),c=Number(a[1])/b.frameRate;else if(lE.test(a))a=lE.exec(a),c=Number(a[1])/b.g;else if(mE.test(a))c=iE(mE,a);else if(a)throw new U(2,2,2001,"Could not parse cue time range in TTML");return c} +function iE(a,b){a=a.exec(b);return null==a||""==a[0]?null:(Number(a[4])||0)/1E3+(Number(a[3])||0)+60*(Number(a[2])||0)+3600*(Number(a[1])||0)}function MD(a){return a?(a=/^(\d+) (\d+)$/.exec(a))?{Gc:parseInt(a[1],10),rows:parseInt(a[2],10)}:null:null}T("shaka.text.TtmlTextParser",ID);ID.prototype.parseMedia=ID.prototype.parseMedia;ID.prototype.setManifestType=ID.prototype.setManifestType;ID.prototype.setSequenceMode=ID.prototype.setSequenceMode;ID.prototype.parseInit=ID.prototype.parseInit; +function LD(a,b,c,d){this.frameRate=Number(a)||30;this.h=Number(b)||1;this.g=Number(d);0==this.g&&(this.g=a?this.frameRate*this.h:1);c&&(a=/^(\d+) (\d+)$/g.exec(c))&&(this.frameRate*=Number(a[1])/Number(a[2]))} +var UD=/^(\d{1,2}(?:\.\d+)?|100(?:\.0+)?)% (\d{1,2}(?:\.\d+)?|100(?:\.0+)?)%$/,bE=/^(\d{1,4}(?:\.\d+)?|100)%$/,aE=/^(\d+px|\d+em|\d*\.?\d+c)$/,VD=/^(\d+)px (\d+)px$/,gE=/^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/,hE=/^(?:(\d{2,}):)?(\d{2}):(\d{2})$/,jE=/^(?:(\d{2,}):)?(\d{2}):(\d{2}\.\d+)$/,kE=/^(\d*(?:\.\d*)?)f$/,lE=/^(\d*(?:\.\d*)?)t$/,mE=RegExp("^(?:(\\d*(?:\\.\\d*)?)h)?(?:(\\d*(?:\\.\\d*)?)m)?(?:(\\d*(?:\\.\\d*)?)s)?(?:(\\d*(?:\\.\\d*)?)ms)?$"),$D=(new Map).set("left",Xd).set("center","center").set("right", +"end").set("start",Xd).set("end","end"),ZD=(new Map).set("left","line-left").set("center","center").set("right","line-right"),JD=["http://www.w3.org/ns/ttml#parameter","http://www.w3.org/2006/10/ttaf1#parameter"],KD=["http://www.w3.org/ns/ttml#styling","http://www.w3.org/2006/10/ttaf1#styling"],PD=["http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt","http://www.smpte-ra.org/schemas/2052-1/2013/smpte-tt"];Qe("application/ttml+xml",function(){return new ID});function nE(){this.g=new ID}nE.prototype.parseInit=function(a){var b=!1;(new bh).box("moov",gh).box("trak",gh).box("mdia",gh).box("minf",gh).box("stbl",gh).R("stsd",ih).box("stpp",function(c){b=!0;c.parser.stop()}).parse(a);if(!b)throw new U(2,2,2007);};nE.prototype.setSequenceMode=function(){};nE.prototype.setManifestType=function(){}; +nE.prototype.parseMedia=function(a,b,c){var d=[],e=null,f=[],g=new Map,h=[];(new bh).box("moof",gh).box("traf",gh).R("tfhd",function(y){e=yi(y.reader,y.flags).Jd}).R("trun",function(y){y=Bi(y.reader,y.version,y.flags);y=t(y.$g);for(var z=y.next();!z.done;z=y.next())h.push(z.value.sampleSize||e||0)}).R("subs",function(y){for(var z=y.reader,A=z.T(),B=-1,E=0;E").replace(/{\/b}/g,"").replace(/{i}/g,"").replace(/{\/i}/g,"").replace(/{u}/g,"").replace(/{\/u}/g,"")+"\n\n";return b}T("shaka.text.SrtTextParser",vE);vE.srt2webvtt=wE;vE.prototype.parseMedia=vE.prototype.parseMedia; +vE.prototype.setManifestType=vE.prototype.setManifestType;vE.prototype.setSequenceMode=vE.prototype.setSequenceMode;vE.prototype.parseInit=vE.prototype.parseInit;Qe("text/srt",function(){return new vE});function xE(){}xE.prototype.parseInit=function(){};xE.prototype.setSequenceMode=function(){};xE.prototype.setManifestType=function(){}; +xE.prototype.parseMedia=function(a){var b="",c="",d=null,e=null;e=ac(a).split(/\r?\n\s*\r?\n/);a=t(e);for(e=a.next();!e.done;e=a.next()){var f=e.value;e=f;if(f=yE.exec(f))d=f[1],e=f[2];"V4 Styles"==d||"V4+ Styles"==d?(b=e,b=c?b+("\n"+e):e):"Events"==d&&(c=c?c+("\n"+e):e)}d=[];e=null;b=t(b.split(/\r?\n/));for(a=b.next();!a.done;a=b.next())if(a=a.value,!/^\s*;/.test(a)&&(f=zE.exec(a)))if(a=f[1].trim(),f=f[2].trim(),"Format"==a)e=f.split(AE);else if("Style"==a){a=f.split(AE);f={};for(var g=0;g>8&255)+","+(a>>16&255)+","+(a>>24&255^255)/255+")":null} +function BE(a){a=EE.exec(a);return 3600*(a[1]?parseInt(a[1].replace(":",""),10):0)+60*parseInt(a[2],10)+parseFloat(a[3])}T("shaka.text.SsaTextParser",xE);xE.prototype.parseMedia=xE.prototype.parseMedia;xE.prototype.setManifestType=xE.prototype.setManifestType;xE.prototype.setSequenceMode=xE.prototype.setSequenceMode;xE.prototype.parseInit=xE.prototype.parseInit;var yE=/^\s*\[([^\]]+)\]\r?\n([\s\S]*)/,zE=/^\s*([^:]+):\s*(.*)/,AE=/\s*,\s*/,EE=/^(\d+:)?(\d{1,2}):(\d{1,2}(?:[.]\d{1,3})?)?$/; +Qe("text/x-ssa",function(){return new xE});function FE(a,b){var c=a[b+1]&1?7:9;return b+c<=a.length&&(a=((a[b+3]&3)<<11|a[b+4]<<3|(a[b+5]&224)>>>5)-c,0>>2;if(d>c.length-1)return null;var e=((a[b+2]&192)>>>6)+1,f=(a[b+2]&1)<<2;f|=(a[b+3]&192)>>>6;return{sampleRate:c[d],channelCount:f,codec:"mp4a.40."+e}} +function HE(a,b){if(b+1=a.length)return!1;var d=(a[b+3]&3)<<11|a[b+4]<<3|(a[b+5]&224)>>>5;if(d<=c)return!1;b+=d;return b===a.length||b+1a.length||11!==a[b]||119!==a[b+1])return null;var c=a[b+4]>>6;if(3<=c)return null;var d=a[b+4]&63,e=2*[64,69,96,64,70,96,80,87,120,80,88,120,96,104,144,96,105,144,112,121,168,112,122,168,128,139,192,128,140,192,160,174,240,160,175,240,192,208,288,192,209,288,224,243,336,224,244,336,256,278,384,256,279,384,320,348,480,320,349,480,384,417,576,384,418,576,448,487,672,448,488,672,512,557,768,512,558,768,640,696,960,640,697,960,768,835,1152,768,836,1152,896,975,1344,896,976,1344, +1024,1114,1536,1024,1115,1536,1152,1253,1728,1152,1254,1728,1280,1393,1920,1280,1394,1920][3*d+c];if(b+e>a.length)return null;var f=a[b+6]>>5,g=0;2===f?g+=2:(f&1&&1!==f&&(g+=2),f&4&&(g+=2));g=(a[b+6]<<8|a[b+7])>>12-g&1;var h=a[b+5]&7;a=new Uint8Array([c<<6|a[b+5]>>3<<1|h>>2,(h&3)<<6|f<<3|g<<2|d>>4,d<<4&224]);return{sampleRate:[48E3,44100,32E3][c],channelCount:[2,1,2,3,3,4,4,5][f]+g,Da:a,qa:e}} +function LE(a,b){if(11===a[b]&&119===a[b+1]){var c=0,d=5;b+=d;for(var e,f;0>>24+h<>h;c=c?c<c)return!0}return!1};function ME(a){this.j=a;this.h=0;this.g=new Map;this.i=null}p=ME.prototype;p.destroy=function(){this.g.clear()};p.isSupported=function(a){return"audio/ac3"==a.toLowerCase().split(";")[0]?Ec(this.convertCodecs("audio",a)):!1};p.convertCodecs=function(a,b){return"audio/ac3"==b.toLowerCase().split(";")[0]?qb().ae()?'audio/mp4; codecs="ec-3"':'audio/mp4; codecs="ac-3"':b};p.getOriginalMimeType=function(){return this.j}; +p.transmux=function(a,b,c,d){a=Tb(a);for(var e=Nj(a),f=e.length;fa.length||2935!==(a[b]<<8|a[b+1]<<0))return null;var c=new Pj(a.subarray(b+2));Rj(c,2);Rj(c,3);var d=Sj(c,11)+1<<1,e=Sj(c,2);if(3==e){e=Sj(c,2);e=[24E3,22060,16E3][e];var f=3}else e=[48E3,44100,32E3][e],f=Sj(c,2);var g=Sj(c,3),h=Sj(c,1);c=Sj(c,5);if(b+d>a.byteLength)return null;a=Math.floor(d*e/(16*[1,2,3,6][f]));a=new Uint8Array([(a&8160)>>5,(a&31)<<3,e<<6|c<<1|0,0|g<<1|h<<0,0]);return{sampleRate:e,channelCount:[2,1,2,3,3,4,4,5][g]+h,Da:a,qa:d}};function OE(a){this.j=a;this.h=0;this.g=new Map;this.i=null}p=OE.prototype;p.destroy=function(){this.g.clear()};p.isSupported=function(a){return"audio/ec3"==a.toLowerCase().split(";")[0]?Ec(this.convertCodecs("audio",a)):!1};p.convertCodecs=function(a,b){return"audio/ec3"==b.toLowerCase().split(";")[0]?'audio/mp4; codecs="ec-3"':b};p.getOriginalMimeType=function(){return this.j}; +p.transmux=function(a,b,c,d){a=Tb(a);for(var e=Nj(a),f=e.length;fe?Yj(c,16):Yj(c,64))}Uj(c);d=X(c);if(0===d)X(c);else if(1===d)for(Rj(c,1),Uj(c),Uj(c),d=X(c),e=0;e=q?(d=r[q-1],e=u[q-1]):255===q&&(d=Sj(c,16),e=Sj(c,16))}c=(2-h)*(g+1)*16-2*m-2*n;f=16*(f+1)-2*k-2*l;k=[];b=b.fullData;k.push(b.byteLength>>>8&255);k.push(b.byteLength&255);k=k.concat.apply(k,x(b));b=[];a=a.fullData;b.push(a.byteLength>>>8&255);b.push(a.byteLength&255);b=b.concat.apply(b,x(a));a=new Uint8Array([1,k[3],k[4], +k[5],255,225].concat(k,[1],b));return{height:c,width:f,Na:a,Wa:d,Xa:e}} +function RE(a){function b(u){e={data:new Uint8Array([]),frame:!1,isKeyframe:!1,pts:u.pts,dts:u.dts,nalus:[]}}function c(){if(e&&e.nalus.length&&e.frame){for(var u=[],w=t(e.nalus),v=w.next();!v.done;v=w.next()){v=v.value;var y=v.fullData.byteLength,z=new Uint8Array(4);z[0]=y>>24&255;z[1]=y>>16&255;z[2]=y>>8&255;z[3]=y&255;u.push(z);u.push(v.fullData)}e.data=pc.apply(jc,x(u));d.push(e)}}for(var d=[],e=null,f=!1,g=0;gH;H++)Sj(a,2);for(H=0;HL;L++)for(var K=0;K<(3===L?2:6);K++)if(Wj(a)){var J=Math.min(64,1<<4+(L<<1));1=J?(I=M[J-1],L=O[J-1]):255===J&&(I=Sj(a,16),L=Sj(a,16)));Wj(a)&&Wj(a);Wj(a)&&(Sj(a,3),Wj(a),Wj(a)&&(Xj(a),Xj(a),Xj(a)));Wj(a)&&(X(a),X(a));Wj(a);Wj(a);Wj(a);if(J=Wj(a))X(a),X(a),X(a),X(a);if(Wj(a)&&(Sj(a,32),Sj(a,32),Wj(a)&&X(a),Wj(a))){O=!1;J=Wj(a);M=Wj(a);if(J||M){if(O=Wj(a))Xj(a),Sj(a,5),Wj(a),Sj(a,5);Sj(a,4);Sj(a,4);O&& +Sj(a,4);Sj(a,5);Sj(a,5);Sj(a,5)}for(N=0;N<=f;N++){var R=!0;P=1;Wj(a)||(R=Wj(a));var S=!1;R?X(a):S=Wj(a);S||(P=X(a)+1);if(J){for(R=0;R>8;e[14]=d.jf&255;e[15]=252|d.Og&3;e[16]=252|d.Zf&3;e[17]=248|d.Yf&7;e[18]=248|d.Xf&7;e[19]=0;e[20]=0;e[21]=(d.ag&3)<<6|(d.Mg&7)<<3|(d.qh?1:0)<<2|3;e[22]=3;e[23]=160;e[24]=0;e[25]=1;e[26]=(a.byteLength&65280)>>8;e[27]=(a.byteLength& +255)>>0;e.set(a,28);e[23+(5+a.byteLength)]=161;e[a.byteLength+29]=0;e[a.byteLength+30]=1;e[a.byteLength+31]=(b.byteLength&65280)>>8;e[a.byteLength+32]=(b.byteLength&255)>>0;e.set(b,a.byteLength+33);e[23+(a.byteLength+10+b.byteLength)]=162;e[a.byteLength+10+b.byteLength+24]=0;e[a.byteLength+10+b.byteLength+25]=1;e[a.byteLength+10+b.byteLength+26]=(c.byteLength&65280)>>8;e[a.byteLength+10+b.byteLength+27]=(c.byteLength&255)>>0;e.set(c,a.byteLength+10+b.byteLength+28);return e};function XE(a,b){var c=a[b+1]>>3&3,d=a[b+1]>>1&3,e=a[b+2]>>4&15,f=a[b+2]>>2&3;if(1!==c&&0!==e&&15!==e&&3!==f){var g=a[b+3]>>6;e=1E3*YE[14*(3===c?3-d:3===d?3:4)+e-1];f=ZE[3*(3===c?0:2===c?1:2)+f];c=$E[c][d];var h=aF[d],k=Math.floor(c*e/f+(a[b+2]>>1&1))*h,l=(navigator.userAgent||"").match(/Chrome\/(\d+)/i);(l=l?parseInt(l[1],10):0)&&87>=l&&2===d&&224E3<=e&&0===g&&(a[b+3]|=128);return{sampleRate:f,channelCount:3===g?1:2,qa:k,Hk:8*c*h}}return null} +function bF(a,b){return 255===a[b]&&224===(a[b+1]&224)&&0!==(a[b+1]&6)}function cF(a,b){if(b+1d;d++)this.usertype[d]!==hF[d]&&(c=!1);c&&(this._parsing&&(this.type="sepiff"),b.call(this))})}p=fF.prototype;p.destroy=function(){}; +p.isSupported=function(a,b){var c=a.startsWith("mss/");if(!this.g||!c)return!1;if(b)return Ec(this.convertCodecs(b,a));b=this.convertCodecs("audio",a);a=this.convertCodecs("video",a);return Ec(b)||Ec(a)};p.convertCodecs=function(a,b){return b.replace("mss/","")};p.getOriginalMimeType=function(){return this.h}; +p.transmux=function(a,b,c){if(!c)return Promise.resolve(Tb(a));if(!b.mssPrivateData)return Promise.reject(new U(2,3,3020,c?c.O()[0]:null));try{var d,e=this.g.parseBuffer(a),f=e.fetch("tfhd");f.track_ID=b.id+1;var g=e.fetch("tfdt"),h=e.fetch("traf");null===g&&(g=this.g.createFullBox("tfdt",h,f),g.version=1,g.flags=0,g.baseMediaDecodeTime=Math.floor(c.startTime*b.mssPrivateData.timescale));var k=e.fetch("trun"),l=e.fetch("tfxd");l&&l._parent.boxes.splice(l._parent.boxes.indexOf(l),1);var m=e.fetch("tfrf"); +m&&m._parent.boxes.splice(m._parent.boxes.indexOf(m),1);var n=e.fetch("sepiff");if(null!==n){n.type="senc";n.usertype=void 0;var q=e.fetch("saio");if(null===q){q=this.g.createFullBox("saio",h);q.version=0;q.flags=0;q.entry_count=1;q.offset=[0];var r=this.g.createFullBox("saiz",h);r.version=0;r.flags=0;r.sample_count=n.sample_count;r.default_sample_info_size=0;r.sample_info_size=[];if(n.flags&2)for(d=0;d>24&255;Ga[1]=Fa>>16&255;Ga[2]=Fa>>8&255;Ga[3]=Fa&255;N.push(Ga);N.push(aa.fullData)}}var xa=N.length?{data:pc.apply(jc,x(N)),isKeyframe:O}:null;if(xa){null==D&&null!=J.dts&&(D=J.dts);var qa=void 0;qa=K+ +1>>24&255,id.sampleRate>>>17&255,id.sampleRate>>>8&255,id.sampleRate>>>0&255,0,0].concat(x(Wb)));for(var nw=id.sampleRate,ow=t(k.rb()),jo=ow.next();!jo.done;jo=ow.next()){var ko=jo.value,Wf=ko.data;null==kk&&null!==ko.pts&&(kk=ko.pts);for(var sh=0;sh>>0)+"_",e=0;return b}); +fa("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;cc&&(c=Math.max(c+e,0));ce||1114111=e?c+=String.fromCharCode(e):(e-=65536,c+=String.fromCharCode(e>>>10&1023|55296),c+=String.fromCharCode(e&1023|56320))}return c}}); +function Ra(a,b,c){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e=f}});fa("Object.entries",function(a){return a?a:function(b){var c=[],d;for(d in b)La(b,d)&&c.push([d,b[d]]);return c}}); +var Sa="function"==typeof Object.assign?Object.assign:function(a,b){for(var c=1;cb||1342177279>>=1)c+=c;return d}});fa("Number.EPSILON",function(){return Math.pow(2,-52)}); +fa("Number.MAX_SAFE_INTEGER",function(){return 9007199254740991});fa("Number.isFinite",function(a){return a?a:function(b){return"number"!==typeof b?!1:!isNaN(b)&&Infinity!==b&&-Infinity!==b}});fa("Object.values",function(a){return a?a:function(b){var c=[],d;for(d in b)La(b,d)&&c.push(b[d]);return c}});fa("Math.log2",function(a){return a?a:function(b){return Math.log(b)/Math.LN2}}); +fa("String.prototype.endsWith",function(a){return a?a:function(b,c){var d=Qa(this,b,"endsWith");void 0===c&&(c=d.length);c=Math.max(0,Math.min(c|0,d.length));for(var e=b.length;0=e}});fa("Math.trunc",function(a){return a?a:function(b){b=Number(b);if(isNaN(b)||Infinity===b||-Infinity===b||0===b)return b;var c=Math.floor(Math.abs(b));return 0>b?-c:c}});function Ta(a){a=Math.trunc(a)||0;0>a&&(a+=this.length);if(!(0>a||a>=this.length))return this[a]} +fa("Array.prototype.at",function(a){return a?a:Ta});function Va(a){return a?a:Ta}fa("Int8Array.prototype.at",Va);fa("Uint8Array.prototype.at",Va);fa("Uint8ClampedArray.prototype.at",Va);fa("Int16Array.prototype.at",Va);fa("Uint16Array.prototype.at",Va);fa("Int32Array.prototype.at",Va);fa("Uint32Array.prototype.at",Va);fa("Float32Array.prototype.at",Va);fa("Float64Array.prototype.at",Va);fa("String.prototype.at",function(a){return a?a:Ta});var Wa=this||self; +function S(a,b){a=a.split(".");var c=Wa;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c[d]&&c[d]!==Object.prototype[d]?c=c[d]:c=c[d]={}:c[d]=b};/* + @license + Shaka Player + Copyright 2016 Google LLC + SPDX-License-Identifier: Apache-2.0 +*/ +function U(a,b){if(b)if(b instanceof Map)for(var c=u(b.keys()),d=c.next();!d.done;d=c.next())d=d.value,Object.defineProperty(this,d,{value:b.get(d),writable:!0,enumerable:!0});else for(c in b)Object.defineProperty(this,c,{value:b[c],writable:!0,enumerable:!0});this.defaultPrevented=this.cancelable=this.bubbles=!1;this.timeStamp=window.performance&&window.performance.now?window.performance.now():Date.now();this.type=a;this.isTrusted=!1;this.target=this.currentTarget=null;this.g=!1} +function Xa(a){var b=new U(a.type),c;for(c in a)Object.defineProperty(b,c,{value:a[c],writable:!0,enumerable:!0});return b}U.prototype.preventDefault=function(){this.cancelable&&(this.defaultPrevented=!0)};U.prototype.stopImmediatePropagation=function(){this.g=!0};U.prototype.stopPropagation=function(){};S("shaka.util.FakeEvent",U); +var Ya={vm:"abrstatuschanged",wm:"adaptation",xm:"audiotrackchanged",ym:"audiotrackschanged",zm:"boundarycrossed",Am:"buffering",Bm:"canupdatestarttime",Cm:"complete",Dm:"currentitemchanged",Em:"downloadcompleted",Fm:"downloadfailed",Gm:"downloadheadersreceived",Hm:"drmsessionupdate",Jm:"emsg",Pm:"itemsinserted",Qm:"itemsremoved",hn:"prft",Error:"error",Km:"expirationupdated",Lm:"firstquartile",Mm:"gapjumped",Rm:"keystatuschanged",Vm:"loaded",Wm:"loading",Ym:"manifestparsed",Zm:"manifestupdated", +$m:"mediaqualitychanged",an:"mediasourcerecovered",cn:"metadataadded",Metadata:"metadata",dn:"midpoint",fn:"nospatialvideoinfo",gn:"onstatechange",jn:"ratechange",nn:"segmentappended",on:"sessiondata",pn:"spatialvideoinfo",qn:"stalldetected",rn:"started",sn:"statechanged",tn:"streaming",un:"textchanged",vn:"texttrackvisibility",wn:"thirdquartile",xn:"timelineregionadded",yn:"timelineregionenter",zn:"timelineregionexit",An:"trackschanged",Cn:"unloading",En:"variantchanged"};function Za(){}function $a(){}function ab(){}function bb(a){var b=Ja.apply(1,arguments);cb.has(a)||(cb.add(a),ab.apply(Za,x(b)))}function db(){}function gb(){}function hb(){}var cb=new Set; +window.console&&((new Map).set(1,function(){return console.error.apply(console,x(Ja.apply(0,arguments)))}).set(2,function(){return console.warn.apply(console,x(Ja.apply(0,arguments)))}).set(3,function(){return console.info.apply(console,x(Ja.apply(0,arguments)))}).set(4,function(){return console.log.apply(console,x(Ja.apply(0,arguments)))}).set(5,function(){return console.debug.apply(console,x(Ja.apply(0,arguments)))}).set(6,function(){return console.debug.apply(console,x(Ja.apply(0,arguments)))}), +ab=function(){return console.warn.apply(console,x(Ja.apply(0,arguments)))},$a=function(){console.error.apply(console,x(Ja.apply(0,arguments)))});function ib(){this.g=new Map}p=ib.prototype;p.push=function(a,b){this.g.has(a)?this.g.get(a).push(b):this.g.set(a,[b])};p.get=function(a){return this.g.has(a)?this.g.get(a).slice():null};p.remove=function(a,b){if(this.g.has(a)){var c=this.g.get(a).filter(function(d){return d!=b});this.g.set(a,c);c.length||this.g.delete(a)}};p.forEach=function(a){this.g.forEach(function(b,c){a(c,b)})};p.size=function(){return this.g.size};p.keys=function(){return Array.from(this.g.keys())};function jb(){this.gb=new ib;this.Pe=this}jb.prototype.addEventListener=function(a,b){this.gb&&this.gb.push(a,b)};jb.prototype.removeEventListener=function(a,b){this.gb&&this.gb.remove(a,b)};jb.prototype.dispatchEvent=function(a){if(!this.gb)return!0;var b=this.gb.get(a.type)||[],c=this.gb.get("All");c&&(b=b.concat(c));b=u(b);for(c=b.next();!c.done;c=b.next()){c=c.value;a.target=this.Pe;a.currentTarget=this.Pe;try{c.handleEvent?c.handleEvent(a):c.call(this,a)}catch(d){}if(a.g)break}return a.defaultPrevented}; +jb.prototype.release=function(){this.gb=null};function kb(a,b){var c=[];a=u(a);for(var d=a.next();!d.done;d=a.next())c.push(b(d.value));return c}function lb(a,b){a=u(a);for(var c=a.next();!c.done;c=a.next())if(!b(c.value))return!1;return!0}function nb(a,b){a=u(a);for(var c=a.next();!c.done;c=a.next())if(b(c.value))return!0;return!1}function ob(a,b){var c=[];a=u(a);for(var d=a.next();!d.done;d=a.next())d=d.value,b(d)&&c.push(d);return c};/* + @license + Copyright 2008 The Closure Library Authors + SPDX-License-Identifier: Apache-2.0 +*/ +var pb=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$");/* + @license + Copyright 2006 The Closure Library Authors + SPDX-License-Identifier: Apache-2.0 +*/ +function qb(a){var b;a instanceof qb?(rb(this,a.hc),this.nd=a.nd,tb(this,a.Fb),ub(this,a.Gd),this.ub=a.ub,vb(this,a.g.clone()),this.Sc=a.Sc):a&&(b=String(a).match(pb))?(rb(this,b[1]||"",!0),this.nd=wb(b[2]||""),tb(this,b[3]||"",!0),ub(this,b[4]),this.ub=wb(b[5]||"",!0),vb(this,b[6]||"",!0),this.Sc=wb(b[7]||"")):this.g=new yb(null)}p=qb.prototype;p.hc="";p.nd="";p.Fb="";p.Gd=null;p.ub="";p.Sc=""; +p.toString=function(){var a=[],b=this.hc;b&&a.push(zb(b,Ab,!0),":");if(b=this.Fb){a.push("//");var c=this.nd;c&&a.push(zb(c,Ab,!0),"@");a.push(encodeURIComponent(b).replace(/%25([0-9a-fA-F]{2})/g,"%$1"));b=this.Gd;null!=b&&a.push(":",String(b))}if(b=this.ub)this.Fb&&"/"!=b.charAt(0)&&a.push("/"),a.push(zb(b,"/"==b.charAt(0)?Bb:Cb,!0));(b=this.g.toString())&&a.push("?",b);(b=this.Sc)&&a.push("#",zb(b,Db));return a.join("")}; +p.resolve=function(a){var b=this.clone();"data"===b.hc&&(b=new qb);var c=!!a.hc;c?rb(b,a.hc):c=!!a.nd;c?b.nd=a.nd:c=!!a.Fb;c?tb(b,a.Fb):c=null!=a.Gd;var d=a.ub;if(c)ub(b,a.Gd);else if(c=!!a.ub){if("/"!=d.charAt(0))if(this.Fb&&!this.ub)d="/"+d;else{var e=b.ub.lastIndexOf("/");-1!=e&&(d=b.ub.substr(0,e+1)+d)}if(".."==d||"."==d)d="";else if(-1!=d.indexOf("./")||-1!=d.indexOf("/.")){e=0==d.lastIndexOf("/",0);d=d.split("/");for(var f=[],g=0;gb)throw Error("Bad port number "+b);a.Gd=b}else a.Gd=null} +function vb(a,b,c){b instanceof yb?a.g=b:(c||(b=zb(b,Eb)),a.g=new yb(b))}function wb(a,b){return a?b?decodeURI(a):decodeURIComponent(a):""}function zb(a,b,c){return null!=a?(a=encodeURI(a).replace(b,Fb),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),a):null}function Fb(a){a=a.charCodeAt(0);return"%"+(a>>4&15).toString(16)+(a&15).toString(16)}var Ab=/[#\/\?@]/g,Cb=/[#\?:]/g,Bb=/[#\?]/g,Eb=/[#\?@]/g,Db=/#/g;function yb(a){this.g=a||null} +function Gb(a){if(!a.mb&&(a.mb=new Map,a.Xd=0,a.g))for(var b=a.g.split("&"),c=0;c=c+2&&192==(a[c]&224)&&128==(a[c+1]&192)?(d=(a[c]&31)<<6|a[c+1]&63,c+=1):a.length>=c+3&&224==(a[c]&240)&&128==(a[c+1]&192)&& +128==(a[c+2]&192)?(d=(a[c]&15)<<12|(a[c+1]&63)<<6|a[c+2]&63,c+=2):a.length>=c+4&&240==(a[c]&241)&&128==(a[c+1]&192)&&128==(a[c+2]&192)&&128==(a[c+3]&192)&&(d=(a[c]&7)<<18|(a[c+1]&63)<<12|(a[c+2]&63)<<6|a[c+3]&63,c+=3);if(65535>=d)b+=String.fromCharCode(d);else{d-=65536;var e=d&1023;b+=String.fromCharCode(55296+(d>>10));b+=String.fromCharCode(56320+e)}}return b} +function Xb(a,b,c){if(!a)return"";if(!c&&0!=a.byteLength%2)throw new V(2,2,2004);c=Math.floor(a.byteLength/2);var d=new Uint16Array(c);a=Ob(a);for(var e=0;e=c[d]}if(!a)return"";var c=Kb(a);if(239==c[0]&&187==c[1]&&191==c[2])return Wb(c);if(254==c[0]&&255==c[1])return Xb(c.subarray(2),!1);if(255==c[0]&&254==c[1])return Xb(c.subarray(2),!0);if(0==c[0]&&0==c[2])return Xb(a,!1);if(0==c[1]&&0==c[3])return Xb(a,!0);if(b(0)&&b(1)&&b(2)&&b(3))return Wb(a);throw new V(2,2,2003);} +function $b(a){if(window.TextEncoder&&!Rb().Zh()){var b=new TextEncoder;return Lb(b.encode(a))}a=encodeURIComponent(a);a=unescape(a);b=new Uint8Array(a.length);for(var c=0;c",""":'"',"'":"'"," ":"\u00a0","‎":"\u200e","‏":"\u200f"},c=/&(?:amp|lt|gt|quot|apos|nbsp|lrm|rlm|#[xX]?[0-9a-fA-F]+);/g,d=RegExp(c.source);return a&&d.test(a)?a.replace(c,function(e){return"#"==e[1]?(e="x"==e[2]||"X"==e[2]?parseInt(e.substring(3),16):parseInt(e.substring(2),10),0<=e&&1114111>=e?String.fromCodePoint(e):""):b[e]||"'"}):a||""}S("shaka.util.StringUtils",Vb);Vb.resetFromCharCode=function(){bc.g=void 0}; +Vb.toUTF16=ac;Vb.toUTF8=$b;Vb.fromBytesAutoDetect=Zb;Vb.fromUTF16=Xb;Vb.fromUTF8=Wb;var bc=new Qb(function(){function a(c){try{var d=new Uint8Array(c);return 0",e);g=a.substring(g,e);var k=g.indexOf(f);if(-1==k){var l=f.indexOf(".");0",e+1);-1===e&&(e=a.length)}else if(91===a.charCodeAt(e+2)&&91===a.charCodeAt(e+8)&&"cdata"===a.substr(e+3,5).toLowerCase()){k=a.indexOf("]]\x3e",e);-1==k?(h.push(a.substr(e+9)),e=a.length):(h.push(a.substring(e+9,k)),e=k+3);continue}e++;continue}a:{l=g;e++;var m=d(),n={};for(k=[];62!==a.charCodeAt(e)&&a[e];){var q=a.charCodeAt(e);if(64q||96q){q=d();for(var r=a.charCodeAt(e);r&&39!==r&&34!==r&&!(64r||96 +r)&&62!==r;)e++,r=a.charCodeAt(e);var t=e+1;e=a.indexOf(a[e],t);t=a.slice(t,e);if(39===r||34===r){if(-1===e){l={tagName:m,attributes:n,children:k,parent:null};if(b)for(m=0;m/= ".indexOf(a[e])&&a[e];)e++;return a.slice(f,e)}var e=0;return c("")} +function Md(a){return"string"===typeof a}function Nd(a){var b=[];if(!a.children)return[];a=u(a.children);for(var c=a.next();!c.done;c=a.next())c=c.value,"string"!==typeof c&&b.push(c);return b}function Od(a,b){var c=[];if(!a.children)return[];a=u(a.children);for(var d=a.next();!d.done;d=a.next())d=d.value,d.tagName===b&&c.push(d);return c}function Pd(a){if("string"===typeof a)return cc(a);a=a.children.reduce(function(b,c){return"string"===typeof c?b+c:b},"");return""===a?null:cc(a)} +function Qd(a){if(!Array.from(a.children).every(function(b){return"string"===typeof b}))return null;(a=Pd(a))&&(a=a.trim());return a}function Rd(a,b,c){c=void 0===c?[]:c;a.tagName===b&&c.push(a);if(a.children){a=u(a.children);for(var d=a.next();!d.done;d=a.next())Rd(d.value,b,c)}return c}function Sd(a,b){a=Od(a,b);return 1!=a.length?null:a[0]}function Td(a,b,c){a=Ud(a,b,c);return 1!=a.length?null:a[0]} +function Vd(a,b,c,d){d=void 0===d?null:d;var e=null;a=a.attributes[b];null!=a&&(e=c(a));return null==e?d:e}function Wd(a,b,c){b=Jd(b);return a.attributes[b+":"+c]||null}function Ud(a,b,c){var d=Jd(b);b=[];if(a.children)for(c=d?d+":"+c:c,a=u(a.children),d=a.next();!d.done;d=a.next())(d=d.value)&&d.tagName===c&&b.push(d);return b}function Xd(a,b,c){b=u(b);for(var d=b.next();!d.done;d=b.next())if(d=Wd(a,d.value,c))return d;return null} +function Yd(a){if(!a)return null;/^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test(a)&&(a+="Z");a=Date.parse(a);return isNaN(a)?null:a/1E3}function Zd(a){if(!a)return null;a=RegExp("^P(?:([0-9]*)Y)?(?:([0-9]*)M)?(?:([0-9]*)D)?(?:T(?:([0-9]*)H)?(?:([0-9]*)M)?(?:([0-9.]*)S)?)?$","i").exec(a);if(!a)return null;a=31536E3*Number(a[1]||null)+2592E3*Number(a[2]||null)+86400*Number(a[3]||null)+3600*Number(a[4]||null)+60*Number(a[5]||null)+Number(a[6]||null);return isFinite(a)?a:null} +function $d(a){var b=/([0-9]+)-([0-9]+)/.exec(a);if(!b)return null;a=Number(b[1]);if(!isFinite(a))return null;b=Number(b[2]);return isFinite(b)?{start:a,end:b}:null}function ae(a){a=Number(a);return 0===a%1?a:null}function be(a){a=Number(a);return 0===a%1&&0Math.abs(a.startTime-b.startTime)&&.001>Math.abs(a.endTime-b.endTime)))return!1;for(var c in a)if("startTime"!=c&&"endTime"!=c&&"payload"!=c)if("nestedCues"==c){if(!ud(a.nestedCues,b.nestedCues,Ae))return!1}else if("region"==c||"cellResolution"==c)for(var d in a[c]){if(a[c][d]!=b[c][d])return!1}else if(Array.isArray(a[c])){if(!ud(a[c],b[c]))return!1}else if(a[c]!=b[c])return!1;return!0} +function De(a,b){b=void 0===b?new Map:b;var c=a.payload;if(c.includes("<")){0===b.size&&Ee(b);var d=c;c=[];for(var e=-1,f=0;f"===d[f]&&0",'

    '),d+="
    ";a:{f=d;e=[];var g=-1;c="";d=!1;for(var h=0;h",h);if(-1===k){c=f;break a}if((k=f.substring(h+1,k))&&"v"==k){d=!0;var l=null;e.length&& +(l=e[e.length-1]);if(l){if(l===k)c+="/"+k+">";else{if(!l.startsWith("v")){c+=f[h];continue}c+="/"+l+">"}h+=k.length+1}else c+=f[h]}else c+=f[h]}else"<"===f[h]?(g=h+1,"v"!=f[g]&&(g=-1)):">"===f[h]&&0","<"+g+">"),c=c.replace("",""),d||(c+="")}c=Ge(c);a.payload="";try{var m=Hd(""+c+"","span")}catch(n){}if(m)if(m=m.children,1!= +m.length||m[0].tagName)for(m=u(m),c=m.next();!c.done;c=m.next())He(c.value,a,b);else a.payload=cc(c);else a.payload=cc(c)}else a.payload=cc(c)}function Ee(a){for(var b=u(Object.entries(Ie)),c=b.next();!c.done;c=b.next()){var d=u(c.value);c=d.next().value;d=d.next().value;var e=new ne(0,0,"");e.color=d;a.set("."+c,e)}b=u(Object.entries(Je));for(c=b.next();!c.done;c=b.next())d=u(c.value),c=d.next().value,d=d.next().value,e=new ne(0,0,""),e.backgroundColor=d,a.set("."+c,e)} +function Ge(a){var b={"< ":""," >":" >"},c=/(< +>|<\s|\s>)/g,d=RegExp(c.source);return a&&d.test(a)?a.replace(c,function(e){return b[e]||""}):a||""} +function He(a,b,c){var d=b.clone();d.nestedCues=[];d.payload="";d.rubyTag="";d.line=null;d.region=new od;d.position=null;d.size=0;d.textAlign=pe;if(a.tagName)for(var e=u(a.tagName.split(/(?=[ .])+/g)),f=e.next();!f.done;f=e.next()){var g=f=f.value;if(g.startsWith(".voice-")){var h=g.split("-").pop();g='v[voice="'+h+'"]';c.has(g)||(g="v[voice="+h+"]")}c.has(g)&&(h=d,g=c.get(g))&&(h.backgroundColor=Ke(g.backgroundColor,h.backgroundColor),h.color=Ke(g.color,h.color),h.fontFamily=Ke(g.fontFamily,h.fontFamily), +h.fontSize=Ke(g.fontSize,h.fontSize),h.textShadow=Ke(g.textShadow,h.textShadow),h.fontWeight=g.fontWeight,h.fontStyle=g.fontStyle,h.opacity=g.opacity,h.rubyTag=g.rubyTag,h.textCombineUpright=g.textCombineUpright,h.wrapLine=g.wrapLine);switch(f){case "br":d=ye(d.startTime,d.endTime);b.nestedCues.push(d);return;case "b":d.fontWeight=Le;break;case "i":d.fontStyle=Me;break;case "u":d.textDecoration.push(Ne);break;case "font":if(f=a.attributes.color)d.color=f;break;case "div":f=a.attributes.time;if(!f)break; +if(f=Cd(f))d.startTime=f;break;case "ruby":case "rp":case "rt":d.rubyTag=f}}e=a.children;if(Md(a)||1==e.length&&Md(e[0]))for(c=Pd(a).split("\n"),a=!0,c=u(c),e=c.next();!e.done;e=c.next())e=e.value,a||(a=ye(d.startTime,d.endTime),b.nestedCues.push(a)),0=a.l&&r.startTime=c.h||(a<=c.g&&b>=c.h?c.g=c.h=null:a<=c.g&&bc.g&&b>=c.h&&(c.h=a));H(d)})};function tf(a,b,c){a.l=b;a.m=c}function uf(a,b,c){a.D=b;if(b=a.s.get(b))for(var d=u(b.keys()),e=d.next();!e.done;e=d.next())(e=b.get(e.value).filter(function(f){return f.endTime<=c}))&&a.j.append(e)} +function vf(a,b,c){b.startTime+=c;b.endTime+=c;b=u(b.nestedCues);for(var d=b.next();!d.done;d=b.next())vf(a,d.value,c)} +function wf(a,b,c,d,e){var f=c+" "+d,g=new Map;b=u(b);for(var h=b.next();!h.done;h=b.next()){var k=h.value;h=k.stream;k=k.cue;g.has(h)||g.set(h,new Map);g.get(h).has(f)||g.get(h).set(f,[]);vf(a,k,e);k.startTime>=a.l&&k.startTimey?(y=B,A=[D.ng]):B==y&&A.push(D.ng);m.push.apply(m,x(A))});h=m}c=new Set;b=new Set;h=u(h);for(e=h.next();!e.done;e=h.next())e=e.value,e.audio&&c.add(e.audio),e.video&&b.add(e.video);h=Array.from(c).sort(function(y,z){return y.bandwidth-z.bandwidth});var n=[];c=new Map;h=u(h);for(e=h.next();!e.done;e=h.next()){e=e.value;k=g(e);l=c.get(k)||[];if(l.length){var q=l[l.length-1],r=ff(q.codecs),t=ff(e.codecs);r!=t||e.bandwidth&&q.bandwidth&&!(e.bandwidth>q.bandwidth)||(l.push(e),n.push(e.id))}else l.push(e), +n.push(e.id);c.set(k,l)}var w={vp8:1,avc:1,"dovi-avc":.95,vp9:.9,vp09:.9,hevc:.85,"dovi-hevc":.8,"dovi-p5":.75,av01:.7,"dovi-av1":.65,vvc:.6};h=Array.from(b).sort(function(y,z){if(!y.bandwidth||!z.bandwidth||y.bandwidth==z.bandwidth){if(y.codecs&&z.codecs&&y.codecs!=z.codecs&&y.width==z.width){var A=ff(y.codecs),B=ff(z.codecs);if(A!=B)return(w[A]||1)-(w[B]||1)}return y.width-z.width}return y.bandwidth-z.bandwidth});b=dd();var v=[];c=new Map;h=u(h);for(e=h.next();!e.done;e=h.next()){e=e.value;k=f(e); +l=c.get(k)||[];if(l.length){q=l[l.length-1];if(!b&&(r=ff(q.codecs),t=ff(e.codecs),r!==t))continue;r=ff(q.codecs);t=ff(e.codecs);r!=t||e.bandwidth&&q.bandwidth&&!(e.bandwidth>q.bandwidth)||(l.push(e),v.push(e.id))}else l.push(e),v.push(e.id);c.set(k,l)}a.variants=a.variants.filter(function(y){var z=y.audio;y=y.video;return z&&!n.includes(z.id)||y&&!v.includes(y.id)?!1:!0})} +function Ff(a,b,c){b=u(b);for(var d=b.next(),e={};!d.done;e={videoCodec:void 0},d=b.next())if(e.videoCodec=d.value,d=a.filter(function(f){return function(g){return g.video&&g.video.codecs.startsWith(f.videoCodec)}}(e)),d.length){a=d;break}c=u(c);b=c.next();for(d={};!b.done;d={audioCodec:void 0},b=c.next())if(d.audioCodec=b.value,b=a.filter(function(f){return function(g){return g.audio&&g.audio.codecs.startsWith(f.audioCodec)}}(d)),b.length){a=b;break}return a} +function Gf(a,b,c){a.variants=a.variants.filter(function(d){return Hf(d,b,c)})} +function Hf(a,b,c){function d(h,k,l){return h>=k&&h<=l}var e=a.video;if(e&&e.width&&e.height){var f=e.width,g=e.height;g>f&&(g=u([g,f]),f=g.next().value,g=g.next().value);if(!d(f,b.minWidth,Math.min(b.maxWidth,c.width))||!d(g,b.minHeight,Math.min(b.maxHeight,c.height))||!d(e.width*e.height,b.minPixels,b.maxPixels))return!1}return a&&a.video&&a.video.frameRate&&!d(a.video.frameRate,b.minFrameRate,b.maxFrameRate)||a&&a.audio&&a.audio.channelsCount&&!d(a.audio.channelsCount,b.minChannelsCount,b.maxChannelsCount)|| +!d(a.bandwidth,b.minBandwidth,b.maxBandwidth)?!1:!0}function If(a,b,c,d){c=void 0===c?[]:c;d=void 0===d?{}:d;return Q(function(e){if(1==e.g)return F(e,Jf(a,b,0=a&&e.width>=b){a=e.height;b=e.width;break}c=ng(this,this.g.restrictions,d,a,b)}a=this.getBandwidthEstimate();d.length&& +!c.length&&(c=ng(this,null,d,Infinity,Infinity),c=[c[0]]);b=c[0]||null;for(d=0;d=g&&a<=f&&(b.bandwidth!=e.bandwidth||b.bandwidth==e.bandwidth&&b.video&&e.video&&(b.video.width=b.i))return;a.I=!0;a.u-=1E3*(a.g.switchInterval-a.g.minTimeToSwitch)}Date.now()-a.u<1E3*a.g.switchInterval||(b=a.chooseVariant(),a.getBandwidthEstimate(),b&&a.G(b,a.g.clearBufferSwitch,a.g.safeMarginSwitch))} +function ng(a,b,c,d,e){if(a.D){var f=a.D.Pi();f&&(c=c.filter(function(g){return g.bandwidth&&f?g.bandwidth<=f:!0}))}b&&(c=c.filter(function(g){return Hf(g,b,{width:e,height:d})}));return c.sort(function(g,h){return g.bandwidth-h.bandwidth})}function og(a){var b=[];a=u(a);for(var c=a.next();!c.done;c=a.next())(c=c.value.video)&&c.height&&c.width&&b.push({height:c.height,width:c.width});return b.sort(function(d,e){return d.width-e.width})}S("shaka.abr.SimpleAbrManager",mg);mg.prototype.configure=mg.prototype.configure; +mg.prototype.setCmsdManager=mg.prototype.setCmsdManager;mg.prototype.setMediaElement=mg.prototype.setMediaElement;mg.prototype.playbackRateChanged=mg.prototype.playbackRateChanged;mg.prototype.setVariants=mg.prototype.setVariants;mg.prototype.getBandwidthEstimate=mg.prototype.getBandwidthEstimate;mg.prototype.trySuggestStreams=mg.prototype.trySuggestStreams;mg.prototype.segmentDownloaded=mg.prototype.segmentDownloaded;mg.prototype.disable=mg.prototype.disable;mg.prototype.enable=mg.prototype.enable; +mg.prototype.chooseVariant=mg.prototype.chooseVariant;mg.prototype.init=mg.prototype.init;mg.prototype.release=mg.prototype.release;mg.prototype.stop=mg.prototype.stop;var qg=1;S("shaka.config.CrossBoundaryStrategy",{KEEP:"keep",RESET:"reset",RESET_TO_ENCRYPTED:"reset_to_encrypted",RESET_ON_ENCRYPTION_CHANGE:"RESET_ON_ENCRYPTION_CHANGE"});function rg(a,b){if(a===b||!a.length||!b.length)return!0;a=u(a);for(var c=a.next();!c.done;c=a.next()){c=c.value;if(sg(c))return!0;for(var d=u(b),e=d.next();!e.done;e=d.next())if(e=e.value,c.keySystem===e.keySystem||sg(e))return!0}return!1} +function vg(a,b){if(!a.length)return b;if(!b.length)return a;var c=[];a=u(a);for(var d=a.next();!d.done;d=a.next()){d=d.value;for(var e=u(b),f=e.next();!f.done;f=e.next())if(f=f.value,d.keySystem==f.keySystem){e=new Map;for(var g=u((d.initData||[]).concat(f.initData||[])),h=g.next();!h.done;h=g.next())h=h.value,e.set(h.keyId,h);e=Array.from(e.values());g=d.keyIds&&f.keyIds?new Set([].concat(x(d.keyIds),x(f.keyIds))):d.keyIds||f.keyIds;c.push({keySystem:d.keySystem,licenseServerUri:d.licenseServerUri|| +f.licenseServerUri,distinctiveIdentifierRequired:d.distinctiveIdentifierRequired||f.distinctiveIdentifierRequired,persistentStateRequired:d.persistentStateRequired||f.persistentStateRequired,videoRobustness:d.videoRobustness||f.videoRobustness,audioRobustness:d.audioRobustness||f.audioRobustness,serverCertificate:d.serverCertificate||f.serverCertificate,serverCertificateUri:d.serverCertificateUri||f.serverCertificateUri,initData:e,keyIds:g});break}else sg(d)?c.push(d):sg(f)&&c.push(f)}return c} +function wg(a){return a?!!a.match(/^com\.(microsoft|chromecast)\.playready/):!1}function xg(a){return a?!!a.match(/^com\.apple\.fps/):!1}function sg(a){return(a=a.licenseServerUri)?a.startsWith("data:application/json;base64,"):!1}var yg=new Qb(function(){return Lb(new Uint8Array([0]))}),zg=new Map;function Eg(a,b){var c=Fg();this.l=null==a.maxAttempts?c.maxAttempts:a.maxAttempts;this.j=null==a.baseDelay?c.baseDelay:a.baseDelay;this.s=null==a.fuzzFactor?c.fuzzFactor:a.fuzzFactor;this.m=null==a.backoffFactor?c.backoffFactor:a.backoffFactor;this.g=0;this.h=this.j;if(this.i=void 0===b?!1:b)this.g=1} +function Gg(a){var b,c;return Q(function(d){if(1==d.g){if(a.g>=a.l)if(a.i)a.g=1,a.h=a.j;else throw new V(2,7,1010);b=a.g;a.g++;if(0==b)return d.return();c=a.h*(1+(2*Math.random()-1)*a.s);return F(d,new Promise(function(e){(new yf(e)).X(c/1E3)}),2)}a.h*=a.m;H(d)})}function Fg(){return{maxAttempts:2,baseDelay:1E3,backoffFactor:2,fuzzFactor:.5,timeout:3E4,stallTimeout:5E3,connectionTimeout:1E4}};function Hg(){var a,b,c=new Promise(function(d,e){a=d;b=e});c.resolve=a;c.reject=b;return c}Hg.prototype.resolve=function(){};Hg.prototype.reject=function(){};function Ig(a,b){this.promise=a;this.i=b;this.g=null}function Jg(a){return new Ig(Promise.reject(a),function(){return Promise.resolve()})}function Kg(){var a=Promise.reject(new V(2,7,7001));a.catch(function(){});return new Ig(a,function(){return Promise.resolve()})}function Lg(a){return new Ig(Promise.resolve(a),function(){return Promise.resolve()})}function Mg(a){return new Ig(a,function(){return a.catch(function(){})})}Ig.prototype.abort=function(){this.g||(this.g=this.i());return this.g}; +function Ng(a){return new Ig(Promise.all(a.map(function(b){return b.promise})),function(){return Promise.all(a.map(function(b){return b.abort()}))})}Ig.prototype.finally=function(a){this.promise.then(function(){return a(!0)},function(){return a(!1)});return this}; +Ig.prototype.bb=function(a,b){function c(h){return function(k){if(e.g&&h)f.reject(g);else{var l=h?a:b;l?d=Og(l,k,f):(h?f.resolve:f.reject)(k)}}}function d(){f.reject(g);return e.abort()}var e=this,f=new Hg;f.catch(function(){});var g=new V(2,7,7001);this.promise.then(c(!0),c(!1));return new Ig(f,function(){return d()})}; +function Og(a,b,c){try{var d=a(b);if(d&&d.promise&&d.abort)return c.resolve(d.promise),function(){return d.abort()};c.resolve(d);return function(){return Promise.resolve(d).then(function(){},function(){})}}catch(e){return c.reject(e),function(){return Promise.resolve()}}}ea.Object.defineProperties(Ig.prototype,{aborted:{configurable:!0,enumerable:!0,get:function(){return null!==this.g}}});S("shaka.util.AbortableOperation",Ig);Ig.prototype.chain=Ig.prototype.bb;Ig.prototype["finally"]=Ig.prototype.finally; +Ig.all=Ng;Ig.prototype.abort=Ig.prototype.abort;Ig.notAbortable=Mg;Ig.completed=Lg;Ig.aborted=Kg;Ig.failed=Jg;function Pg(){this.g=[]}function Qg(a,b){a.g.push(b.finally(function(){sd(a.g,b)}))}Pg.prototype.destroy=function(){for(var a=[],b=u(this.g),c=b.next();!c.done;c=b.next())c=c.value,c.promise.catch(function(){}),a.push(c.abort());this.g=[];return Promise.all(a)};function Rg(a,b,c,d,e,f,g){jb.call(this);this.i=null;this.j=!1;this.u=new Pg;this.g=new Set;this.h=new Set;this.s=a||null;this.m=b||null;this.B=c||null;this.C=d||null;this.D=e||null;this.G=f||null;this.F=g||null;this.l=new Map}pa(Rg,jb);p=Rg.prototype;p.configure=function(a){this.i=a};function Sg(a,b,c,d){d=void 0===d?!1:d;c=c||Tg;var e=Ug.get(a);(!e||c>=e.priority)&&Ug.set(a,{priority:c,Of:b,Ol:d})} +function Vg(a,b){for(var c=u(a.g),d=c.next();!d.done;d=c.next())b.g.add(d.value);a=u(a.h);for(c=a.next();!c.done;c=a.next())b.h.add(c.value)}p.Rl=function(a){this.g.add(a)};p.om=function(a){this.g.delete(a)};p.gk=function(){this.g.clear()};p.Sl=function(a){this.h.add(a)};p.pm=function(a){this.h.delete(a)};p.hk=function(){this.h.clear()};p.Ei=function(){this.l.clear()}; +function Wg(a,b,c){return{uris:a,method:"GET",body:null,headers:{},allowCrossSiteCredentials:!1,retryParameters:b,licenseRequestType:null,sessionId:null,drmInfo:null,initData:null,initDataType:null,streamDataCallback:void 0===c?null:c}}p.destroy=function(){this.j=!0;this.g.clear();this.h.clear();this.l.clear();jb.prototype.release.call(this);return this.u.destroy()}; +p.request=function(a,b,c){var d=this,e=new Xg;if(this.j){var f=Promise.reject(new V(2,7,7001));f.catch(function(){});return new Yg(f,function(){return Promise.resolve()},e)}b.method=b.method||"GET";b.headers=b.headers||{};b.retryParameters=b.retryParameters?Dd(b.retryParameters):Fg();b.uris=Dd(b.uris);f=Zg(this,a,b,c);var g=f.bb(function(){return $g(d,a,b,c,new Eg(b.retryParameters,!1),0,null,e)}),h=g.bb(function(q){return ah(d,a,q,c)}),k=Date.now(),l=0;f.promise.then(function(){l=Date.now()-k},function(){}); +var m=0;g.promise.then(function(){m=Date.now()},function(){});var n=h.bb(function(q){var r=Date.now()-m,t=q.response;t.timeMs+=l;t.timeMs+=r;q.ol||!d.s||t.fromCache||"HEAD"==b.method||a!=bh||d.s(t.timeMs,t.data.byteLength,ch(c),b,c);d.F&&d.F(a,t,c);return t},function(q){q&&(q.severity=2);throw q;});f=new Yg(n.promise,function(){return n.abort()},e);Qg(this.u,f);return f}; +function Zg(a,b,c,d){function e(h){f=f.bb(function(){c.body&&(c.body=Lb(c.body));return h(b,c,d)})}var f=Lg(void 0);a.D&&e(a.D);a=u(a.g);for(var g=a.next();!g.done;g=a.next())e(g.value);return f.bb(void 0,function(h){if(h instanceof V&&7001==h.code)throw h;throw new V(2,1,1006,h);})} +function $g(a,b,c,d,e,f,g,h){a.i.forceHTTP&&(c.uris[f]=c.uris[f].replace("https://","http://"));a.i.forceHTTPS&&(c.uris[f]=c.uris[f].replace("http://","https://"));0this.h.byteLength)throw jh();var b=Kb(this.h,this.g,a);this.g+=a;return b}; +p.skip=function(a){if(this.g+a>this.h.byteLength)throw jh();this.g+=a};p.uj=function(a){if(this.ga||a>this.h.byteLength)throw jh();this.g=a};p.ed=function(){for(var a=this.g;this.Oa()&&0!=this.h.getUint8(this.g);)this.g+=1;a=Kb(this.h,a,this.g-a);this.g+=1;return Wb(a)};function jh(){return new V(2,3,3E3)}S("shaka.util.DataViewReader",hh);hh.prototype.readTerminatedString=hh.prototype.ed;hh.prototype.seek=hh.prototype.seek;hh.prototype.rewind=hh.prototype.uj; +hh.prototype.skip=hh.prototype.skip;hh.prototype.readBytes=hh.prototype.Xb;hh.prototype.readUint64=hh.prototype.Jd;hh.prototype.readInt32=hh.prototype.Ih;hh.prototype.readUint32=hh.prototype.W;hh.prototype.readUint16=hh.prototype.Fa;hh.prototype.readUint8=hh.prototype.aa;hh.prototype.getLength=hh.prototype.getLength;hh.prototype.getPosition=hh.prototype.Ua;hh.prototype.hasMoreData=hh.prototype.Oa;var ih=1;hh.Endianness={BIG_ENDIAN:0,LITTLE_ENDIAN:ih};function kh(){this.i=new Map;this.h=new Map;this.g=!1}p=kh.prototype;p.box=function(a,b){a=lh(a);this.i.set(a,mh);this.h.set(a,b);return this};p.V=function(a,b){a=lh(a);this.i.set(a,nh);this.h.set(a,b);return this};p.stop=function(){this.g=!0};p.parse=function(a,b,c){a=new hh(a,0);for(this.g=!1;a.Oa()&&!this.g;)this.Ed(0,a,b,c)}; +p.Ed=function(a,b,c,d){var e=b.Ua();if(d&&e+8>b.getLength())this.g=!0;else{var f=b.W(),g=b.W(),h=oh(g),k=!1;switch(f){case 0:f=b.getLength()-e;break;case 1:if(d&&b.Ua()+8>b.getLength()){this.g=!0;return}f=b.Jd();k=!0}var l=this.h.get(g);if(l){var m=null,n=null;if(this.i.get(g)==nh){if(d&&b.Ua()+4>b.getLength()){this.g=!0;return}n=b.W();m=n>>>24;n&=16777215}g=e+f;c&&g>b.getLength()&&(g=b.getLength());d&&g>b.getLength()?this.g=!0:(d=g-b.Ua(),b=0>24&255,a>>16&255,a>>8&255,a&255)} +function qh(a){return 8+(a.has64BitSize?8:0)+(null!=a.flags?4:0)}S("shaka.util.Mp4Parser",kh);kh.headerSize=qh;kh.typeToString=oh;kh.allData=uh;kh.audioSampleEntry=th;kh.visualSampleEntry=sh;kh.sampleDescription=rh;kh.children=ph;kh.prototype.parseNext=kh.prototype.Ed;kh.prototype.parse=kh.prototype.parse;kh.prototype.stop=kh.prototype.stop;kh.prototype.fullBox=kh.prototype.V;kh.prototype.box=kh.prototype.box;var mh=0,nh=1;function vh(a){var b=this;this.g=[];this.h=[];this.data=[];(new kh).box("moov",ph).box("moof",ph).V("pssh",function(c){if(!(1d?h.setUint32(k,0):h.setUint32(k,16777216);k+=4;g.set(b,k);k+=b.length;if(0h&&(h+=Math.pow(2,32));h="0x"+h.toString(16)}a.u(new V(2,6,6006,f.message,f,h))}})}function ei(a){return Q(function(b){return 1==b.g?a.J?F(b,a.m,3):b.A(0):F(b,Promise.all(a.P.map(function(c){return c.promise})),0)})} +function Oh(a,b){var c,d,e,f,g,h,k,l,m,n,q,r,t,w;Q(function(v){switch(v.g){case 1:c=b.target;a.g.logLicenseExchange&&gc(b.message);d=a.i.get(c);e=a.h.licenseServerUri;f=a.g.advanced[a.h.keySystem];"individualization-request"==b.messageType&&f&&f.individualizationServer&&(e=f.individualizationServer);g=Wg([e],a.g.retryParameters);g.body=b.message;g.method="POST";g.licenseRequestType=b.messageType;g.sessionId=c.sessionId;g.drmInfo=a.h;d&&(g.initData=d.initData,g.initDataType=d.initDataType);if(f&&f.headers)for(h in f.headers)g.headers[h]= +f.headers[h];if("org.w3.clearkey"===a.h.keySystem){var y=g,z=a.h;try{var A=Zb(y.body);if(A){var B=JSON.parse(A);B.type||(B.type=z.sessionType,y.body=$b(JSON.stringify(B)))}}catch(D){}}if(wg(a.h.keySystem))if(y=Xb(g.body,!0,!0),y.includes("PlayReadyKeyMessage")){y=Hd(y,"PlayReadyKeyMessage");z=Rd(y,"HttpHeader");z=u(z);for(A=z.next();!A.done;A=z.next())B=A.value,A=Rd(B,"name")[0],B=Rd(B,"value")[0],g.headers[Pd(A)]=Pd(B);y=Rd(y,"Challenge")[0];g.body=hc(Pd(y))}else g.headers["Content-Type"]="text/xml; charset=utf-8"; +k=Date.now();ta(v,2);m=a.D.uc.request(2,g,{isPreload:a.O()});a.P.push(m);return F(v,m.promise,4);case 4:l=v.h;sd(a.P,m);wa(v,3);break;case 2:n=xa(v);if(a.l.g)return v.return();q=new V(2,6,6007,n);1==a.i.size?(a.u(q),d&&d.Mb&&d.Mb.reject(q)):(d&&d.Mb&&d.Mb.reject(q),a.i.delete(c),Uh(a)&&(a.m.resolve(),a.K.X(.1)));return v.return();case 3:if(a.l.g)return v.return();a.H+=(Date.now()-k)/1E3;a.g.logLicenseExchange&&gc(l.data);ta(v,5);return F(v,c.update(l.data),7);case 7:wa(v,6);break;case 5:return r= +xa(v),t=new V(2,6,6008,r.message),a.u(t),d&&d.Mb&&d.Mb.reject(t),v.return();case 6:if(a.l.g)return v.return();w=new U("drmsessionupdate");a.D.onEvent(w);d&&(d.Mb&&d.Mb.resolve(),bi(a,d));H(v)}})} +function di(a,b){b=b.target;var c=a.i.get(b),d=!1;b.keyStatuses.forEach(function(f,g){if("string"==typeof g){var h=g;g=f;f=h}h=Rb();if(wg(a.h.keySystem)&&16==g.byteLength&&h.Oh()){h=Ob(g);var k=h.getUint32(0,!0),l=h.getUint16(4,!0),m=h.getUint16(6,!0);h.setUint32(0,k,!1);h.setUint16(4,l,!1);h.setUint16(6,m,!1)}"status-pending"!=f&&(c.loaded=!0);"expired"==f&&(d=!0);g=jc(g).slice(0,32);a.U.set(g,f)});var e=b.expiration-Date.now();(0>e||d&&1E3>e)&&c&&!c.Mb&&(a.i.delete(b),fi(b));Uh(a)&&(a.m.resolve(), +a.K.X(ji))}function yh(a){var b=a.U,c=a.$;c.clear();b.forEach(function(d,e){return c.set(e,d)});b=Array.from(c.values());b.length&&b.every(function(d){return"expired"==d})&&a.u(new V(2,6,6014));a.D.Kf(gh(c))} +function ki(){var a,b,c,d,e,f,g,h,k,l,m,n,q,r,t,w,v,y,z,A,B,D,G,C,E,I,K,J,L,M,O,N,P,R,T;return Q(function(ca){if(1==ca.g){a="org.w3.clearkey com.widevine.alpha com.widevine.alpha.experiment com.microsoft.playready com.microsoft.playready.hardware com.microsoft.playready.recommendation com.microsoft.playready.recommendation.3000 com.microsoft.playready.recommendation.3000.clearlead com.chromecast.playready com.apple.fps.1_0 com.apple.fps com.huawei.wiseplay".split(" ");if(!(window.MediaKeys&&window.navigator&& +window.navigator.requestMediaKeySystemAccess&&window.MediaKeySystemAccess&&window.MediaKeySystemAccess.prototype.getConfiguration)){b={};c=u(a);for(d=c.next();!d.done;d=c.next())e=d.value,b[e]=null;return ca.return(b)}f="1.0 1.1 1.2 1.3 1.4 2.0 2.1 2.2 2.3".split(" ");g=["SW_SECURE_CRYPTO","SW_SECURE_DECODE","HW_SECURE_CRYPTO","HW_SECURE_DECODE","HW_SECURE_ALL"];h=["150","2000","3000"];k={"com.widevine.alpha":g,"com.widevine.alpha.experiment":g,"com.microsoft.playready.recommendation":h};l=[{contentType:'video/mp4; codecs="avc1.42E01E"'}, +{contentType:'video/webm; codecs="vp8"'}];m=[{contentType:'audio/mp4; codecs="mp4a.40.2"'},{contentType:'audio/webm; codecs="opus"'}];n={videoCapabilities:l,audioCapabilities:m,initDataTypes:["cenc","sinf","skd","keyids"]};q=[null,"cenc","cbcs","cbcs-1-9"];r=new Map;t=Rb();w=function(Y,Ma){var Na,Ea,va,Ka,Pa,za,ia,Aa,eb,fb,mb,xb,sb;return Q(function(Ua){switch(Ua.g){case 1:return ta(Ua,2),F(Ua,Ma.createMediaKeys(),5);case 5:Na=Ua.h;case 4:wa(Ua,3);break;case 2:return xa(Ua),Ua.return();case 3:va= +(Ea=Ma.getConfiguration().sessionTypes)?Ea.includes("persistent-license"):!1;t.fj()&&(va=!1);Ka=Ma.getConfiguration().videoCapabilities;Pa=Ma.getConfiguration().audioCapabilities;za={persistentState:va,encryptionSchemes:[],videoRobustnessLevels:[],audioRobustnessLevels:[],minHdcpVersions:[]};r.has(Y)&&r.get(Y)?za=r.get(Y):r.set(Y,za);(ia=Ka[0].encryptionScheme)&&!za.encryptionSchemes.includes(ia)&&za.encryptionSchemes.push(ia);(Aa=Ka[0].robustness)&&!za.videoRobustnessLevels.includes(Aa)&&za.videoRobustnessLevels.push(Aa); +(eb=Pa[0].robustness)&&!za.audioRobustnessLevels.includes(eb)&&za.audioRobustnessLevels.push(eb);if("getStatusForPolicy"in Na){fb=[];mb=u(f);xb=mb.next();for(sb={};!xb.done;sb={ge:void 0},xb=mb.next())sb.ge=xb.value,za.minHdcpVersions.includes(sb.ge)||fb.push(Na.getStatusForPolicy({minHdcpVersion:sb.ge}).then(function(re){return function(tc){"usable"!=tc||za.minHdcpVersions.includes(re.ge)||za.minHdcpVersions.push(re.ge)}}(sb)));return F(Ua,Promise.all(fb),0)}Ua.A(0)}})};v=function(Y,Ma,Na,Ea){var va, +Ka,Pa,za,ia,Aa,eb,fb,mb,xb,sb;return Q(function(Ua){switch(Ua.g){case 1:ta(Ua,2);va=Dd(n);Ka=u(va.videoCapabilities);for(Pa=Ka.next();!Pa.done;Pa=Ka.next())za=Pa.value,za.encryptionScheme=Ma,za.robustness=Na;ia=u(va.audioCapabilities);for(Aa=ia.next();!Aa.done;Aa=ia.next())eb=Aa.value,eb.encryptionScheme=Ma,eb.robustness=Ea;fb=Dd(va);fb.persistentState="required";fb.sessionTypes=["persistent-license"];mb=[fb,va];sb=Rb();return"MOBILE"==sb.Ia()?F(Ua,Cf(5,navigator.requestMediaKeySystemAccess(Y,mb)), +7):F(Ua,navigator.requestMediaKeySystemAccess(Y,mb),6);case 6:xb=Ua.h;Ua.A(5);break;case 7:xb=Ua.h;case 5:return F(Ua,w(Y,xb),8);case 8:wa(Ua,0);break;case 2:xa(Ua),H(Ua)}})};y=function(Y,Ma,Na,Ea){var va,Ka,Pa,za;return Q(function(ia){switch(ia.g){case 1:return ta(ia,2),va={type:"media-source",video:{contentType:l[0].contentType,width:640,height:480,bitrate:1,framerate:1},audio:{contentType:m[0].contentType,channels:2,bitrate:1,samplerate:1},keySystemConfiguration:{keySystem:Y,video:{encryptionScheme:Ma, +robustness:Na},audio:{encryptionScheme:Ma,robustness:Ea}}},Pa=Rb(),"MOBILE"==Pa.Ia()?F(ia,Cf(5,navigator.mediaCapabilities.decodingInfo(va)),7):F(ia,navigator.mediaCapabilities.decodingInfo(va),6);case 6:Ka=ia.h;ia.A(5);break;case 7:Ka=ia.h;case 5:return za=Ka.keySystemAccess,F(ia,w(Y,za),8);case 8:wa(ia,0);break;case 2:xa(ia),H(ia)}})};z=u(a);for(A=z.next();!A.done;A=z.next())B=A.value,r.set(B,null);D=function(Y){return"WEBKIT"===Rb().Na()&&"org.w3.clearkey"===Y?!1:!0};G=[];C=u(q);for(E=C.next();!E.done;E= +C.next())for(I=E.value,K=u(a),J=K.next();!J.done;J=K.next())L=J.value,D(L)&&(G.push(v(L,I,"","")),G.push(y(L,I,"","")));M=u(a);for(O=M.next();!O.done;O=M.next())for(N=O.value,P=u(k[N]||[]),R=P.next();!R.done;R=P.next())T=R.value,D(N)&&(G.push(v(N,null,T,"")),G.push(v(N,null,"",T)),G.push(y(N,null,T,"")),G.push(y(N,null,"",T)));return F(ca,Promise.all(G),2)}return ca.return(gh(r))})} +function fi(a){return Q(function(b){if(1==b.g)return ta(b,2),F(b,Cf(li,Promise.all([a.close().catch(function(){}),a.closed])),4);if(2!=b.g)return wa(b,0);xa(b);H(b)})} +function Bh(a){var b;return Q(function(c){b=Array.from(a.i.entries());a.i.clear();return F(c,Promise.all(b.map(function(d){d=u(d);var e=d.next().value,f=d.next().value;return Q(function(g){if(1==g.g)return ta(g,2),a.ea||a.C.has(e.sessionId)||"persistent-license"!==f.type||a.g.persistentSessionOnlinePlayback?F(g,fi(e),5):F(g,e.remove(),5);if(2!=g.g)return wa(g,0);xa(g);H(g)})})),0)})}function Jh(a){return(a.video?a.video.drmInfos:[]).concat(a.audio?a.audio.drmInfos:[])} +function zh(a){a.i.forEach(function(b,c){var d=b.Dh,e=c.expiration;isNaN(e)&&(e=Infinity);e!=d&&(a.D.onExpirationUpdated(c.sessionId,e),b.Dh=e)})}function Uh(a){a=a.i.values();return lb(a,function(b){return b.loaded})}function Th(a){for(var b=u(a.h&&a.h.keyIds||new Set([])),c=b.next();!c.done;c=b.next())if("usable"!==a.U.get(c.value))return!1;return!0} +function Ih(a,b){var c=[];b.forEach(function(d,e){c.push({keySystem:e,licenseServerUri:d,distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,serverCertificateUri:"",initData:[],keyIds:new Set})});a=u(a);for(b=a.next();!b.done;b=a.next())b=b.value,b.video&&(b.video.drmInfos=c),b.audio&&(b.audio.drmInfos=c)} +function $h(a,b,c,d,e,f,g,h){var k=[];a=u(a);for(var l=a.next(),m={};!l.done;m={Qa:void 0},l=a.next()){m.Qa=l.value;b.includes(m.Qa.encryptionScheme)||b.push(m.Qa.encryptionScheme);"org.w3.clearkey"==m.Qa.keySystem&&m.Qa.licenseServerUri.startsWith("data:application/json;base64,")?k.includes(m.Qa.licenseServerUri)||k.push(m.Qa.licenseServerUri):c.includes(m.Qa.licenseServerUri)||c.push(m.Qa.licenseServerUri);e.includes(m.Qa.serverCertificateUri)||e.push(m.Qa.serverCertificateUri);m.Qa.serverCertificate&& +(d.some(function(r){return function(t){return Jb(t,r.Qa.serverCertificate)}}(m))||d.push(m.Qa.serverCertificate));if(m.Qa.initData){l=u(m.Qa.initData);for(var n=l.next(),q={};!n.done;q={rh:void 0},n=l.next())q.rh=n.value,f.some(function(r){return function(t){var w=r.rh;return t.keyId&&t.keyId==w.keyId?!0:t.initDataType==w.initDataType&&Jb(t.initData,w.initData)}}(q))||f.push(q.rh)}if(m.Qa.keyIds)for(l=u(m.Qa.keyIds),n=l.next();!n.done;n=l.next())g.add(n.value);if(m.Qa.keySystemUris&&h)for(m=u(m.Qa.keySystemUris), +l=m.next();!l.done;l=m.next())h.add(l.value)}if(1==k.length)c.push(k[0]);else if(0>10)+96)+String.fromCharCode(((a&960)>>5)+96)+String.fromCharCode((a&31)+96)}} +function Ki(a,b,c){var d=a.W(),e=[],f=null;c&1&&(f=a.Ih());c&4&&a.skip(4);for(var g=0;ga?"0":"")+a};function Qi(a){if(!Ri){Ri=!0;var b=new Uint8Array([105,115,111,109]),c=new Uint8Array([97,118,99,49]),d=new Uint8Array([0,0,0,1]);Si=Ti("ftyp",b,d,b,c);b=Ti("dref",Ui);Vi=Ti("dinf",b)}this.g=a} +function Wi(a){for(var b=[],c=u(a.g),d=c.next();!d.done;d=c.next()){var e=b,f=e.push;var g=d.value;d=Ti;var h=g.id+1;var k=g.stream.width||0,l=g.stream.height||0;"audio"==g.type&&(l=k=0);var m=g.duration*g.timescale,n=Math.floor(m/(Xi+1));m=Math.floor(m%(Xi+1));h=new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3].concat(x(Yi(h,4)),[0,0,0,0],x(Yi(n,4)),x(Yi(m,4)),[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0],x(Yi(k,2)),[0,0],x(Yi(l, +2)),[0,0]));h=Ti("tkhd",h);k=Ti;n=g.duration*g.timescale;l=Math.floor(n/(Xi+1));n=Math.floor(n%(Xi+1));m=g.stream.language;m=m.charCodeAt(0)-96<<10|m.charCodeAt(1)-96<<5|m.charCodeAt(2)-96;l=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3].concat(x(Yi(g.timescale,4)),x(Yi(l,4)),x(Yi(n,4)),x(Yi(m,2)),[0,0]));l=Ti("mdhd",l);n=g;m=new Uint8Array([]);switch(n.type){case "video":m=Zi;break;case "audio":m=$i}n=Ti("hdlr",m);a:{switch(g.type){case "video":g=Ti("minf",Ti("vmhd",aj),Vi,bj(g));break a; +case "audio":g=Ti("minf",Ti("smhd",cj),Vi,bj(g));break a}g=new Uint8Array([])}g=k("mdia",l,n,g);d=d("trak",h,g);f.call(e,d)}b=kc.apply(dc,x(b));f=a.g[0];c=Ti;d=f.duration*f.timescale;e=Math.floor(d/(Xi+1));d=Math.floor(d%(Xi+1));e=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3].concat(x(Yi(f.timescale,4)),x(Yi(e,4)),x(Yi(d,4)),[0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255, +255]));e=Ti("mvhd",e);d=[];a=u(a.g);for(k=a.next();!k.done;k=a.next())g=d,h=g.push,k=new Uint8Array([0,0,0,0].concat(x(Yi(k.value.id+1,4)),[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0])),k=Ti("trex",k),h.call(g,k);a=kc.apply(dc,x(d));a=Ti("mvex",a);d=[];if(f.encrypted){f=u(f.stream.drmInfos);for(g=f.next();!g.done;g=f.next())if(g=g.value,g.initData)for(g=u(g.initData),h=g.next();!h.done;h=g.next())d.push(h.value.initData);f=kc.apply(dc,x(d))}else f=new Uint8Array([]);a=c("moov",e,b,a,f);b=new Uint8Array(Si.byteLength+ +a.byteLength);b.set(Si);b.set(a,Si.byteLength);return b} +function bj(a){var b=Ti,c="aac";a.codecs.includes("mp3")?c="mp3":a.codecs.includes("ac-3")?c=Rb().we()?"ec-3":"ac-3":a.codecs.includes("ec-3")?c="ec-3":a.codecs.includes("opus")&&(c="opus");var d=new Uint8Array([]);switch(a.type){case "video":if(a.codecs.includes("avc1")){c=a.stream.width||0;d=a.stream.height||0;if(0>8,f[n++]=g[k].length&255,f.set(g[k],n),n+=g[k].length;f[n++]=h.length;for(g=0;g>8,f[n++]=h[g].length&255,f.set(h[g],n),n+=h[g].length;e=e("avcC",f)}c=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0].concat(x(Yi(c,2)),x(Yi(d,2)),[0,72,0,0,0,72, +0,0,0,0,0,0,0,1,19,118,105,100,101,111,106,115,45,99,111,110,116,114,105,98,45,104,108,115,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]));d="avc1";h=ej(a);g=new Uint8Array([]);a.encrypted&&(g=fj(0,a.stream,a.codecs),d="encv");d=Ti(d,c,e,h,g)}else a.codecs.includes("hvc1")&&(d=a.stream.width||0,e=a.stream.height||0,c=new Uint8Array([]),0>>1,h<<7|e<<3,6,1,2]));c=c("esds",d)}d="mp4a";e=new Uint8Array([]);a.encrypted&&(e=fj(0,a.stream,a.codecs),d="enca");a=Ti(d,gj(a),c,e)}d=a}a=Ti("stsd",hj,d);return b("stbl",a,Ti("stts",ij),Ti("stsc",jj),Ti("stsz",kj),Ti("stco",lj))}function ej(a){if(!a.cb&&!a.fb)return new Uint8Array([]);var b=a.fb;a=new Uint8Array([].concat(x(Yi(a.cb,4)),x(Yi(b,4))));return Ti("pasp",a)} +function gj(a){return new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,a.stream.channelsCount||2,0,16,0,0,0,0].concat(x(Yi(a.stream.audioSamplingRate||44100,2)),[0,0]))} +function fj(a,b,c){a=Ti;c=new Uint8Array([].concat(x(Yi(mj(c.split(".")[0]),4))));c=Ti("frma",c);var d="cenc";var e=b.drmInfos[0];e&&e.encryptionScheme&&(d=e.encryptionScheme);d=new Uint8Array([0,0,0,0].concat(x(Yi(mj(d),4)),[0,1,0,0]));d=Ti("schm",d);e=Ti;var f=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);b=u(b.drmInfos);for(var g=b.next();!g.done;g=b.next())if((g=g.value)&&g.keyIds&&g.keyIds.size){g=u(g.keyIds);for(var h=g.next();!h.done;h=g.next())f=dj(h.value)}b=new Uint8Array([0,0,0,0,0, +0,1,8]);b=Ti("tenc",b,f);return a("sinf",c,d,e("schi",b))} +function nj(a){var b=[];a=u(a.g);for(var c=a.next();!c.done;c=a.next()){c=c.value;var d=b.push,e=d.apply;var f=Ti;var g=new Uint8Array([0,0,0,0].concat(x(Yi(c.data?c.data.Yb:0,4))));g=Ti("mfhd",g);var h;var k=c.data?c.data.Bb:[];var l=new Uint8Array(4+k.length);for(h=0;h>8*b&255);return c}function dj(a){for(var b=new Uint8Array(a.length/2),c=0;c>24&255;e[1]=d>>16&255;e[2]=d>>8&255;e[3]=d&255;e.set(c,4);c=0;for(d=8;c>8*m&255);a.set(new Uint8Array(l),h);a.set(k,h+4);h=u(g);for(k=h.next();!k.done;k=h.next())k=k.value,vj(a,k.start,k.size+4)}}return a} +function sj(a,b,c,d,e,f){var g=fj(new Qi([]),a,d.name),h=b.subarray(d.start,d.start+d.size);a=new Uint8Array(d.size+g.byteLength);a.set(h,0);Ob(a).setUint32(4,f);a.set(g,d.size);vj(a,0,a.byteLength);f=new Uint8Array(b.byteLength+a.byteLength);d=Rb().wf()?d.start:d.start+d.size;g=b.subarray(d);f.set(b.subarray(0,d));f.set(a,d);f.set(g,d+a.byteLength);b=u(e);for(e=b.next();!e.done;e=b.next())e=e.value,vj(f,e.start,e.size+a.byteLength);a=Ob(f,c.start);c=qh(c);b=a.getUint32(c);a.setUint32(c,b+1);return f} +function vj(a,b,c){a=Ob(a,b);b=a.getUint32(0);0!=b&&(1==b?(a.setUint32(8,c>>32),a.setUint32(12,c&4294967295)):a.setUint32(0,c))} +function wj(a){function b(e){d.push({start:e.start,size:e.size});ph(e)}var c=Kb(a),d=[];(new kh).box("moov",b).box("trak",b).box("mdia",b).box("minf",b).box("stbl",b).box("stsd",function(e){d.push({start:e.start,size:e.size});for(var f=Ob(c,e.start),g=0;ga.end(0)-a.start(0)}function Ej(a){return!a||Dj(a)?null:a.length?a.end(a.length-1):null}function Fj(a,b){return!a||!a.length||Dj(a)||b>a.end(a.length-1)?!1:b>=a.start(0)}function Gj(a,b){if(!a||!a.length||Dj(a))return 0;var c=0;a=u(Hj(a));for(var d=a.next();!d.done;d=a.next()){var e=d.value;d=e.start;e=e.end;e>b&&(c+=e-Math.max(d,b))}return c} +function Ij(a,b,c){if(!a||!a.length||Dj(a))return null;a=Hj(a).findIndex(function(d,e,f){return d.start>b&&(0==e||f[e-1].end-b<=c)});return 0<=a?a:null}function Hj(a){if(!a)return[];for(var b=[],c=0;ca[b+3]&&255>a[b+4]&&128>a[b+6]&&128>a[b+7]&&128>a[b+8]&&128>a[b+9]?!0:!1}function Uj(a,b){return b+10<=a.length&&51===a[b]&&68===a[b+1]&&73===a[b+2]&&255>a[b+3]&&255>a[b+4]&&128>a[b+6]&&128>a[b+7]&&128>a[b+8]&&128>a[b+9]?!0:!1}function Vj(a,b){var c=(a[b]&127)<<21;c|=(a[b+1]&127)<<14;c|=(a[b+2]&127)<<7;return c|=a[b+3]&127} +function Wj(a){var b={key:a.type,description:"",data:"",mimeType:null,pictureType:null};if("APIC"===a.type){if(2>a.size||3!==a.data[0])return null;var c=a.data.subarray(1).indexOf(0);if(-1===c)return null;var d=Wb(Kb(a.data,1,c)),e=a.data[2+c],f=a.data.subarray(3+c).indexOf(0);if(-1===f)return null;var g=Wb(Kb(a.data,3+c,f)),h;"--\x3e"===d?h=Wb(Kb(a.data,4+c+f)):h=Lb(a.data.subarray(4+c+f));b.mimeType=d;b.pictureType=e;b.description=g;b.data=h;return b}if("TXXX"===a.type){if(2>a.size||3!==a.data[0])return null; +d=a.data.subarray(1).indexOf(0);if(-1===d)return null;c=Wb(Kb(a.data,1,d));a=Wb(Kb(a.data,2+d)).replace(/\0*$/,"");b.description=c;b.data=a;return b}if("WXXX"===a.type){if(2>a.size||3!==a.data[0])return null;d=a.data.subarray(1).indexOf(0);if(-1===d)return null;c=Wb(Kb(a.data,1,d));a=Wb(Kb(a.data,2+d)).replace(/\0*$/,"");b.description=c;b.data=a;return b}if("PRIV"===a.type){if(2>a.size)return null;c=a.data.indexOf(0);if(-1===c)return null;c=Wb(Kb(a.data,0,c));b.description=c;"com.apple.streaming.transportStreamTimestamp"== +c?(c=a.data.subarray(c.length+1),a=c[3]&1,c=(c[4]<<23)+(c[5]<<15)+(c[6]<<7)+c[7],c/=45,a&&(c+=4.772185884E7),b.data=c):(a=Lb(a.data.subarray(c.length+1)),b.data=a);return b}if("T"===a.type[0]){if(2>a.size||3!==a.data[0])return null;a=Wb(a.data.subarray(1)).replace(/\0*$/,"");b.data=a;return b}return"W"===a.type[0]?(a=Wb(a.data).replace(/\0*$/,""),b.data=a,b):a.data?(b.data=Lb(a.data),b):null} +function Xj(a){for(var b=0,c=[];Tj(a,b);){var d=Vj(a,b+6);a[b+5]>>6&1&&(b+=10);b+=10;for(d=b+d;b+10>6&1&&(d+=10),d+=10,d+=Vj(a,b+6),Uj(a,b+10)&&(d+=10),b+=d;return 0>>32-c;a.g-=c;0>>b))return a.h<<=b,a.g-=b,b;bk(a);return b+ek(a)}function fk(a){ck(a,1+ek(a))}function gk(a){var b=ek(a);return dk(a,b+1)-1}function hk(a){a=gk(a);return 1&a?1+a>>>1:-1*(a>>>1)}function ik(a){return 1===dk(a,1)}function jk(a){return dk(a,8)} +function kk(a,b){for(var c=8,d=8,e=0;ea.length)return this;for(var b=Math.max(0,nk(a)),c=a.length-(a.length+b)%188,d=!1,e=b;e>4){var h=e+5+a[e+4];if(h==e+188)continue}else h=e+4;switch(g){case 0:f&&(h+=a[h]+1);this.G=(a[h+10]&31)<<8|a[h+11];break;case 17:case 8191:break;case this.G:f&&(h+=a[h]+1);f=a;g={audio:-1,video:-1,uf:-1,audioCodec:"",videoCodec:""};var k=h+3+((f[h+1]&15)<<8|f[h+2])-4;for(h+=12+((f[h+10]&15)<<8|f[h+11]);h< +k;){var l=(f[h+1]&31)<<8|f[h+2],m=(f[h+3]&15)<<8|f[h+4];switch(f[h]){case 6:if(0b.byteLength-6)return null;var d=b[7];if(d&192){var e=536870912*(b[9]&14)+4194304*(b[10]&255)+16384*(b[11]&254)+128*(b[12]&255)+(b[13]&254)/2;null==a.u&&(a.u=e);c.pts=pk(e,a.u);a.u=c.pts;c.dts=c.pts;d&64&&(d=536870912*(b[14]&14)+4194304*(b[15]&255)+16384*(b[16]&254)+128*(b[17]&255)+(b[18]&254)/2,null==a.s&&(a.s=d),c.dts=pk(d, +a.s));a.s=c.dts}a=b[8]+9;if(b.byteLength<=a)return null;c.data=b.subarray(a);return c}p.Nl=function(a){Uc("TsParser.parseAvcNalus","Please use parseNalus function instead.");return this.Fh(a,{qe:null,state:null})}; +p.Fh=function(a,b){var c=a.pts?a.pts/9E4:null;a=a.data;var d=a.byteLength,e=1;"hvc"==this.m&&(e=2);var f=b.state||0,g=f,h=0,k=[],l=-1,m=0;-1==f&&(l=0,m="hvc"==this.m?a[0]>>1&63:a[0]&31,f=0,h=1);for(;h>1&63:a[h]&31,l=h,f=0):f=-1}else f=0;else f=3;else f=n?0:1}0<=l&&0<=f&&k.push({data:a.subarray(l+e,d),fullData:a.subarray(l,d),type:m,time:c,state:f});!k.length&&b.qe&&(c=k.length?k[k.length-1]:b.qe)&&(c.data=kc(c.data,a),c.fullData=kc(c.fullData,a));b.state=f;return k}; +p.getMetadata=function(){for(var a=[],b=u(this.l),c=b.next();!c.done;c=b.next())c=kc.apply(dc,x(c.value)),(c=ok(this,c))&&a.push({cueTime:c.pts?c.pts/9E4:null,data:c.data,frames:Xj(c.data),dts:c.dts,pts:c.pts});return a}; +p.yb=function(){if(this.i.length&&!this.h.length){for(var a=!1,b=u(this.i),c=b.next();!c.done;c=b.next()){var d=kc.apply(dc,x(c.value)),e=ok(this,d);c=this.h.length?this.h[this.h.length-1]:null;e&&null!=e.pts&&null!=e.dts&&(!c||c.pts!=e.pts&&c.dts!=e.dts)?(this.h.length&&e.dts<(c.dts||0)&&(a=!0),this.h.push(e)):this.h.length&&(d=e?e.data:d)&&(c=this.h.pop(),c.data=kc(c.data,d),this.h.push(c))}a&&(this.h=this.h.sort(function(f,g){var h=(f.pts||0)-(g.pts||0);return(f.dts||0)-(g.dts||0)||h}))}return this.h}; +p.Wc=function(a){a=void 0===a?!0:a;if(this.j.length&&!this.g.length){for(var b=!1,c=u(this.j),d=c.next();!d.done;d=c.next()){var e=kc.apply(dc,x(d.value)),f=ok(this,e);d=this.g.length?this.g[this.g.length-1]:null;f&&null!=f.pts&&null!=f.dts&&(!d||d.pts!=f.pts&&d.dts!=f.dts)?(this.g.length&&f.dts<(d.dts||0)&&(b=!0),this.g.push(f)):this.g.length&&(e=f?f.data:e)&&(d=this.g.pop(),d.data=kc(d.data,e),this.g.push(d))}if(a){c={qe:null,state:null};d=[];e=u(this.g);for(f=e.next();!f.done;f=e.next())f=f.value, +f.nalus=this.Fh(f,c),f.nalus.length&&(d.push(f),c.qe=f.nalus[f.nalus.length-1]);this.g=d}b&&(this.g=this.g.sort(function(g,h){var k=(g.pts||0)-(h.pts||0);return(g.dts||0)-(h.dts||0)||k}))}return a?this.g:(a=this.g,this.g=[],a)};p.getStartTime=function(a){if("audio"==a){a=null;var b=this.yb();b.length&&(a=b[0],a=Math.min(a.dts,a.pts)/9E4);return a}return"video"==a?(a=null,b=this.Wc(!1),b.length&&(a=b[0],a=Math.min(a.dts,a.pts)/9E4),a):null};p.ae=function(){return{audio:this.B,video:this.m}}; +p.tf=function(){for(var a=[],b=u(this.Wc()),c=b.next();!c.done;c=b.next())a.push.apply(a,x(c.value.nalus));return a};p.kl=function(){Uc("TsParser.getVideoResolution","Please use getVideoInfo function instead.");var a=this.mh();return{height:a.height,width:a.width}};p.mh=function(){return"hvc"==this.m?qk(this):rk(this)};function sk(a){var b=a.Wc();return 1h?kk(c,16):kk(c,64))}}fk(c);g=gk(c);if(0===g)gk(c);else if(1===g)for(ck(c,1),fk(c),fk(c),g=gk(c),h=0;hy;y++)dk(d,2);for(y=0;yC;C++)G|=(D>>C&1)<<31-C;return G>>>0}(k);g=1==g?"H":"L";f="hvc1"+("."+["","A","B","C"][f]+h);f+="."+d.toString(16).toUpperCase();f+="."+g+t;r&&(f+="."+r.toString(16).toUpperCase());q&&(f+="."+q.toString(16).toUpperCase());n&&(f+="."+n.toString(16).toUpperCase());m&&(f+="."+m.toString(16).toUpperCase());l&&(f+="."+l.toString(16).toUpperCase()); +c&&(f+="."+c.toString(16).toUpperCase());b.codec=f;b.frameRate=sk(a);return b}function pk(a,b){var c=1;for(a>b&&(c=-1);4294967296nk(a)?!1:!0}function nk(a){for(var b=Math.min(1E3,a.length-564),c=0;ca.start(0)?0:a.length?a.start(0):null):a=null;return a}function Kk(a,b){return a.l.size?b==rc?a.h.h:Ej(Jk(a,b)):null}function Lk(a,b,c){if(b==rc)return a=a.h,null==a.h||a.hb?F(g,Ok(e,a,function(){return Uk(e,a,b,c)},null),5):g.A(0)):e.m?F(g,Ok(e,f.ba,function(){return Uk(e,f.ba,b,c)},null),0):g.A(0)})}; +function Vk(a,b){var c;return Q(function(d){return 1==d.g?(c=uc,b==c.Xa?a.h?F(d,a.h.remove(0,Infinity),0):d.return():F(d,Ok(a,b,function(){return Uk(a,b,0,a.i.duration)},null),4)):a.m?F(d,Ok(a,c.ba,function(){return Uk(a,c.ba,0,a.i.duration)},null),0):d.A(0)})}p.flush=function(a){var b=this,c;return Q(function(d){return 1==d.g?(c=uc,a==c.Xa?d.return():F(d,Ok(b,a,function(){b.g.currentTime-=.001;Gk(b,a)},null),2)):b.m?F(d,Ok(b,c.ba,function(){var e=c.ba;b.g.currentTime-=.001;Gk(b,e)},null),0):d.A(0)})}; +function Wk(a,b,c,d,e,f,g,h,k){var l,m,n;return Q(function(q){if(1==q.g){l=uc;if(b==l.Xa)return f||(a.h.u=c),tf(a.h,d,e),q.return();m=[];return F(q,Xk(a,b,g,h,k),2)}n=q.h;n||(m.push(Ok(a,b,function(){return Pk(a,b)},null)),a.m&&m.push(Ok(a,l.ba,function(){return Pk(a,l.ba)},null)));f||(m.push(Ok(a,b,function(){return Qk(a,b,c)},null)),a.m&&m.push(Ok(a,l.ba,function(){return Qk(a,l.ba,c)},null)));if(0!=d||Infinity!=e)m.push(Ok(a,b,function(){var r=a.l.get(b);r.appendWindowStart=0;r.appendWindowEnd= +e;r.appendWindowStart=d;Gk(a,b)},null)),a.m&&m.push(Ok(a,l.ba,function(){var r=l.ba,t=a.l.get(r);t.appendWindowStart=0;t.appendWindowEnd=e;t.appendWindowStart=d;Gk(a,r)},null));return m.length?F(q,Promise.all(m),0):q.A(0)})} +function Yk(a,b,c){var d,e;return Q(function(f){if(1==f.g){d=uc;if(b==d.Xa)return f.return();b==d.Ea&&(a.Ma=new Hg);if(!a.F||(e=Kk(a,b))&&.1>Math.abs(e-c))return f.return();Ok(a,b,function(){return Pk(a,b)},null);a.m&&Ok(a,d.ba,function(){return Pk(a,d.ba)},null);return F(f,Ok(a,b,function(){return Qk(a,b,c)},null),2)}return a.m?F(f,Ok(a,d.ba,function(){return Qk(a,d.ba,c)},null),0):f.A(0)})} +p.endOfStream=function(a){var b=this;return Q(function(c){return F(c,Zk(b,function(){Bk(b)||Ck(b)||(a?b.i.endOfStream(a):b.i.endOfStream())}),0)})};p.vb=function(a){var b=this;return Q(function(c){return F(c,Zk(b,function(){if(b.u.durationReductionEmitsUpdateEnd&&ac&&(c+=.001);var d=!0;"HLS"==a.P&&(d=Kk(a,b),d=!d||.15=b.s&&d&&!b.i)b.j&&b.j(b.g,e),b.i=!0,b.g=c.g.currentTime;b=!d}b&&(b=a.g.currentTime,c=a.g.buffered,d=Ij(c,b,a.h.gapDetectionThreshold),null==d||0==d&&!a.B||(e=c.start(d), +(f=a.h.gapPadding)&&(e=Math.ceil(100*(e+f))/100),e>=a.C.Ib()||.001>e-b||(0!=d&&c.end(d-1),a.g.currentTime=e,b==a.j&&(a.j=e),a.D++,a.u(new U("gapjumped")))))}}} +function sl(a){if(!a.h.stallEnabled)return null;var b=a.h.stallThreshold,c=a.h.stallSkip;return new vl(new wl(a.g),b,function(){var d;return Q(function(e){if(1==e.g)return d=Hj(a.g.buffered),d.length?c?(a.g.currentTime+=c,e.A(2)):F(e,a.g.play(),3):e.return();if(2!=e.g){if(!a.g)return e.return();a.g.pause();a.g.play()}a.G++;a.u(new U("stalldetected"));H(e)})})}function vl(a,b,c){this.h=a;this.m=ul(a);this.g=a.g.currentTime;this.l=Date.now()/1E3;this.i=!1;this.s=b;this.j=c} +vl.prototype.release=function(){this.h&&this.h.release();this.j=this.h=null};function wl(a){var b=this;this.g=a;this.h=new Oc;this.i=!1;this.h.o(this.g,"audiofocuspaused",function(){b.i=!0});this.h.o(this.g,"audiofocusgranted",function(){b.i=!1});this.h.o(this.g,"audiofocuslost",function(){b.i=!0})} +function ul(a){if(a.g.paused||0==a.g.playbackRate||a.i||0==a.g.buffered.length)var b=!1;else a:{b=a.g.currentTime;a=u(Hj(a.g.buffered));for(var c=a.next();!c.done;c=a.next())if(c=c.value,!(bc.end-.5)){b=!0;break a}b=!1}return b}wl.prototype.release=function(){this.h&&this.h.release();this.h=null};function xl(a,b,c,d){b==HTMLMediaElement.HAVE_NOTHING||a.readyState>=b?d():(b=yl.value().get(b),c.qa(a,b,d))}var yl=new Qb(function(){return new Map([[HTMLMediaElement.HAVE_METADATA,"loadedmetadata"],[HTMLMediaElement.HAVE_CURRENT_DATA,"loadeddata"],[HTMLMediaElement.HAVE_FUTURE_DATA,"canplay"],[HTMLMediaElement.HAVE_ENOUGH_DATA,"canplaythrough"]])});function zl(a,b,c,d){var e=this;this.g=a;this.m=b;this.u=c;this.l=null;this.j=function(){null==e.l&&(e.l=d());return e.l};this.s=!1;this.h=new Oc;this.i=new Al(a);xl(this.g,HTMLMediaElement.HAVE_METADATA,this.h,function(){Bl(e,e.j())})}zl.prototype.release=function(){this.h&&(this.h.release(),this.h=null);null!=this.i&&(this.i.release(),this.i=null);this.m=function(){};this.g=null};function Cl(a){return a.s?a.g.currentTime:a.j()} +function Dl(a,b){0Math.abs(a.g.currentTime-b)?Fl(a):(a.h.qa(a.g,"seeking",function(){Fl(a)}),El(a.i,a.g.currentTime&&0!=a.g.currentTime?a.g.currentTime:b))}function Fl(a){a.s=!0;a.h.o(a.g,"seeking",function(){return a.m()});a.u(a.g.currentTime)} +function Al(a){var b=this;this.g=a;this.m=10;this.j=this.l=this.i=0;this.h=new yf(function(){0>=b.i?b.h.stop():b.g.currentTime!=b.l||b.g.currentTime===b.j?b.h.stop():(b.g.currentTime=b.j,b.i--)})}Al.prototype.release=function(){this.h&&(this.h.stop(),this.h=null);this.g=null};function El(a,b){a.l=a.g.currentTime;a.j=b;a.i=a.m;a.g.currentTime=b;a.h.ya(.1)};function Gl(a){this.g=a;this.i=!1;this.h=null;this.j=new Oc}p=Gl.prototype;p.ready=function(){function a(){if(null==b.h||0==b.h&&Infinity!=b.g.duration)b.i=!0;else{var c=b.g.currentTime,d=null;if("number"===typeof b.h)d=b.h;else if(b.h instanceof Date){var e=Hl(b);null!==e&&(d=b.h.getTime()/1E3-e,d=Il(b,d))}null==d?b.i=!0:(0>d&&(d=Math.max(0,c+d)),c!=d?(b.j.qa(b.g,"seeking",function(){b.i=!0}),b.g.currentTime=d):b.i=!0)}}var b=this;xl(this.g,HTMLMediaElement.HAVE_FUTURE_DATA,this.j,function(){a()})}; +p.release=function(){this.j&&(this.j.release(),this.j=null);this.g=null};p.rg=function(a){this.h=this.i?this.h:a};p.Te=function(){var a=this.i?this.g.currentTime:this.h;a instanceof Date&&(a=a.getTime()/1E3-(Hl(this)||0),a=Il(this,a));return a||0};p.ri=function(){return 0};p.pi=function(){return 0};p.ij=function(){};p.Wi=function(){var a=Ej(this.g.buffered);return null!=a&&a>=this.g.duration-1};function Hl(a){return a.g.getStartDate&&(a=a.g.getStartDate().getTime(),!isNaN(a))?a/1E3:null} +function Il(a,b){a=a.g.seekable;0l-k&&(k=l-3);ha.g.getDuration()?a.g.bc():a.g.Ib():b instanceof Date?b=b.getTime()/1E3-(a.g.m||a.g.i):0>b&&(b=a.g.Ib()+b);return Nl(a,Ml(a,b))}p.ij=function(){this.j.Lf()};p.Wi=function(){if(this.g.T()){var a=this.g.Cc(),b=Ej(this.h.buffered);if(null!=b&&b>=a)return!0}return!1}; +function Nl(a,b){var c=a.g.getDuration();return b>=c?c-a.l.durationBackoff:b}function Kl(a,b){var c=a.l.rebufferingGoal,d=a.l.safeSeekOffset,e=a.g.bc(),f=a.g.Ib(),g=a.g.getDuration();3>f-e&&(e=f-3);var h=a.g.ce(c),k=a.g.ce(d);c=a.g.ce(c+d);return b>=g?Nl(a,b):b>f?f-a.l.safeSeekEndOffset:b=h||Fj(a.h.buffered,b)?b:c}function Ml(a,b){var c=a.g.bc();if(ba?a:b};function Ol(a){this.g=a;this.m=null;this.i=0;this.s=!1}p=Ol.prototype;p.getNumReferences=function(){return this.g.length};p.getNumEvicted=function(){return this.i};p.release=function(){this.s||(this.g=[],this.m&&this.m.stop(),this.m=null)};p.Hl=function(){this.s=!0};p.Gb=function(a){for(var b=u(this.g),c=b.next();!c.done;c=b.next())a(c.value)};function bg(a){return a.g[0]||null} +p.find=function(a){for(var b=this.g.length-1,c=b;0<=c;--c){var d=this.g[c],e=c=d.startTime&&aa||a>=this.g.length?null:this.g[a]};p.offset=function(a){if(!this.s)for(var b=u(this.g),c=b.next();!c.done;c=b.next())c.value.offset(a)}; +p.Ff=function(a){if(!this.s&&a.length){var b=Math.round(1E3*a[0].startTime)/1E3;this.g=this.g.filter(function(c){return Math.round(1E3*c.startTime)/1E3b&&(0==c.g.length||d.endTime>c.g[0].startTime)});this.Ff(a);this.hb(b)};p.hb=function(a){if(!this.s){var b=this.g.length;this.g=this.g.filter(function(c){return c.endTime>a});this.i+=b-this.g.length}}; +p.vd=function(a,b,c){c=void 0===c?!1:c;if(!this.s){for(;this.g.length;)if(this.g[this.g.length-1].startTime>=b)this.g.pop();else break;for(;this.g.length;)if(this.g[0].endTime<=a)this.g.shift(),c||this.i++;else break;0!=this.g.length&&(a=this.g[this.g.length-1],b=new zj(a.startTime,b,a.D,a.startByte,a.endByte,a.ha,a.timestampOffset,a.appendWindowStart,a.appendWindowEnd,a.g,a.tilesLayout,a.C,a.h,a.status,a.aesKey),b.mimeType=a.mimeType,b.codecs=a.codecs,b.i=a.i,this.g[this.g.length-1]=b)}}; +p.hg=function(a,b){var c=this;this.s||(this.m&&this.m.stop(),this.m=new yf(function(){var d=b();d?c.g.push.apply(c.g,x(d)):(c.m.stop(),c.m=null)}),this.m.ya(a))};Ol.prototype[Symbol.iterator]=function(){return this.ac(0)}; +Ol.prototype.ac=function(a,b,c){b=void 0===b?!1:b;c=void 0===c?!1:c;var d=this.find(a);if(null==d)return null;var e=this.get(d);c?d++:d--;var f=-1;if(e&&0=h.startTime&&a=a.g.length&&(this.h++,this.g=0,a=this.i.get(this.h));return a&&0this.g&&(this.h--,this.g=(a=this.i.get(this.h))&&0=this.g);)this.g--,b=a.g[this.g]}; +S("shaka.media.SegmentIterator",Pl);Pl.prototype.resetToLastIndependent=Pl.prototype.Mh;Pl.prototype.next=Pl.prototype.next;Pl.prototype.current=Pl.prototype.current;Pl.prototype.currentPosition=Pl.prototype.kk;Pl.prototype.setReverse=Pl.prototype.Od;function Rl(){Ol.call(this,[]);this.h=[]}pa(Rl,Ol);p=Rl.prototype;p.clone=function(){var a=new Rl;a.h=this.h.slice();a.i=this.i;return a};p.release=function(){for(var a=u(this.h),b=a.next();!b.done;b=a.next())b.value.release();this.h=[]}; +p.Gb=function(a){for(var b=u(this.h),c=b.next();!c.done;c=b.next())c.value.Gb(a)};function Sl(a,b){a=u(a.h);for(var c=a.next();!c.done;c=a.next())b(c.value)}p.find=function(a){for(var b=this.i,c=u(this.h),d=c.next();!d.done;d=c.next()){d=d.value;var e=d.find(a);if(null!=e)return e+b;b+=d.getNumEvicted()+d.getNumReferences()}return null};function Tl(a,b){a=u(a.h);for(var c=a.next();!c.done;c=a.next())if(c=c.value,null!=c.find(b))return c.hf();return-1} +p.get=function(a){for(var b=this.i,c=u(this.h),d=c.next();!d.done;d=c.next()){d=d.value;var e=d.get(a-b);if(e)return e;e=d.getNumReferences();b+=d.getNumEvicted()+e}return null};p.offset=function(){};p.Ff=function(){};p.hb=function(a){for(var b=u(this.h),c=b.next();!c.done;c=b.next())c.value.hb(a);for(;1=c});0<=b?d.splice(b,d[b].position==c?1:0,a):d.push(a)} +Yl.prototype.j=function(a){for(var b=u(this.g.values()),c=b.next();!c.done;c=b.next()){c=c.value;var d=c.Lg;a:{var e=c.ve;for(var f=e.length-1;0<=f;f--){var g=e[f];if(g.position<=a){e=g.Cd;break a}}e=null}f=e&&!(d===e||d&&e&&d.bandwidth==e.bandwidth&&d.audioSamplingRate==e.audioSamplingRate&&d.codecs==e.codecs&&d.contentType==e.contentType&&d.frameRate==e.frameRate&&d.height==e.height&&d.mimeType==e.mimeType&&d.channelsCount==e.channelsCount&&d.pixelAspectRatio==e.pixelAspectRatio&&d.width==e.width); +g=e&&d&&e.label&&d.label&&d.label!==e.label;var h=e&&d&&e.language&&d.language&&d.language!==e.language;d=e&&d&&e.roles&&d.roles&&!ud(d.roles,e.roles);(g||h||d)&&bm(this,a,e.contentType)&&(c.Lg=e,d=new U("audiotrackchange",new Map([["quality",e],["position",a]])),this.dispatchEvent(d));f&&bm(this,a,e.contentType)&&(c.Lg=e,JSON.stringify(e),c=new U("qualitychange",new Map([["quality",e],["position",a]])),this.dispatchEvent(c))}}; +function bm(a,b,c){return(a=a.h()[c])&&0=a[0].start&&b=d?!1:!0})}else b.ve=[]} +function cm(a){var b={bandwidth:a.bandwidth||0,audioSamplingRate:null,codecs:a.codecs,contentType:a.type,frameRate:null,height:null,mimeType:a.mimeType,channelsCount:null,pixelAspectRatio:null,width:null,label:null,roles:a.roles,language:null};"video"==a.type&&(b.frameRate=a.frameRate||null,b.height=a.height||null,b.pixelAspectRatio=a.pixelAspectRatio||null,b.width=a.width||null);"audio"==a.type&&(b.audioSamplingRate=a.audioSamplingRate,b.channelsCount=a.channelsCount,b.label=a.label||null,b.language= +a.language);return b};function dm(a){jb.call(this);this.h=new Map;this.i=a;this.g=null}pa(dm,jb);dm.prototype.release=function(){this.h.clear();this.g&&(this.g.stop(),this.g=null);jb.prototype.release.call(this)};function em(a,b){var c=b.schemeIdUri+"_"+b.id+"_"+(b.startTime.toFixed(1)+"_"+b.endTime.toFixed(1));a.h.has(c)||(a.h.set(c,b),b=new U("regionadd",new Map([["region",b]])),a.dispatchEvent(b),fm(a))} +function fm(a){a.g||(a.g=(new yf(function(){for(var b=a.i(),c=u(a.h),d=c.next();!d.done;d=c.next()){var e=u(d.value);d=e.next().value;e=e.next().value;e.endTimed.endTime&&om(this,d);b&&mm(this)}; +gm.prototype.Od=function(a){this.s=a;this.g&&this.g.Od(a)};function mm(a){for(var b=Array.from(a.h.keys()),c=u(a.j.keys()),d=c.next(),e={};!d.done;e={sh:void 0},d=c.next())e.sh=d.value,b.some(function(f){return function(g){return yj(g.ha,f.sh)}}(e))||om(a,e.sh)}function qm(a,b){a.m=b;for(var c=Array.from(a.h.keys());c.length>b;){var d=c.pop();d&&om(a,d)}mm(a)}function rm(a,b){b&&b!==a.i&&(pm(a),a.i=b)}function om(a,b){var c=a.h;b instanceof xj&&(c=a.j);a=c.get(b);c.delete(b);a&&a.abort()} +function km(a){this.g=a;this.se=this.bi=null}function lm(a,b,c){var d=new Uint8Array(0);a.se=a.g(b,c,function(e){return Q(function(f){if(1==f.g)return 0>3,31===K&&C.Oa()&&(K=32+((I&7)<<3)+((C.aa()&224)>>5)),E+="."+K));g.push(E);k=!0}).box("ac-3",e).box("ec-3",e).box("ac-4",e).box("Opus",e).box("fLaC",e).box("avc1",d).box("avc3",d).box("hev1",d).box("hvc1",d).box("dva1",d).box("dvav",d).box("dvh1",d).box("dvhe",d).box("vp09", +d).box("av01",d).box("avcC",function(C){var E=y||"";switch(y){case "dvav":E="avc3";break;case "dva1":E="avc1"}C=C.reader;C.skip(1);C=E+"."+Oi(C.aa())+Oi(C.aa())+Oi(C.aa());h.push(C);l=!0}).box("hvcC",function(C){var E=y||"";switch(y){case "dvh1":E="hvc1";break;case "dvhe":E="hev1"}var I=C.reader;I.skip(1);C=I.aa();var K=["","A","B","C"][C>>6],J=C&31,L=I.W(),M=(C&32)>>5?"H":"L";C=[I.aa(),I.aa(),I.aa(),I.aa(),I.aa(),I.aa()];I=I.aa();for(var O=0,N=0;32>N;N++){O|=L&1;if(31==N)break;O<<=1;L>>=1}E=E+("."+ +K+J)+("."+Oi(O,!0));E+="."+M+I;K="";for(J=C.length;J--;)if((M=C[J])||K)K="."+M.toString(16).toUpperCase()+K;E+=K;h.push(E);l=!0}).box("dvcC",function(C){var E=y||"";switch(y){case "hvc1":E="dvh1";break;case "hev1":E="dvhe";break;case "avc1":E="dva1";break;case "avc3":E="dvav";break;case "av01":E="dav1"}var I=C.reader;I.skip(2);C=I.aa();I=I.aa();h.push(E+"."+Pi(C>>1&127)+"."+Pi(C<<5&32|I>>3&31));l=!0}).box("dvvC",function(C){var E=y||"";switch(y){case "hvc1":E="dvh1";break;case "hev1":E="dvhe";break; +case "avc1":E="dva1";break;case "avc3":E="dvav";break;case "av01":E="dav1"}var I=C.reader;I.skip(2);C=I.aa();I=I.aa();h.push(E+"."+Pi(C>>1&127)+"."+Pi(C<<5&32|I>>3&31));l=!0}).V("vpcC",function(C){var E=y||"",I=C.reader;C=I.aa();var K=I.aa();I=I.aa()>>4&15;h.push(E+"."+Pi(C)+"."+Pi(K)+"."+Pi(I));l=!0}).box("av1C",function(C){var E=y||"";switch(y){case "dav1":E="av01"}var I=C.reader;I.skip(1);C=I.aa();I=I.aa();var K=C>>>5,J=(I&64)>>6;h.push(E+"."+K+"."+Pi(C&31)+(I>>>7?"H":"M")+"."+Pi(2===K&&J?(I&32)>> +5?12:10:J?10:8)+"."+((I&16)>>4)+"."+((I&8)>>3)+((I&4)>>2)+(I&3)+"."+Pi(1)+"."+Pi(1)+"."+Pi(1)+".0");l=!0}).box("enca",th).box("encv",sh).box("sinf",ph).box("frma",function(C){C=Mi(C.reader).codec;f(C)}).box("colr",function(C){h=h.map(function(K){if(K.startsWith("av01.")){var J=C.reader,L=J.Ua(),M=J.Xb(4);var O=String.fromCharCode(M[0]);O+=String.fromCharCode(M[1]);O+=String.fromCharCode(M[2]);O+=String.fromCharCode(M[3]);if("nclx"===O){M=J.Fa();O=J.Fa();var N=J.Fa(),P=J.aa()>>7,R=K.split(".");10== +R.length&&(R[6]=Pi(M),R[7]=Pi(O),R[8]=Pi(N),R[9]=String(P),K=R.join("."))}J.seek(L)}return K});var E=Ni(C.reader),I=E.colorGamut;w=E.Fe;v=I}).parse(a||b,!0);if(!g.length&&!h.length)return null;var z=k&&!l,A=new Map;if(l&&!c){c=new id("video/mp4");a&&c.init(a);try{c.Nf(b);for(var B=u(c.qg()),D=B.next();!D.done;D=B.next()){var G=D.value;A.set(G,G)}}catch(C){}c.Rd()}return{type:z?"audio":"video",mimeType:z?"audio/mp4":"video/mp4",codecs:um(g.concat(h)).join(", "),language:m,height:n,width:q,channelCount:r, +sampleRate:t,closedCaptions:A,Fe:w,colorGamut:v,frameRate:null}}function um(a){var b=new Set,c=[];a=u(a);for(var d=a.next();!d.done;d=a.next()){d=d.value;var e=hf(d);b.has(e)||(c.push(d),b.add(e))}b=sc("audio",c);d=sc("video",c);a=sc(rc,c);d=vm(d);b=b.concat(d).concat(a);return c.length&&!b.length?c:b} +function vm(a){if(1>=a.length)return a;var b=a.find(function(c){return c.startsWith("dvav.")||c.startsWith("dva1.")||c.startsWith("dvh1.")||c.startsWith("dvhe.")||c.startsWith("dav1.")||c.startsWith("dvc1.")||c.startsWith("dvi1.")});return b?bd('video/mp4; codecs="'+b+'"')?[b]:a.filter(function(c){return c!=b}):a} +function wm(a){var b=null;(new kh).box("moov",ph).box("trak",ph).box("mdia",ph).box("minf",ph).box("stbl",ph).V("stsd",rh).box("encv",sh).box("enca",th).box("sinf",ph).box("schi",ph).V("tenc",function(c){c=c.reader;c.aa();c.aa();c.aa();c.aa();b=jc(c.Xb(16))}).parse(a,!0);return b} +function xm(a,b,c){var d,e,f,g,h;return Q(function(k){if(1==k.g)return d=b,d.cryptoKey?k.A(2):F(k,d.fetchKey(),3);e=d.iv;if(!e)for(e=Kb(new ArrayBuffer(16)),f=d.firstMediaSequenceNumber+c,g=e.byteLength-1;0<=g;g--)e[g]=f&255,f>>=8;"CBC"==b.blockCipherMode?h={name:"AES-CBC",iv:e}:h={name:"AES-CTR",counter:e,length:64};return k.return(window.crypto.subtle.decrypt(h,d.cryptoKey,a))})};function ym(a,b,c,d,e){a=Wg(a,d,e);if(0!=b||null!=c)a.headers.Range=c?"bytes="+b+"-"+c:"bytes="+b+"-";return a};function zm(a,b){var c=this;this.g=b;this.j=a;this.h=null;this.J=new Map;this.D=1;this.B=this.l=null;this.O=0;this.i=new Map;this.I=!1;this.P=null;this.C=!1;this.m=new dh(function(){return Am(c)});this.L=Date.now()/1E3;this.s=new Map;this.N={projection:null,hfov:null};this.U=0;this.R=Infinity;this.F=null;this.K=[];this.u=new yf(function(){if(c.j&&c.g)if(c.j.presentationTimeline.T()){var d=c.j.presentationTimeline.bc(),e=c.j.presentationTimeline.Ib();1a.g.Ya(),d=u(a.i.values()),e=d.next();!e.done;e=d.next())e=e.value,e.Aa&&e.Aa.Od(c),e.ka&&e.ka.Od(c);d=u(a.s.values());for(e=d.next();!e.done;e=d.next())e.value.Od(c);if(c=a.i.get("video"))if(d=c.stream)if(b)(b=d.trickModeVideo)&&!c.Jc&&(Mm(a,b,!1,0,!1),c.Jc=d);else if(b=c.Jc)c.Jc=null,Mm(a,b,!0,0,!1)} +function Nm(a,b,c,d,e,f){c=void 0===c?!1:c;d=void 0===d?0:d;e=void 0===e?!1:e;f=void 0===f?!1:f;a.l=b;a.I&&(b.video&&Mm(a,b.video,c,d,e,f),b.audio&&Mm(a,b.audio,c,d,e,f))}function Om(a,b){Q(function(c){if(1==c.g)return a.F=null,a.B=b,a.I?b.segmentIndex?c.A(2):F(c,b.createSegmentIndex(),2):c.return();Mm(a,b,!0,0,!1);H(c)})}function Pm(a,b){for(var c=u(a.J.entries()),d=c.next();!d.done;d=c.next()){var e=u(d.value);d=e.next().value;e=e.next().value;d.includes(b.type)&&(e(),a.J.delete(d))}} +function Mm(a,b,c,d,e,f){var g=a.i.get(b.type);g||b.type!=rc?g&&(g.Jc&&(b.trickModeVideo?(g.Jc=b,b=b.trickModeVideo):g.Jc=null),g.stream!=b||e)&&(a.s.has(b)?g.ka=a.s.get(b):g.ka&&rm(g.ka,b),b.type==rc&&(e=af(b.mimeType,b.codecs),Ek(a.g.ia,e,a.j.sequenceMode,b.external)),!a.s.has(g.stream)&&g.stream.closeSegmentIndex&&(g.$a?(e="("+g.type+":"+g.stream.id+")",a.J.has(e)||a.J.set(e,g.stream.closeSegmentIndex)):g.stream.closeSegmentIndex()),e=g.stream.isAudioMuxedInVideo!=b.isAudioMuxedInVideo,g.stream= +b,g.Aa=null,g.yg=!!f,b.dependencyStream?g.$d=Im(a,b.dependencyStream):g.$d=null,e?Qm(a,!0,!1):(c?g.Pc?g.og=!0:g.$a?(g.Oc=!0,g.gf=d,g.og=!0):(Bm(g),Rm(a,g,!0,d).catch(function(h){if(a.g)a.g.onError(h)})):g.$a||g.Cb||Jm(a,g,0),Sm(a,g).catch(function(h){if(a.g)a.g.onError(h)}))):Hm(a,b)} +function Sm(a,b){var c,d;return Q(function(e){if(1==e.g){if(!b.Lb)return e.return();c=b.stream;d=b.Lb;return c.segmentIndex?e.A(2):F(e,c.createSegmentIndex(),2)}if(b.Lb!=d||b.stream!=c)return e.return();var f=a.g.Vc();var g=Kk(a.g.ia,b.type),h=b.stream.segmentIndex.find(b.Ra?b.Ra.endTime:f),k=null==h?null:b.stream.segmentIndex.get(h);h=k?k.endByte?k.endByte-k.startByte:null:null;k&&!h&&(h=(k.endTime-k.getStartTime())*(b.stream.bandwidth||0)/8);h?((k=k.ha)&&(h+=(k.endByte?k.endByte-k.startByte:null)|| +0),k=a.g.getBandwidthEstimate(),f=8*h/k<(g||0)-f-a.h.rebufferingGoal||b.Lb.h.g>h?!0:!1):f=!1;f&&b.Lb.abort();H(e)})} +p.hd=function(){if(this.g){for(var a=this.g.Vc(),b=u(this.i.keys()),c=b.next();!c.done;c=b.next()){var d=c.value;c=this.i.get(d);var e=this.g.ia;d==rc?(e=e.h,e=null==e.g||null==e.h?!1:a>=e.g&&aa.g.Ya()):null} +function Em(a){for(var b=a.h.segmentPrefetchLimit,c=a.h.prefetchAudioLanguages,d=u(a.j.variants),e=d.next(),f={};!e.done;f={Ob:void 0},e=d.next())if(f.Ob=e.value,f.Ob.audio)if(a.s.has(f.Ob.audio)){if(e=a.s.get(f.Ob.audio),qm(e,b),!(0=b||!c.some(function(h){return function(k){return xc(h.Ob.audio.language,k)}}(f))||!(e=Dm(a,f.Ob.audio))|| +(f.Ob.audio.segmentIndex||f.Ob.audio.createSegmentIndex(),a.s.set(f.Ob.audio,e))}p.updateDuration=function(){var a=ed(),b=this.j.presentationTimeline.getDuration();Infinity>b?(a&&(this.u&&this.u.stop(),al(this.g.ia)),this.g.ia.vb(b)):a?(this.u&&this.u.ya(.5),this.g.ia.vb(Infinity)):this.g.ia.vb(Math.pow(2,32))}; +function Wm(a,b){var c,d,e,f,g,h;return Q(function(k){switch(k.g){case 1:eh(a.m);if(b.$a||null==b.Cb||b.Pc)return k.return();b.Cb=null;if(!b.Oc){k.A(2);break}return F(k,Rm(a,b,b.og,b.gf),3);case 3:return k.return();case 2:Pm(a,b);if(b.stream.segmentIndex){k.A(4);break}c=b.stream;ta(k,5);return F(k,b.stream.createSegmentIndex(),7);case 7:wa(k,6);break;case 5:return d=xa(k),F(k,Xm(a,b,d),8);case 8:return k.return();case 6:if(c!=b.stream)return c.closeSegmentIndex&&c.closeSegmentIndex(),b.$a||b.Cb|| +Jm(a,b,0),k.return();case 4:ta(k,9);e=Ym(a,b);null!=e&&(Jm(a,b,e),b.fe=!1);wa(k,10);break;case 9:return f=xa(k),F(k,Xm(a,b,f),11);case 11:return k.return();case 10:g=Array.from(a.i.values());if(!a.I||!g.every(function(l){return l.endOfStream})){k.A(0);break}return F(k,a.g.ia.endOfStream(),13);case 13:eh(a.m),h=a.g.ia.getDuration(),0!=h&&hh&&k)return b.endOfStream=!0,"video"==b.type&&(a=a.i.get(rc))&&Zm(a)&&(a.endOfStream=!0),null;b.endOfStream=!1;if(g>=f)return c/2;h=!b.Aa;k=$m(a,b,d,k);if(!k)return c;g=!1;h&&b.yg&&(g=!0,b.yg=!1);h=Infinity;var l=Array.from(a.i.values());l=u(l);for(var m=l.next();!m.done;m=l.next())m=m.value,Zm(m)||m.Aa&&!m.Aa.current()||(h=Math.min(h,m.Ra?m.Ra.endTime:d));if(e>=h+a.j.presentationTimeline.h)return c;if("keep"!==a.h.crossBoundaryStrategy&&an(a,b,k))return null;b.ka&&b.Aa&& +!a.s.has(b.stream)&&(b.ka.hb(k.startTime+.001),im(b.ka,k.startTime).catch(function(){}));bn(a,b,d,k,g).catch(function(){});b.$d&&cn(a,b.$d,d,f);return null} +function $m(a,b,c,d){if(b.Aa)return(c=b.Aa.current())&&b.Ra&&.001>Math.abs(b.Ra.startTime-c.startTime)&&(c=b.Aa.next().value),c;if(b.Ra||d)return c=b.Ra?b.Ra.endTime:d,a=0>a.g.Ya(),b.stream.segmentIndex&&(b.Aa=b.stream.segmentIndex.ac(c,!1,a)),b.Aa&&b.Aa.next().value;d=a.j.sequenceMode?0:a.h.inaccurateManifestTolerance;var e=Math.max(c-d,0);a=0>a.g.Ya();var f=null;d&&(b.stream.segmentIndex&&(b.Aa=b.stream.segmentIndex.ac(e,!1,a)),f=b.Aa&&b.Aa.next().value);f||(b.stream.segmentIndex&&(b.Aa=b.stream.segmentIndex.ac(c, +!1,a)),f=b.Aa&&b.Aa.next().value);return f} +function bn(a,b,c,d,e){var f,g,h,k,l,m,n,q,r,t,w,v,y,z,A,B,D,G;return Q(function(C){switch(C.g){case 1:f=uc;g=b.stream;h=b.Aa;b.$a=!0;ta(C,2);if(2==d.Ec())throw new V(1,1,1011);return F(C,dn(a,b,d,e),4);case 4:eh(a.m);if(a.C)return C.return();k="video/mp4"==g.mimeType||"audio/mp4"==g.mimeType;l=window.ReadableStream;if((m=a.h.lowLatencyMode&&a.j.isLowLatency)&&l&&k&&("HLS"!=a.j.type||d.m))return r=new Uint8Array(0),w=t=!1,y=function(E){var I,K,J,L;return Q(function(M){switch(M.g){case 1:if(t)return M.return();w= +!0;eh(a.m);if(a.C)return M.return();ta(M,2);r=en(r,E);I=!1;K=0;(new kh).box("mdat",function(O){K=O.size+O.start;I=!0}).parse(r,!1,!0);if(!I){M.A(4);break}J=r.subarray(0,K);r=r.subarray(K);return F(M,fn(a,b,c,g,d,J,!0,e),5);case 5:b.ka&&b.Aa&&im(b.ka,d.startTime,!0);case 4:wa(M,0);break;case 2:v=L=xa(M),H(M)}})},F(C,gn(a,b,d,y),9);n=gn(a,b,d);return F(C,n,7);case 7:q=C.h;eh(a.m);if(a.C)return C.return();eh(a.m);return b.Oc?(b.$a=!1,Jm(a,b,0),C.return()):F(C,fn(a,b,c,g,d,q,!1,e),6);case 9:z=C.h;if(v)throw v; +if(w){C.A(10);break}t=!0;eh(a.m);return a.C?C.return():b.Oc?(b.$a=!1,Jm(a,b,0),C.return()):F(C,fn(a,b,c,g,d,z,!1,e),10);case 10:b.ka&&b.Aa&&im(b.ka,d.startTime,!0);case 6:eh(a.m);if(a.C)return C.return();b.Ra=d;h.next();b.$a=!1;b.Jh=!1;A=a.g.ia.Pb();B=A[b.type];gb(JSON.stringify(B));b.Oc||(D=null,b.type===f.Ea?D=a.i.get(f.ba):b.type===f.ba&&(D=a.i.get(f.Ea)),D&&D.type==f.ba?a.g.Lf(d,b.stream,D.stream.isAudioMuxedInVideo):a.g.Lf(d,b.stream,b.stream.codecs.includes(",")));Jm(a,b,0);wa(C,0);break;case 2:G= +xa(C);eh(a.m,G);if(a.C)return C.return();b.$a=!1;if(7001==G.code)b.$a=!1,Bm(b),Jm(a,b,0),C.A(0);else if(b.type==f.Xa&&a.h.ignoreTextStreamFailures)a.i.delete(f.Xa),C.A(0);else{if(3017==G.code)return F(C,hn(a,b,G),0);b.fe=!0;1==G.category&&b.ka&&om(b.ka,d);G.severity=2;return F(C,Xm(a,b,G),0)}}})} +function cn(a,b,c,d){var e,f,g,h,k,l,m,n,q,r,t;return Q(function(w){switch(w.g){case 1:e=b.stream;for(h=(g=(f=e.segmentIndex)&&f.ac(c))&&g.next().value;h&&a.K.includes(h.startTime);)h=g&&g.next().value;if(!h){w.A(0);break}k=h.ha;if(!k||yj(k,b.Tb)){w.A(3);break}b.Tb=k;ta(w,4);return F(w,gn(a,b,k),6);case 6:l=w.h;var v=a.g.ia;v.L&&Zc(v.L,l,0,e);a.K=[];wa(w,3);break;case 4:throw m=xa(w),b.Tb=null,m;case 3:if(b.Ra&&b.Ra==h){w.A(0);break}b.Ra=h;ta(w,8);return F(w,gn(a,b,h),10);case 10:n=w.h;v=a.g.ia;v.L&& +Zc(v.L,n,0,e);a.K.push(h.startTime);wa(w,9);break;case 8:throw q=xa(w),b.Ra=null,q;case 9:r=Math.max.apply(Math,[0].concat(x(a.K)));t=a.g.Vc();if(t+d>r)return F(w,cn(a,b,h.startTime,d),0);w.A(0)}})}function en(a,b){var c=new Uint8Array(a.length+b.length);c.set(a);c.set(b,a.length);return c} +function hn(a,b,c){var d,e,f,g,h,k;return Q(function(l){if(1==l.g){d=Array.from(a.i.values());if(e=d.some(function(m){return m!=b&&m.Jh}))return l.A(2);f=0===a.h.maxDisabledTime&&1011==c.code?1:a.h.maxDisabledTime;if(g=a.g.disableStream(b.stream,f))return l.return();if(a.h.avoidEvictionOnQuotaExceededError)return Jm(a,b,4),l.return();h=Math.round(100*a.D);if(20k&&(n=Math.max(h-f,l-k-g));return n<=k?q.return():F(q,a.g.ia.remove(b.type,g,g+n,e), +2)}if(4!=q.g)return eh(a.m),a.F?F(q,jn(a,a.F,c),4):q.A(0);eh(a.m);H(q)})}function Zm(a){return a&&a.type==rc&&("application/cea-608"==a.stream.mimeType||"application/cea-708"==a.stream.mimeType)} +function gn(a,b,c,d){var e,f,g,h,k;return Q(function(l){switch(l.g){case 1:if(e=c.cc())return l.return(e);f=null;if(b.ka){var m=b.ka,n=m.h;c instanceof xj&&(n=m.j);n.has(c)?(m=n.get(c),d&&(m.bi=d),f=m.se):f=null}f||(f=Vm(c,b.stream,d||null,a.h.retryParameters,a.g.uc));g=0;b.Aa&&(g=b.Aa.h);b.Lb=f;return F(l,f.promise,2);case 2:h=l.h;b.Lb=null;k=h.data;if(!c.aesKey){l.A(3);break}return F(l,xm(k,c.aesKey,g),4);case 4:k=l.h;case 3:return l.return(k)}})} +function Vm(a,b,c,d,e,f){f=void 0===f?!1:f;var g=a instanceof zj?a:void 0,h=g?1:0;a=ym(a.S(),a.startByte,a.endByte,d,c);a.contentType=b.type;return e.request(bh,a,{type:h,stream:b,segment:g,isPreload:f})} +function Rm(a,b,c,d){var e,f;return Q(function(g){if(1==g.g)return b.Oc=!1,b.og=!1,b.gf=0,b.Pc=!0,b.Ra=null,b.Aa=null,b.ka&&!a.s.has(b.stream)&&pm(b.ka),d?(e=a.g.Vc(),f=a.g.ia.getDuration(),F(g,a.g.ia.remove(b.type,e+d,f),3)):F(g,Vk(a.g.ia,b.type),4);if(3!=g.g)return eh(a.m),c?F(g,a.g.ia.flush(b.type),3):g.A(3);eh(a.m);b.Pc=!1;b.endOfStream=!1;b.$a||b.Cb||Jm(a,b,0);H(g)})} +function Jm(a,b,c){var d=b.type;if(d!=rc||a.i.has(d))b.Cb=(new xf(function(){var e;return Q(function(f){if(1==f.g)return ta(f,2),F(f,Wm(a,b),4);if(2!=f.g)return wa(f,0);e=xa(f);if(a.g)a.g.onError(e);H(f)})})).X(c)}function Bm(a){null!=a.Cb&&(a.Cb.stop(),a.Cb=null)}function Cm(a){return Q(function(b){return a.Lb?F(b,a.Lb.abort(),0):b.A(0)})} +function Xm(a,b,c){var d;return Q(function(e){if(1==e.g)return 3024==c.code?(b.$a=!1,Bm(b),Jm(a,b,0),e.return()):F(e,Gg(a.P),2);eh(a.m);if(1===c.category&&1003!=c.code){if(b.Jc)return Lm(a,!1),e.return();d=0===a.h.maxDisabledTime&&1011==c.code?1:a.h.maxDisabledTime;c.handled=a.g.disableStream(b.stream,d);c.handled&&(c.severity=1)}if(!c.handled||1011!=c.code)a.g.onError(c);c.handled||a.h.failureCallback(c);H(e)})} +function Qm(a,b,c){b=void 0===b?!1:b;c=void 0===c?!0:c;var d,e,f,g,h,k;return Q(function(l){if(1==l.g){d=Date.now()/1E3;e=a.h.minTimeBetweenRecoveries;if(!b){if(!a.h.allowMediaSourceRecoveries||d-a.Lb||1e)break;if(0==e||"\\"!=a[e-1])f=a.substring(f,e).replace(/\\\./g,"."),d[f]={},d=d[f],f=e+1;e+=1}d[a.substring(f).replace(/\\\./g,".")]=b;return c}function pn(a,b){return a&&b} +function qn(a,b){function c(f){for(var g=u(Object.keys(f)),h=g.next();!h.done;h=g.next())if(h=h.value,!(f[h]instanceof HTMLElement))if(e(f[h])&&0===Object.keys(f[h]).length)delete f[h];else{var k=f[h];Array.isArray(k)&&0===k.length?delete f[h]:"function"==typeof f[h]?delete f[h]:e(f[h])&&(c(f[h]),0===Object.keys(f[h]).length&&delete f[h])}}function d(f,g){return Object.keys(f).reduce(function(h,k){var l=f[k];if(g.hasOwnProperty(k))if(l instanceof HTMLElement&&g[k]instanceof HTMLElement)l.isEqualNode(g[k])|| +(h[k]=l);else if(e(l)&&e(g[k])){if(l=d(l,g[k]),0"===c.substr(0,5)&&""===c.substr(-6)&&(c=c.slice(5,-6),a=!0);if(!a)try{var d=JSON.parse(c);d.ckc&&(c=d.ckc,a=!0);d.CkcMessage&&(c=d.CkcMessage,a=!0);d.License&&(c=d.License,a=!0)}catch(e){}a&&(b.data=Lb(hc(c)))}};rn.muxFairPlayRequest=function(a,b){vn(a,b)}; +rn.expressplayFairPlayRequest=function(a,b){if(2===a){var c=b.drmInfo;c&&xg(c.keySystem)&&vn(a,b)}};rn.conaxFairPlayRequest=function(a,b){vn(a,b)};rn.ezdrmFairPlayRequest=function(a,b){vn(a,b)};rn.verimatrixFairPlayRequest=function(a,b){2===a&&(a=b.drmInfo)&&xg(a.keySystem)&&(a=Kb(b.body),a=gc(a),b.headers["Content-Type"]="application/x-www-form-urlencoded",b.body=$b("spc="+a))};rn.muxInitDataTransform=function(a,b,c){return un(a,b,c)}; +rn.expressplayInitDataTransform=function(a,b,c){return un(a,b,c)};rn.conaxInitDataTransform=function(a,b,c){if("skd"!==b)return a;b=c.serverCertificate;c=Zb(a).split("skd://").pop().split("?").shift();c=window.atob(c);var d=new ArrayBuffer(2*c.length);d=Nb(d);for(var e=0,f=c.length;eb?!1:!0}).sort(function(c,d){return c.audio||d.audio?c.audio?d.audio?(d.audio.channelsCount||0)-(c.audio.channelsCount||0):1:-1:0})}function An(a,b){if("AUTO"==b){var c=a.some(function(d){return d.video&&d.video.hdr&&"HLG"==d.video.hdr?!0:!1});b=Gn(c)}return a.filter(function(d){return d.video&&d.video.hdr&&d.video.hdr!=b?!1:!0})} +function zn(a,b){return a.filter(function(c){return c.video&&c.video.videoLayout&&c.video.videoLayout!=b?!1:!0})}function En(a,b){return a.filter(function(c){return c.audio&&c.audio.spatialAudio!=b?!1:!0})}function Fn(a,b){return a.filter(function(c){return c.audio&&c.audio.codecs!=b?!1:!0})};function Hn(){} +function In(){var a=Infinity,b=Rb();navigator.connection&&navigator.connection.saveData&&(a=360);var c={retryParameters:Fg(),servers:{},clearKeys:{},advanced:{},delayLicenseRequestUntilPlayed:!1,persistentSessionOnlinePlayback:!1,persistentSessionsMetadata:[],initDataTransform:function(h,k,l){"apple"===window.shakaMediaKeysPolyfill&&"skd"==k&&(k=l.serverCertificate,l=sn(h),h=tn(h,l,k));return h},logLicenseExchange:!1,updateExpirationTime:1,preferredKeySystems:[],keySystemsMapping:{},parseInbandPsshEnabled:!1, +minHdcpVersion:"",ignoreDuplicateInitData:!0,defaultAudioRobustnessForWidevine:"SW_SECURE_CRYPTO",defaultVideoRobustnessForWidevine:"SW_SECURE_DECODE"},d="reload",e=!1;dd()&&b.ld()&&(d="smooth",e=!0);e={retryParameters:Fg(),availabilityWindowOverride:NaN,disableAudio:!1,disableVideo:!1,disableText:!1,disableThumbnails:!1,disableIFrames:!1,defaultPresentationDelay:0,segmentRelativeVttTiming:!1,raiseFatalErrorOnManifestUpdateRequestFailure:!1,continueLoadingWhenPaused:!0,ignoreSupplementalCodecs:!1, +updatePeriod:-1,ignoreDrmInfo:!1,dash:{clockSyncUri:"",disableXlinkProcessing:!0,xlinkFailGracefully:!1,ignoreMinBufferTime:!1,autoCorrectDrift:!0,initialSegmentLimit:1E3,ignoreSuggestedPresentationDelay:!1,ignoreEmptyAdaptationSet:!1,ignoreMaxSegmentDuration:!1,keySystemsByURI:{"urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b":"org.w3.clearkey","urn:uuid:e2719d58-a985-b3c9-781a-b030af78d30e":"org.w3.clearkey","urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed":"com.widevine.alpha","urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95":"com.microsoft.playready", +"urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95":"com.microsoft.playready","urn:uuid:94ce86fb-07ff-4f43-adb8-93d2fa968ca2":"com.apple.fps","urn:uuid:3d5e6d35-9b9a-41e8-b843-dd3c6e72c42c":"com.huawei.wiseplay"},manifestPreprocessor:Jn,manifestPreprocessorTXml:Kn,sequenceMode:!1,multiTypeVariantsAllowed:e,useStreamOnceInPeriodFlattening:!1,enableFastSwitching:!0},hls:{ignoreTextStreamFailures:!1,ignoreImageStreamFailures:!1,defaultAudioCodec:"mp4a.40.2",defaultVideoCodec:"avc1.42E01E",ignoreManifestProgramDateTime:!1, +ignoreManifestProgramDateTimeForTypes:[],mediaPlaylistFullMimeType:'video/mp2t; codecs="avc1.42E01E, mp4a.40.2"',liveSegmentsDelay:3,sequenceMode:b.kd(),ignoreManifestTimestampsInSegmentsMode:!1,disableCodecGuessing:!1,disableClosedCaptionsDetection:!1,allowLowLatencyByteRangeOptimization:!0,allowRangeRequestsToGuessMimeType:!1},mss:{manifestPreprocessor:Jn,manifestPreprocessorTXml:Kn,sequenceMode:!1,keySystemsBySystemId:{"9a04f079-9840-4286-ab92-e65be0885f95":"com.microsoft.playready","79f0049a-4098-8642-ab92-e65be0885f95":"com.microsoft.playready"}}}; +var f={trackSelectionCallback:function(h){return Q(function(k){return k.return(h)})},downloadSizeCallback:function(h){var k;return Q(function(l){if(1==l.g)return navigator.storage&&navigator.storage.estimate?F(l,navigator.storage.estimate(),3):l.return(!0);k=l.h;return l.return(k.usage+h<.95*k.quota)})},progressCallback:function(h,k){return pn([h,k])},usePersistentLicense:!0,numberOfParallelDownloads:5},g={drm:c,manifest:e,streaming:{retryParameters:Fg(),failureCallback:function(h){return pn([h])}, +rebufferingGoal:0,bufferingGoal:10,bufferBehind:30,evictionGoal:1,ignoreTextStreamFailures:!1,alwaysStreamText:!1,startAtSegmentBoundary:!1,gapDetectionThreshold:.5,gapPadding:0,gapJumpTimerTime:.25,durationBackoff:1,safeSeekOffset:5,safeSeekEndOffset:0,stallEnabled:!0,stallThreshold:1,stallSkip:.1,useNativeHlsForFairPlay:!0,inaccurateManifestTolerance:2,lowLatencyMode:!1,preferNativeDash:!1,preferNativeHls:!1,updateIntervalSeconds:1,observeQualityChanges:!1,maxDisabledTime:30,segmentPrefetchLimit:1, +prefetchAudioLanguages:[],disableAudioPrefetch:!1,disableTextPrefetch:!1,disableVideoPrefetch:!1,liveSync:{enabled:!1,targetLatency:.5,targetLatencyTolerance:.5,maxPlaybackRate:1.1,minPlaybackRate:.95,panicMode:!1,panicThreshold:60,dynamicTargetLatency:{enabled:!1,stabilityThreshold:60,rebufferIncrement:.5,maxAttempts:10,maxLatency:4,minLatency:1}},allowMediaSourceRecoveries:!0,minTimeBetweenRecoveries:5,vodDynamicPlaybackRate:!1,vodDynamicPlaybackRateLowBufferRate:.95,vodDynamicPlaybackRateBufferRatio:.5, +preloadNextUrlWindow:30,loadTimeout:30,clearDecodingCache:!1,dontChooseCodecs:!1,shouldFixTimestampOffset:!1,avoidEvictionOnQuotaExceededError:!1,crossBoundaryStrategy:"keep",returnToEndOfLiveWindowWhenOutside:!1},networking:{forceHTTP:!1,forceHTTPS:!1,minBytesForProgressEvents:16E3},mediaSource:{codecSwitchingStrategy:d,addExtraFeaturesToSourceBuffer:function(h){return pn([h],"")},forceTransmux:!1,insertFakeEncryptionInInit:!0,correctEc3Enca:!1,modifyCueCallback:function(h,k){return pn([h,k])},dispatchAllEmsgBoxes:!1, +useSourceElements:!0,durationReductionEmitsUpdateEnd:!0},offline:f,abrFactory:function(){return new mg},adaptationSetCriteriaFactory:function(){return new (Function.prototype.bind.apply(wn,[null].concat(x(Ja.apply(0,arguments)))))},abr:{enabled:!0,useNetworkInformation:!0,defaultBandwidthEstimate:1E6,switchInterval:8,bandwidthUpgradeTarget:.85,bandwidthDowngradeTarget:.95,restrictions:{minWidth:0,maxWidth:Infinity,minHeight:0,maxHeight:a,minPixels:0,maxPixels:Infinity,minFrameRate:0,maxFrameRate:Infinity, +minBandwidth:0,maxBandwidth:Infinity,minChannelsCount:0,maxChannelsCount:Infinity},advanced:{minTotalBytes:128E3,minBytes:16E3,fastHalfLife:2,slowHalfLife:5},restrictToElementSize:!1,restrictToScreenSize:!1,ignoreDevicePixelRatio:!1,clearBufferSwitch:!1,safeMarginSwitch:0,cacheLoadThreshold:20,minTimeToSwitch:0,preferNetworkInformationBandwidth:!1,removeLatencyFromFirstPacketTime:!0},autoShowText:3,preferredAudioLanguage:"",preferredAudioLabel:"",preferredTextLanguage:"",preferredVariantRole:"",preferredTextRole:"", +preferredAudioChannelCount:2,preferredVideoHdrLevel:"AUTO",preferredVideoLayout:"",preferredVideoLabel:"",preferredVideoCodecs:[],preferredAudioCodecs:[],preferredTextFormats:[],preferForcedSubs:!1,preferSpatialAudio:!1,preferredDecodingAttributes:[],restrictions:{minWidth:0,maxWidth:Infinity,minHeight:0,maxHeight:Infinity,minPixels:0,maxPixels:Infinity,minFrameRate:0,maxFrameRate:Infinity,minBandwidth:0,maxBandwidth:Infinity,minChannelsCount:0,maxChannelsCount:Infinity},playRangeStart:0,playRangeEnd:Infinity, +textDisplayer:{captionsUpdatePeriod:.25,fontScaleFactor:1},textDisplayFactory:function(){return null},cmcd:{enabled:!1,sessionId:"",contentId:"",rtpSafetyFactor:5,useHeaders:!1,includeKeys:[],version:1},cmsd:{enabled:!0,applyMaximumSuggestedBitrate:!0,estimatedThroughputWeightRatio:.5},lcevc:{enabled:!1,dynamicPerformanceScaling:!0,logLevel:0,drawLogo:!1,poster:!0},ads:{customPlayheadTracker:!1,skipPlayDetection:!1,supportsMultipleMediaElements:!0,disableHLSInterstitial:!1,disableDASHInterstitial:!1, +allowPreloadOnDomElements:!0,allowStartInMiddleOfInterstitial:!0},ignoreHardwareResolution:!1,queue:{preloadNextUrlWindow:30,repeatMode:0}};f.trackSelectionCallback=function(h){return Q(function(k){return k.return(Ln(h,g.preferredAudioLanguage,g.preferredVideoHdrLevel))})};return b.ab(g)} +function Mn(){return{streaming:{inaccurateManifestTolerance:0,segmentPrefetchLimit:2,updateIntervalSeconds:.1,maxDisabledTime:1,retryParameters:{baseDelay:100}},manifest:{dash:{autoCorrectDrift:!1},retryParameters:{baseDelay:100}},drm:{retryParameters:{baseDelay:100}}}} +function Nn(a,b,c){var d={".drm.keySystemsMapping":"",".drm.servers":"",".drm.clearKeys":"",".drm.advanced":{distinctiveIdentifierRequired:!1,persistentStateRequired:!1,videoRobustness:[],audioRobustness:[],sessionType:"",serverCertificate:new Uint8Array(0),serverCertificateUri:"",individualizationServer:"",headers:{}}};return nn(a,b,c||In(),d,"")} +function Ln(a,b,c){var d=c;"AUTO"==d&&(c=a.some(function(h){return h.hdr&&"HLG"==h.hdr?!0:!1}),d=Gn(c));var e=a.filter(function(h){return"variant"!=h.type||h.hdr&&h.hdr!=d?!1:!0});c=[];var f=Gc(b,e.map(function(h){return h.language}));f&&(c=e.filter(function(h){return yc(h.language)==f}));0==c.length&&(c=e.filter(function(h){return h.primary}));0==c.length&&(e.map(function(h){return h.language}),c=e);var g=c.filter(function(h){return h.height&&480>=h.height});g.length&&(g.sort(function(h,k){return k.height- +h.height}),c=g.filter(function(h){return h.height==g[0].height}));b=[];c.length&&(e=Math.floor(c.length/2),c.sort(function(h,k){return h.bandwidth-k.bandwidth}),b.push(c[e]));a=u(a);for(c=a.next();!c.done;c=a.next())c=c.value,c.type!=rc&&"image"!=c.type||b.push(c);return b}function Jn(a){return pn([a],a)}function Kn(a){return pn([a],a)}S("shaka.util.PlayerConfiguration",Hn);Hn.mergeConfigObjects=Nn;Hn.createDefaultForLL=Mn;Hn.createDefault=In;function On(){this.g=null;this.h=[]}function Pn(a,b){var c=0;a.g&&a.g.state==b&&(c+=a.g.duration);a=u(a.h);for(var d=a.next();!d.done;d=a.next())d=d.value,c+=d.state==b?d.duration:0;return c}function Qn(a){function b(f){return{timestamp:f.timestamp,state:f.state,duration:f.duration}}for(var c=[],d=u(a.h),e=d.next();!e.done;e=d.next())c.push(b(e.value));a.g&&c.push(b(a.g));return c};function Rn(){this.i=this.h=null;this.g=[]}function Sn(a,b,c){a.i!=b&&(a.i=b,a.g.push({timestamp:Date.now()/1E3,id:b.id,type:"text",fromAdaptation:c,bandwidth:null}))};function Tn(){this.C=this.U=NaN;this.l="";this.j=this.aj=this.u=this.B=this.J=this.D=this.s=this.m=this.I=this.F=this.i=this.P=this.R=this.L=this.N=this.O=NaN;this.K=0;this.G=this.H=NaN;this.g=new On;this.h=new Rn}function Un(a,b,c){a.O=b;a.N=c}function Vn(a,b,c){a.U=b;a.C=c}function Wn(a,b){a.i=isNaN(a.i)?b:Math.max(a.i,b)}function Xn(a,b){a.j=isNaN(a.j)?b:a.j+b} +function Yn(a){var b=a.U,c=a.C,d=a.l,e=a.B,f=a.N,g=a.O,h=a.L,k=a.R,l=a.P,m=a.u,n=a.i,q=a.F,r=a.I,t=a.m,w=Pn(a.g,"playing"),v=Pn(a.g,"paused"),y=Pn(a.g,"buffering"),z=a.s,A=a.D,B=a.J,D=a.aj,G=a.j,C=a.K,E=a.H,I=a.G,K=Qn(a.g),J=[];a=u(a.h.g);for(var L=a.next();!L.done;L=a.next())L=L.value,J.push({timestamp:L.timestamp,id:L.id,type:L.type,fromAdaptation:L.fromAdaptation,bandwidth:L.bandwidth});return{width:b,height:c,currentCodecs:d,streamBandwidth:e,decodedFrames:f,droppedFrames:g,corruptedFrames:h, +stallsDetected:k,gapsJumped:l,estimatedBandwidth:m,completionPercent:n,loadLatency:q,manifestTimeSeconds:r,drmTimeSeconds:t,playTime:w,pauseTime:v,bufferingTime:y,licenseTime:z,liveLatency:A,maxSegmentDuration:B,manifestSizeBytes:D,bytesDownloaded:G,nonFatalErrorCount:C,manifestPeriodCount:E,manifestGapCount:I,stateHistory:K,switchHistory:J}};function Zn(a,b,c,d){jb.call(this);this.N=a;this.U=b;this.Ka=d.networkingEngine;this.m=c;this.B=null;this.Ha=0;this.Za=d.sd;this.F=d.El;this.eb=d.Fl;this.g=d.config;this.l=this.G=this.h=null;this.oa=!1;this.H=d.Ql;this.ra=!1;this.i=null;this.ea=!1;this.j=this.D=null;this.Z=!1;this.L=new Map;this.sa=!1;this.Ma=d.Pl;this.Y=new Tn;this.na=new Hg;this.u=new Hg;this.O=null;this.s=!1;this.$=d.dk;this.R=this.J=null;this.Ta=d.ck;this.P=!1;this.K=[];this.I=[];this.C=!0}pa(Zn,jb); +function $n(a,b,c){(a=b?a.I:a.K)?a.push(c):c()}function ao(a){if(a.I)for(var b=u(a.I),c=b.next();!c.done;c=b.next())c=c.value,c();a.I=null}function bo(a,b){a.O=b;a.P=!0;if(a.K){b=u(a.K);for(var c=b.next();!c.done;c=b.next())c=c.value,c()}a.K=null}p=Zn.prototype;p.getStartTime=function(){return this.m};p.xd=function(){return this.N};p.hh=function(){return this.h};function co(a){a.Z=!0;return a.j}function eo(a){a.ra=!0;return a.H}p.getStats=function(){return this.Y}; +function fo(a){a.ea=!0;return a.i}p.Tk=function(){return this.J?Zf(this.J):null};p.Sk=function(){return this.R?$f(this.R):null};function go(a){a.sa=!0;return a.L} +p.start=function(){var a=this;(function(){var b;return Q(function(c){switch(c.g){case 1:return F(c,Promise.resolve(),2);case 2:return ta(c,3),F(c,ho(a),5);case 5:io(a);if("webkit"===window.shakaMediaKeysPolyfill){c.A(6);break}return F(c,jo(a),7);case 7:io(a);case 6:return F(c,ko(a),8);case 8:io(a);if(!a.$||!a.i){c.A(9);break}return F(c,ei(a.i),10);case 10:io(a);case 9:a.u.resolve();wa(c,0);break;case 3:b=xa(c),b instanceof V&&(7001==b.code||7003==b.code)||a.u.reject(b),H(c)}})})()}; +p.dispatchEvent=function(a){return this.O?this.O.dispatchEvent(a):jb.prototype.dispatchEvent.call(this,a)};p.onError=function(a){2===a.severity&&(this.u.reject(a),this.destroy());var b=(new Map).set("detail",a);b=new U("error",b);this.dispatchEvent(b);b.defaultPrevented&&(a.handled=!0)};function io(a){if(a.s)throw new V(2,7,7003);}function lo(a,b){a.dispatchEvent(new U("onstatechange",(new Map).set("state",b)))} +function ho(a){var b,c,d,e,f,g,h,k,l;return Q(function(m){switch(m.g){case 1:lo(a,"manifest-parser");a.l||(a.G=Gi(a.N,a.U),a.l=a.G(),a.l.configure(a.g.manifest,function(){return a.C}));b=Date.now()/1E3;lo(a,"manifest");if(a.h){m.A(2);break}return F(m,a.l.start(a.N,a.eb),3);case 3:a.h=m.h;if(1!=a.h.variants.length){m.A(2);break}c=[];d=a.h.variants[0];e=u([d.video,d.audio]);for(f=e.next();!f.done;f=e.next())(g=f.value)&&!g.segmentIndex&&c.push(g.createSegmentIndex());if(!(0d.endTime?so:po;this.g.set(d,f);for(var g=u(this.m),h=g.next();!h.done;h=g.next())h=h.value,h.pd==e&&h.od==f&&h.Yc(d,b)}}};function qo(a,b,c,d){b=new U(b,new Map([["region",c],["seeking",d]]));a.dispatchEvent(b)}var ro=1,po=2,so=3;function to(a,b,c){var d,e,f,g,h,k,l;return Q(function(m){switch(m.g){case 1:var n=(new qb(a)).ub.split("/").pop().split(".");d=1==n.length?"":n.pop().toLowerCase();if(e=uo.get(d))return m.return(e);f=0;g=Wg([a],c);ta(m,2);g.method="HEAD";return F(m,b.request(f,g).promise,4);case 4:h=m.h;e=h.headers["content-type"];wa(m,3);break;case 2:k=xa(m);if(!k||1002!=k.code&&1001!=k.code){m.A(3);break}g.method="GET";return F(m,b.request(f,g).promise,6);case 6:l=m.h,e=l.headers["content-type"];case 3:return m.return(e? +e.toLowerCase().split(";").shift():"")}})} +var uo=(new Map).set("mp4","video/mp4").set("m4v","video/mp4").set("m4a","audio/mp4").set("webm","video/webm").set("weba","audio/webm").set("mkv","video/webm").set("ts","video/mp2t").set("ogv","video/ogg").set("ogg","audio/ogg").set("mpg","video/mpeg").set("mpeg","video/mpeg").set("mov","video/quicktime").set("m3u8","application/x-mpegurl").set("mpd","application/dash+xml").set("ism","application/vnd.ms-sstr+xml").set("mp3","audio/mpeg").set("aac","audio/aac").set("flac","audio/flac").set("wav","audio/wav").set("sbv", +"text/x-subviewer").set("srt","text/srt").set("vtt","text/vtt").set("webvtt","text/vtt").set("ttml","application/ttml+xml").set("lrc","application/x-subtitle-lrc").set("ssa","text/x-ssa").set("ass","text/x-ssa").set("jpeg","image/jpeg").set("jpg","image/jpeg").set("png","image/png").set("svg","image/svg+xml").set("webp","image/webp").set("avif","image/avif").set("html","text/html").set("htm","text/html");/* + @license + Copyright 2013 Ali Al Dallal + + Licensed under the MIT license. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ +for(var vo={ach:"Lwo",ady:"\u0410\u0434\u044b\u0433\u044d\u0431\u0437\u044d",af:"Afrikaans","af-NA":"Afrikaans (Namibia)","af-ZA":"Afrikaans (South Africa)",ak:"T\u0255\u0265i",ar:"\u0627\u0644\u0639\u0631\u0628\u064a\u0629","ar-AR":"\u0627\u0644\u0639\u0631\u0628\u064a\u0629","ar-MA":"\u0627\u0644\u0639\u0631\u0628\u064a\u0629","ar-SA":"\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629)","ay-BO":"Aymar aru",az:"Az\u0259rbaycan dili","az-AZ":"Az\u0259rbaycan dili", +"be-BY":"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f",bg:"\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438","bg-BG":"\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438",bn:"\u09ac\u09be\u0982\u09b2\u09be","bn-IN":"\u09ac\u09be\u0982\u09b2\u09be (\u09ad\u09be\u09b0\u09a4)","bn-BD":"\u09ac\u09be\u0982\u09b2\u09be(\u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6)","bs-BA":"Bosanski",ca:"Catal\u00e0","ca-ES":"Catal\u00e0",cak:"Maya Kaqchikel","ck-US":"\u13e3\u13b3\u13a9 (tsalagi)", +cs:"\u010ce\u0161tina","cs-CZ":"\u010ce\u0161tina",cy:"Cymraeg","cy-GB":"Cymraeg",da:"Dansk","da-DK":"Dansk",de:"Deutsch","de-AT":"Deutsch (\u00d6sterreich)","de-DE":"Deutsch (Deutschland)","de-CH":"Deutsch (Schweiz)",dsb:"Dolnoserb\u0161\u0107ina",el:"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac","el-GR":"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac",en:"English","en-GB":"English (UK)","en-AU":"English (Australia)","en-CA":"English (Canada)","en-IE":"English (Ireland)","en-IN":"English (India)", +"en-PI":"English (Pirate)","en-UD":"English (Upside Down)","en-US":"English (US)","en-ZA":"English (South Africa)","en@pirate":"English (Pirate)",eo:"Esperanto","eo-EO":"Esperanto",es:"Espa\u00f1ol","es-AR":"Espa\u00f1ol (Argentine)","es-419":"Espa\u00f1ol (Latinoam\u00e9rica)","es-CL":"Espa\u00f1ol (Chile)","es-CO":"Espa\u00f1ol (Colombia)","es-EC":"Espa\u00f1ol (Ecuador)","es-ES":"Espa\u00f1ol (Espa\u00f1a)","es-LA":"Espa\u00f1ol (Latinoam\u00e9rica)","es-NI":"Espa\u00f1ol (Nicaragua)","es-MX":"Espa\u00f1ol (M\u00e9xico)", +"es-US":"Espa\u00f1ol (Estados Unidos)","es-VE":"Espa\u00f1ol (Venezuela)",et:"eesti keel","et-EE":"Eesti (Estonia)",eu:"Euskara","eu-ES":"Euskara",fa:"\u0641\u0627\u0631\u0633\u06cc","fa-IR":"\u0641\u0627\u0631\u0633\u06cc","fb-LT":"Leet Speak",ff:"Fulah",fi:"Suomi","fi-FI":"Suomi","fo-FO":"F\u00f8royskt",fr:"Fran\u00e7ais","fr-CA":"Fran\u00e7ais (Canada)","fr-FR":"Fran\u00e7ais (France)","fr-BE":"Fran\u00e7ais (Belgique)","fr-CH":"Fran\u00e7ais (Suisse)","fy-NL":"Frysk",ga:"Gaeilge","ga-IE":"Gaeilge (Gaelic)", +gl:"Galego","gl-ES":"Galego","gn-PY":"Ava\u00f1e'\u1ebd","gu-IN":"\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0","gx-GR":"\u1f19\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ae \u1f00\u03c1\u03c7\u03b1\u03af\u03b1",he:"\u05e2\u05d1\u05e8\u05d9\u05ea\u200f","he-IL":"\u05e2\u05d1\u05e8\u05d9\u05ea\u200f",hi:"\u0939\u093f\u0928\u094d\u0926\u0940","hi-IN":"\u0939\u093f\u0928\u094d\u0926\u0940",hr:"Hrvatski","hr-HR":"Hrvatski",hsb:"Hornjoserb\u0161\u0107ina",ht:"Krey\u00f2l",hu:"Magyar","hu-HU":"Magyar","hy-AM":"\u0540\u0561\u0575\u0565\u0580\u0565\u0576", +id:"Bahasa Indonesia","id-ID":"Bahasa Indonesia",is:"\u00cdslenska","is-IS":"\u00cdslenska (Iceland)",it:"Italiano","it-IT":"Italiano",ja:"\u65e5\u672c\u8a9e","ja-JP":"\u65e5\u672c\u8a9e","jv-ID":"Basa Jawa","ka-GE":"\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8","kk-KZ":"\u049a\u0430\u0437\u0430\u049b\u0448\u0430",km:"\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a","km-KH":"\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a",kab:"Taqbaylit",kn:"\u0c95\u0ca8\u0ccd\u0ca8\u0ca1","kn-IN":"\u0c95\u0ca8\u0ccd\u0ca8\u0ca1 (India)", +ko:"\ud55c\uad6d\uc5b4","ko-KR":"\ud55c\uad6d\uc5b4 (\u97e9\u56fd)",ku:"Kurd\u00ee","ku-TR":"Kurd\u00ee",la:"Latin","la-VA":"Latin",lb:"L\u00ebtzebuergesch","li-NL":"L\u00e8mb\u00f6rgs",lt:"Lietuvi\u0173","lt-LT":"Lietuvi\u0173",lv:"Latvie\u0161u","lv-LV":"Latvie\u0161u",mai:"\u092e\u0948\u0925\u093f\u0932\u0940, \u09ae\u09c8\u09a5\u09bf\u09b2\u09c0","mg-MG":"Malagasy",mk:"\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438","mk-MK":"\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 (\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438)", +ml:"\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02","ml-IN":"\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02","mn-MN":"\u041c\u043e\u043d\u0433\u043e\u043b",mr:"\u092e\u0930\u093e\u0920\u0940","mr-IN":"\u092e\u0930\u093e\u0920\u0940",ms:"Bahasa Melayu","ms-MY":"Bahasa Melayu",mt:"Malti","mt-MT":"Malti",my:"\u1017\u1019\u102c\u1005\u1000\u102c",nb:"Norsk (bokm\u00e5l)","nb-NO":"Norsk (bokm\u00e5l)",ne:"\u0928\u0947\u092a\u093e\u0932\u0940","ne-NP":"\u0928\u0947\u092a\u093e\u0932\u0940",nl:"Nederlands","nl-BE":"Nederlands (Belgi\u00eb)", +"nl-NL":"Nederlands (Nederland)","nn-NO":"Norsk (nynorsk)",no:"Norsk",oc:"Occitan","or-IN":"\u0b13\u0b21\u0b3c\u0b3f\u0b06",pa:"\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40","pa-IN":"\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40 (\u0a2d\u0a3e\u0a30\u0a24 \u0a28\u0a42\u0a70)",pl:"Polski","pl-PL":"Polski","ps-AF":"\u067e\u069a\u062a\u0648",pt:"Portugu\u00eas","pt-BR":"Portugu\u00eas (Brasil)","pt-PT":"Portugu\u00eas (Portugal)","qu-PE":"Qhichwa","rm-CH":"Rumantsch",ro:"Rom\u00e2n\u0103","ro-RO":"Rom\u00e2n\u0103",ru:"\u0420\u0443\u0441\u0441\u043a\u0438\u0439", +"ru-RU":"\u0420\u0443\u0441\u0441\u043a\u0438\u0439","sa-IN":"\u0938\u0902\u0938\u094d\u0915\u0943\u0924\u092e\u094d","se-NO":"Davvis\u00e1megiella","si-LK":"\u0db4\u0dc5\u0dcf\u0dad",sk:"Sloven\u010dina","sk-SK":"Sloven\u010dina (Slovakia)",sl:"Sloven\u0161\u010dina","sl-SI":"Sloven\u0161\u010dina","so-SO":"Soomaaliga",sq:"Shqip","sq-AL":"Shqip",sr:"\u0421\u0440\u043f\u0441\u043a\u0438","sr-RS":"\u0421\u0440\u043f\u0441\u043a\u0438 (Serbia)",su:"Basa Sunda",sv:"Svenska","sv-SE":"Svenska",sw:"Kiswahili", +"sw-KE":"Kiswahili",ta:"\u0ba4\u0bae\u0bbf\u0bb4\u0bcd","ta-IN":"\u0ba4\u0bae\u0bbf\u0bb4\u0bcd",te:"\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41","te-IN":"\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41",tg:"\u0437\u0430\u0431\u043e\u0301\u043d\u0438 \u0442\u043e\u04b7\u0438\u043a\u04e3\u0301","tg-TJ":"\u0442\u043e\u04b7\u0438\u043a\u04e3",th:"\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22","th-TH":"\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22 (\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e44\u0e17\u0e22)",tl:"Filipino","tl-PH":"Filipino", +tlh:"tlhIngan-Hol",tr:"T\u00fcrk\u00e7e","tr-TR":"T\u00fcrk\u00e7e","tt-RU":"\u0442\u0430\u0442\u0430\u0440\u0447\u0430",uk:"\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430","uk-UA":"\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430",ur:"\u0627\u0631\u062f\u0648","ur-PK":"\u0627\u0631\u062f\u0648",uz:"O'zbek","uz-UZ":"O'zbek",vi:"Ti\u1ebfng Vi\u1ec7t","vi-VN":"Ti\u1ebfng Vi\u1ec7t","xh-ZA":"isiXhosa",yi:"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9","yi-DE":"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9 (German)", +zh:"\u4e2d\u6587","zh-HANS":"\u4e2d\u6587\u7b80\u4f53","zh-HANT":"\u4e2d\u6587\u7e41\u9ad4","zh-CN":"\u4e2d\u6587\uff08\u4e2d\u56fd\uff09","zh-HK":"\u4e2d\u6587\uff08\u9999\u6e2f\uff09","zh-SG":"\u4e2d\u6587\uff08\u65b0\u52a0\u5761\uff09","zh-TW":"\u4e2d\u6587\uff08\u53f0\u7063\uff09","zu-ZA":"isiZulu"},wo=u(Object.keys(vo)),xo=wo.next();!xo.done;xo=wo.next()){var yo=xo.value;vo[yo.toLowerCase()]=vo[yo]};function zo(a,b){if(a.lineBreak)return"\n";if(a.nestedCues.length)return a.nestedCues.map(function(g){return zo(g,a)}).join("");if(!a.payload)return a.payload;var c=[],d=a.fontWeight>=Le,e=a.fontStyle==Me,f=a.textDecoration.includes(Ne);d&&c.push(["b"]);e&&c.push(["i"]);f&&c.push(["u"]);e=a.color;""==e&&b&&(e=b.color);d="";(e=Ao(e))&&(d+="."+e);e=a.backgroundColor;""==e&&b&&(e=b.backgroundColor);(b=Ao(e))&&(d+=".bg_"+b);d&&c.push(["c",d]);return c.reduceRight(function(g,h){var k=u(h);h=k.next().value; +k=k.next().value;return"<"+h+(void 0===k?"":k)+">"+g+""},a.payload)} +function Ao(a){a=a.toLowerCase();var b=a.replace(/\s/g,"").match(/^rgba?\((\d+),(\d+),(\d+),?([^,\s)]+)?/i);b?a="#"+(parseInt(b[1],10)|256).toString(16).slice(1)+(parseInt(b[2],10)|256).toString(16).slice(1)+(parseInt(b[3],10)|256).toString(16).slice(1):a.startsWith("#")&&7>>0).toString()}if(a.startTime>=a.endTime)return null;var c=new VTTCue(a.startTime,a.endTime,a.payload);c.id=b(a.startTime.toString())+b(a.endTime.toString())+b(a.payload);c.lineAlign=a.lineAlign;c.positionAlign=a.positionAlign;a.size&&(c.size=a.size);try{c.align=a.textAlign}catch(d){}"center"==a.textAlign&&"center"!=c.align&&(c.align="middle");"vertical-lr"==a.writingMode?c.vertical="lr":"vertical-rl"==a.writingMode&& +(c.vertical="rl");1==a.lineInterpretation&&(c.snapToLines=!1);null!=a.line&&(c.line=a.line);null!=a.position&&(c.position=a.position);return c} +function Eo(a,b){var c=Bo(b),d=[];b=a.cues?Array.from(a.cues):[];c=u(c);for(var e=c.next(),f={};!e.done;f={yd:void 0},e=c.next())f.yd=e.value,!b.some(function(g){return function(h){return h.startTime==g.yd.startTime&&h.endTime==g.yd.endTime&&h.text==g.yd.payload?!0:!1}}(f))&&f.yd.payload&&(e=Do(f.yd))&&d.push(e);b=d.slice().sort(function(g,h){return g.startTime!=h.startTime?g.startTime-h.startTime:g.endTime!=h.endTime?g.endTime-h.startTime:"line"in VTTCue.prototype?d.indexOf(h)-d.indexOf(g):d.indexOf(g)- +d.indexOf(h)});b=u(b);for(c=b.next();!c.done;c=b.next())a.addCue(c.value)}function Fo(a,b){var c=!1;"disabled"===a.mode&&(c=!0,a.mode="hidden");for(var d=0;dd&&"hidden"=== +g.track.mode&&(d=f)}e=u(b.i);for(f=e.next();!f.done;f=e.next())g=u(f.value),f=g.next().value,g=g.next().value,f!==d&&"disabled"!==g.track.mode&&(g.track.mode="disabled");b.g!==d&&(b.g=d,-1this.g)return!1;Fo(this.i.get(this.g).track,function(c){return c.startTimea});return!0}; +p.append=function(a){!this.j||0>this.g||Eo(this.i.get(this.g).track,a)};p.destroy=function(){this.h&&(this.j&&this.C(),this.h=null);this.l&&(this.l.release(),this.l=null);return Promise.resolve()};p.isTextVisible=function(){return this.u}; +p.setTextVisibility=function(a){this.u=a;if(-1a});return!0}; +p.append=function(a){this.g&&Eo(this.g,a)};p.destroy=function(){this.g&&(Fo(this.g,function(){return!0}),this.g.mode="disabled");this.g=this.h=null;return Promise.resolve()};p.isTextVisible=function(){return this.g?"showing"==this.g.mode:!1};p.setTextVisibility=function(a){a&&!this.g&&Jo(this);this.g&&(this.g.mode=a?"showing":"hidden")};p.setTextLanguage=function(){};p.enableTextDisplayer=function(){Jo(this)};function Jo(a){a.h&&!a.g&&(a.g=a.h.addTextTrack("subtitles",a.i),a.g.mode="hidden")} +S("shaka.text.SimpleTextDisplayer",Io);Io.prototype.enableTextDisplayer=Io.prototype.enableTextDisplayer;Io.prototype.setTextLanguage=Io.prototype.setTextLanguage;Io.prototype.setTextVisibility=Io.prototype.setTextVisibility;Io.prototype.isTextVisible=Io.prototype.isTextVisible;Io.prototype.destroy=Io.prototype.destroy;Io.prototype.append=Io.prototype.append;Io.prototype.remove=Io.prototype.remove;Io.prototype.configure=Io.prototype.configure;function Ko(){}p=Ko.prototype;p.configure=function(){};p.remove=function(){};p.append=function(){};p.destroy=function(){};p.isTextVisible=function(){return!1};p.setTextVisibility=function(){};p.setTextLanguage=function(){};p.enableTextDisplayer=function(){};S("shaka.text.StubTextDisplayer",Ko);Ko.prototype.enableTextDisplayer=Ko.prototype.enableTextDisplayer;Ko.prototype.setTextLanguage=Ko.prototype.setTextLanguage;Ko.prototype.setTextVisibility=Ko.prototype.setTextVisibility; +Ko.prototype.isTextVisible=Ko.prototype.isTextVisible;Ko.prototype.destroy=Ko.prototype.destroy;Ko.prototype.append=Ko.prototype.append;Ko.prototype.remove=Ko.prototype.remove;Ko.prototype.configure=Ko.prototype.configure;function Lo(a,b){var c=this;this.m=!1;this.h=[];this.j=a;this.s=b;this.C=this.u=null;this.g=W("div");this.g.classList.add("shaka-text-container");this.g.style.textAlign="center";this.g.style.display="flex";this.g.style.flexDirection="column";this.g.style.alignItems="center";this.g.style.justifyContent="flex-end";this.B=new yf(function(){c.j.paused||Mo(c)});No(this);this.l=new Map;this.i=new Oc;this.i.o(document,"fullscreenchange",function(){Mo(c,!0)});this.i.o(this.j,"seeking",function(){Mo(c,!0)}); +this.i.o(this.j,"ratechange",function(){No(c)});this.i.o(this.j,"resize",function(){var d=c.j,e=d.videoWidth;d=d.videoHeight;e&&d?c.u=e/d:c.u=null});this.D=null;"ResizeObserver"in window&&(this.D=new ResizeObserver(function(){Mo(c,!0)}),this.D.observe(this.g));this.F=new Map}p=Lo.prototype;p.configure=function(a){this.C=a;No(this);Mo(this,!0)}; +p.append=function(a){var b=[].concat(x(this.h));a=u(Co(a));for(var c=a.next(),d={};!c.done;d={Jg:void 0},c=a.next())d.Jg=c.value,b.some(function(e){return function(f){return Ae(f,e.Jg)}}(d))||this.h.push(d.Jg);this.h.length&&No(this);Mo(this)}; +p.destroy=function(){if(!this.g)return Promise.resolve();this.g.parentElement&&this.s.removeChild(this.g);this.g=null;this.m=!1;this.h=[];this.B&&(this.B.stop(),this.B=null);this.l.clear();this.i&&(this.i.release(),this.i=null);this.D&&(this.D.disconnect(),this.D=null);return Promise.resolve()};p.remove=function(a,b){if(!this.g)return!1;var c=this.h.length;this.h=this.h.filter(function(d){return d.startTime=b});Mo(this,c>this.h.length);this.h.length||No(this);return!0}; +p.isTextVisible=function(){return this.m};p.setTextVisibility=function(a){(this.m=a)?(this.g.parentElement||this.s.appendChild(this.g),Mo(this,!0)):this.g.parentElement&&this.s.removeChild(this.g)};p.setTextLanguage=function(a){a&&"und"!=a?this.g.setAttribute("lang",a):this.g.setAttribute("lang","")};p.enableTextDisplayer=function(){};function No(a){a.B&&(a.h.length?a.B.ya((a.C?a.C.captionsUpdatePeriod:.25)/Math.max(1,Math.abs(a.j.playbackRate))):a.B.stop())} +function Oo(a,b){for(;null!=b;){if(b==a.g)return!0;b=b.parentElement}return!1} +function Po(a,b,c,d,e){var f=!1,g=[],h=[];b=u(b);for(var k=b.next();!k.done;k=b.next()){k=k.value;e.push(k);var l=a.l.get(k),m=k.startTime<=d&&k.endTime>d,n=l?l.Yj:null;l&&(g.push(l.Kg),l.gd&&g.push(l.gd),m||(f=!0,a.l.delete(k),l=null));m&&(h.push(k),l?Oo(a,n)||(f=!0):(Qo(a,k,e),l=a.l.get(k),n=l.Yj,f=!0));0a.u&&(h=32),d=0>d?100+d/h*100:d/h*100),1==g&&(f.position="absolute",c.writingMode==se?(f.width="100%",c.lineAlign==ue?f.top=d+"%":"end"==c.lineAlign&&(f.bottom=100-d+"%")):"vertical-lr"==c.writingMode?(f.height="100%",c.lineAlign==ue?f.left=d+"%":"end"==c.lineAlign&&(f.right=100-d+"%")):(f.height="100%",c.lineAlign==ue?f.right=d+"%":"end"==c.lineAlign&&(f.left=100-d+"%")))); +f.lineHeight=c.lineHeight;a=So(c);"line-left"==a?(f.cssFloat="left",null!==c.position&&(f.position="absolute",c.writingMode==se?(f.left=c.position+"%",f.width="auto"):f.top=c.position+"%")):"line-right"==a?(f.cssFloat="right",null!==c.position&&(f.position="absolute",c.writingMode==se?(f.right=100-c.position+"%",f.width="auto"):f.bottom=c.position+"%")):null!==c.position&&50!=c.position&&(f.position="absolute",c.writingMode==se?(f.left=c.position+"%",f.width="auto"):f.top=c.position+"%");f.textAlign= +c.textAlign;f.textDecoration=c.textDecoration.join(" ");f.writingMode=c.writingMode;"writingMode"in document.documentElement.style&&f.writingMode==c.writingMode||(f.webkitWritingMode=c.writingMode);c.size&&(c.writingMode==se?f.width=c.size+"%":f.height=c.size+"%")} +function To(a,b,c,d){d=void 0===d?1:d;var e=(e=(new RegExp(/(\d*\.?\d+)([a-z]+|%+)/)).exec(a))?{value:Number(e[1]),unit:e[2]}:null;if(!e)return a;a=e.unit;d*=e.value;switch(a){case "%":return d/100*c.clientHeight/b.cellResolution.rows+"px";case "c":return c.clientHeight*d/b.cellResolution.rows+"px";default:return d+a}}function Uo(a,b){for(var c=a.length-1;0<=c;c--){var d=b(a[c]);if(d||0===d)return d}return null}S("shaka.text.UITextDisplayer",Lo);Lo.prototype.enableTextDisplayer=Lo.prototype.enableTextDisplayer; +Lo.prototype.setTextLanguage=Lo.prototype.setTextLanguage;Lo.prototype.setTextVisibility=Lo.prototype.setTextVisibility;Lo.prototype.isTextVisible=Lo.prototype.isTextVisible;Lo.prototype.remove=Lo.prototype.remove;Lo.prototype.destroy=Lo.prototype.destroy;Lo.prototype.append=Lo.prototype.append;Lo.prototype.configure=Lo.prototype.configure;function Vo(a,b){function c(f){for(var g=f,h=u(b),k=h.next();!k.done;k=h.next())k=k.value,k.end&&k.startf?"0":"")+f+":"+(10>h?"0":"")+h+":"+(10>k?"0":"")+k+"."+(100>g?10>g?"00":"0":"")+g}var d=Bo(a);a="WEBVTT\n\n";d=u(d);for(var e=d.next();!e.done;e=d.next())e=e.value,a+=c(e.startTime)+" --\x3e "+c(e.endTime)+function(f){var g=[];switch(f.textAlign){case "left":g.push("align:left"); +break;case "right":g.push("align:right");break;case pe:g.push("align:middle");break;case "start":g.push("align:start");break;case "end":g.push("align:end")}switch(f.writingMode){case "vertical-lr":g.push("vertical:lr");break;case "vertical-rl":g.push("vertical:rl")}return g.length?" "+g.join(" "):""}(e)+"\n",a+=e.payload+"\n\n";return a}S("shaka.text.WebVttGenerator",function(){});function Wo(a,b){this.h=a;this.g=b;this.i=void 0;this.u=!1;this.F=!0;this.l=this.C=!1;this.s=this.m=void 0;this.B=0;this.G=!1;this.D=new Oc;this.j=null}Wo.prototype.setMediaElement=function(a){this.j=a;Xo(this)};Wo.prototype.configure=function(a){this.g=a};function Yo(a){a.u=!1;a.F=!0;a.C=!1;a.l=!1;a.m=0;a.s=0;a.B=0;a.G=!1;a.j=null;a.D.Sa()}function Zo(a,b){a.l=b;a.l?a.i==$o?a.i=ap:a.i==bp&&(a.i=cp):a.i==ap?a.i=$o:a.i==cp&&(a.i=bp)} +function dp(a,b){if(a.g&&a.g.enabled&&a.g.version==ep&&a.j&&a.j.autoplay){var c=a.j.play();c&&c.then(function(){a.B=b}).catch(function(){a.B=0})}} +function fp(a,b,c){try{if(!a.g.enabled)return b;var d=gp(a);a:{switch(c.toLowerCase()){case "audio/mp4":case "audio/webm":case "audio/ogg":case "audio/mpeg":case "audio/aac":case "audio/flac":case "audio/wav":var e=hp;break a;case "video/webm":case "video/mp4":case "video/mpeg":case "video/mp2t":e=ip;break a;case "application/x-mpegurl":case "application/vnd.apple.mpegurl":case "application/dash+xml":case "video/vnd.mpeg.dash.mpd":case "application/vnd.ms-sstr+xml":e=jp;break a}e=void 0}d.ot=e;d.su= +!0;var f=kp(d);return lp(b,f)}catch(g){return bb("CMCD_SRC_ERROR","Could not generate src CMCD data.",g),b}}function Xo(a){a.D.qa(a.j,"play",function(){a.m||(a.m=Date.now())});a.D.qa(a.j,"playing",function(){a.s||(a.s=Date.now())})}function gp(a){a.g.sessionId||(a.g.sessionId=window.crypto.randomUUID());return{v:a.g.version,sf:a.i,sid:a.g.sessionId,cid:a.g.contentId,mtp:a.h.getBandwidthEstimate()/1E3}} +function mp(a,b,c){c=void 0===c?{}:c;var d=void 0===d?a.g.useHeaders:d;if(a.g.enabled)if(a=np(a,c),d)d=op(a),Object.keys(d).length&&Object.assign(b.headers,d);else{var e=kp(a);e&&(b.uris=b.uris.map(function(f){return lp(f,e)}))}}function pp(a,b){var c=a.g.includeKeys;return c.length?Object.keys(b).reduce(function(d,e){c.includes(e)&&(d[e]=b[e]);return d},{}):b} +function qp(a){if(0===a.type)return rp;if(a=a.stream){var b=a.type;if("video"==b)return a.codecs&&a.codecs.includes(",")?ip:sp;if("audio"==b)return hp;if("text"==b)return"application/mp4"===a.mimeType?tp:up}}function vp(a,b){b=a.h.Pb()[b];if(!b.length)return NaN;var c=a.h.getCurrentTime();return(a=b.find(function(d){return d.start<=c&&d.end>=c}))?1E3*(a.end-c):NaN} +function wp(a,b){b=a.h.Pb()[b];if(!b.length)return 0;var c=a.h.getCurrentTime();return(a=b.find(function(d){return d.start<=c&&d.end>=c}))?1E3*(a.end-c):0}function xp(a,b){var c=a.h.kb();if(!c.length)return NaN;a=c[0];c=u(c);for(var d=c.next();!d.done;d=c.next())d=d.value,"variant"===d.type&&d.bandwidth>a.bandwidth&&(a=d);switch(b){case sp:return a.videoBandwidth||NaN;case hp:return a.audioBandwidth||NaN;default:return a.bandwidth}} +function np(a,b){b=void 0===b?{}:b;Object.assign(b,gp(a));b.pr=a.h.Ya();var c=b.ot===sp||b.ot===ip;a.C&&c&&(b.bs=!0,b.su=!0,a.C=!1);null==b.su&&(b.su=a.F);b.v===ep&&(a.h.T()&&(b.ltc=a.h.pf()),c=!a.G&&a.s&&a.m?a.s-(a.B||a.m):void 0,void 0!=c&&(b.msd=c,a.G=!0));return pp(a,b)} +function kp(a){function b(n){return 100*c(n/100)}function c(n){return Math.round(n)}function d(n){return!Number.isNaN(n)&&null!=n&&""!==n&&!1!==n}var e=[],f={br:c,d:c,bl:b,dl:b,mtp:b,nor:function(n){return encodeURIComponent(n)},rtp:b,tb:c},g=Object.keys(a||{}).sort();g=u(g);for(var h=g.next();!h.done;h=g.next()){h=h.value;var k=a[h];if(d(k)&&("v"!==h||1!==k)&&("pr"!=h||1!==k)){var l=f[h];l&&(k=l(k));l=typeof k;var m=void 0;m="string"===l&&"ot"!==h&&"sf"!==h&&"st"!==h?h+"="+JSON.stringify(k):"boolean"=== +l?h:"symbol"===l?h+"="+k.description:h+"="+k;e.push(m)}}return e.join(",")}function op(a){var b=Object.keys(a),c={},d=["Object","Request","Session","Status"],e=[{},{},{},{}],f={br:0,d:0,ot:0,tb:0,bl:1,dl:1,mtp:1,nor:1,nrr:1,su:1,ltc:1,cid:2,pr:2,sf:2,sid:2,st:2,v:2,msd:2,bs:3,rtp:3};b=u(b);for(var g=b.next();!g.done;g=b.next())g=g.value,e[null!=f[g]?f[g]:1][g]=a[g];for(a=0;a=c?a*(1-c)+b*c:a};function Rp(a){return a?"false"===a.toLowerCase()?!1:/^[-0-9]/.test(a)?parseInt(a,10):a.replace(/["]+/g,""):!0}S("shaka.util.CmsdManager",yp);yp.prototype.getBandwidthEstimate=yp.prototype.getBandwidthEstimate;yp.prototype.getRoundTripTime=yp.prototype.Wk;yp.prototype.getResponseDelay=yp.prototype.Vk;yp.prototype.getEstimatedThroughput=yp.prototype.Oi; +yp.prototype.getMaxBitrate=yp.prototype.Pi;var Ap="etp",zp="mb",Bp="rd",Qp="rtt";function Sp(){this.g=null;this.h=[]}function Tp(a,b){return Q(function(c){if(1==c.g)return a.g?F(c,new Promise(function(d){return a.h.push(d)}),2):c.A(2);a.g=b;H(c)})}Sp.prototype.release=function(){0B.end&&(B.end=D.end)}return B};d.sa=new dm(q);d.sa.addEventListener("regionadd", +function(A){qq(d,A.region,"metadataadded")});if(m)return F(z,k(function(){return Q(function(A){return F(A,rq(d,c),0)})},"initializeSrcEqualsDrmInner_"),23);d.Ta=new dm(q);return F(z,k(function(){return Q(function(A){if(1==A.g)return F(A,Promise.race([e.na,e.u]),2);d.vc=e.G;var B=e;B.oa=!0;d.G=B.l;d.i=e.hh();H(A)})},"waitForFinish"),15);case 15:if(d.I){z.A(16);break}return F(z,k(function(){return Q(function(A){return F(A,mq(d),0)})},"initializeMediaSourceEngineInner_"),16);case 16:return d.i&&d.i.textStreams.length&& +(d.s.enableTextDisplayer?d.s.enableTextDisplayer():Uc("Text displayer w/ enableTextDisplayer",'Text displayer should have a "enableTextDisplayer" method!')),F(z,k(function(){return Q(function(A){return F(A,e.u,0)})},"waitForFinish"),18);case 18:d.g=e.getConfiguration();d.Ke=e.F;d.G&&d.G.setMediaElement&&d.h&&d.G.setMediaElement(d.h);d.Ee=eo(e);d.De=e.Ma;if(r=e.B)d.N=r;l&&d.h&&"AUDIO"===d.h.nodeName&&(sq(d),d.configure("manifest.disableVideo",!0));if(e.i){z.A(19);break}return F(z,k(function(){return Q(function(A){return F(A, +jo(e,d.h),0)})},"drmEngine_.init"),19);case 19:return d.D=fo(e),F(z,k(function(){return Q(function(A){return F(A,d.D.$b(d.h),0)})},"drmEngine_.attach"),21);case 21:return!(t=e.D)||d.Ma&&d.Ma==t||(d.u=co(e),d.Ma=e.D,"function"!=typeof d.u.setMediaElement&&(Uc("AbrManager w/o setMediaElement","Please use an AbrManager with setMediaElement function."),d.u.setMediaElement=function(){}),"function"!=typeof d.u.setCmsdManager&&(Uc("AbrManager w/o setCmsdManager","Please use an AbrManager with setCmsdManager function."), +d.u.setCmsdManager=function(){}),"function"!=typeof d.u.trySuggestStreams&&(Uc("AbrManager w/o trySuggestStreams","Please use an AbrManager with trySuggestStreams function."),d.u.trySuggestStreams=function(){})),w=go(e),v=e.J,F(z,k(function(){return Q(function(A){return F(A,tq(d,n,v,w),0)})},"loadInner_"),22);case 22:ao(e);d.tc&&Rb().dg()&&lf(d.tc)&&zk(d.I,d.U,d.tc);z.A(14);break;case 23:return F(z,k(function(){return Q(function(A){return F(A,uq(d,n,c),0)})},"srcEqualsInner_"),14);case 14:d.dispatchEvent(dq("loaded")); +case 6:ya(z);if(!e){z.A(25);break}return F(z,e.destroy(),25);case 25:d.Ka=null;Ba(z,0);break;case 5:y=xa(z);if(!y||7E3==y.code){z.A(27);break}return F(z,d.kc(!1),27);case 27:throw y;}})};function sq(a){for(var b=u(a.i.variants),c=b.next();!c.done;c=b.next())c=c.value,c.video&&(c.video.closeSegmentIndex(),c.video=null),c.bandwidth=c.audio&&c.audio.bandwidth?c.audio.bandwidth:0;a.i.variants=a.i.variants.filter(function(d){return d.audio})} +p.nm=function(a,b){a=void 0===a?!0:a;b=void 0===b?!1:b;var c=this,d;return Q(function(e){return 1==e.g?F(e,vq(c),2):3!=e.g?(d=e.h,F(e,c.kc(a,b),3)):e.return(d)})};p.Ji=function(a,b){a=void 0===a?!1:a;b=void 0===b?!1:b;var c=this,d;return Q(function(e){return 1==e.g?F(e,vq(c,b),2):3!=e.g?(d=e.h,F(e,c.detach(a),3)):e.return(d)})}; +function vq(a,b){b=void 0===b?!1:b;var c,d;return Q(function(e){if(1==e.g){c=null;if(!(a.i&&a.G&&a.vc&&a.U&&a.g))return e.A(2);d=a.h.currentTime;a.T()&&!b&&(d=null);return F(e,wq(a,a.U,d,a.tc,a.g,!0,!1,!1),3)}if(2!=e.g){c=e.h;a.Oe.push(c);a.G&&a.G.setMediaElement&&a.G.setMediaElement(null);var f=c,g=a.G,h=a.vc;f.h=a.i;f.l=g;f.G=h;f=c;g=a.Ma;f.j=a.u;f.D=g;c.B=a.N;c.start();a.i=null;a.G=null;a.vc=null;a.u=null;a.Ma=null}return e.return(c)})} +p.preload=function(a,b,c,d){b=void 0===b?null:b;var e=this,f,g;return Q(function(h){if(1==h.g)return f=Vp(e),Nn(f,d||e.g,Vp(e)),F(h,pq(e,a,b,c,!1,f),2);(g=h.h)?g.start():lq(e,new V(2,7,7005));return h.return(g)})};p.Ng=function(){var a=this,b,c,d,e;return Q(function(f){b=[];c=u(a.Oe);for(d=c.next();!d.done;d=c.next())e=d.value,e.s||b.push(e.destroy());a.Oe=[];return F(f,Promise.all(b),0)})}; +function pq(a,b,c,d,e,f){e=void 0===e?!1:e;var g,h,k,l,m;return Q(function(n){if(1==n.g)return d?n.A(2):F(n,oq(a,b),3);2!=n.g&&(d=n.h);if(g=xq(a,d))return n.return(null);h=f||a.g;k=!1;l=!0;e&&(a.u&&a.Ma==h.abrFactory&&(l=!1),a.h&&"AUDIO"===a.h.nodeName&&(k=!0));m=wq(a,b,c,d||null,h,!e,k,l);m=e?m.then(function(q){q.C=!1;return q}):m.then(function(q){a.Oe.push(q);return q});return n.return(m)})} +function wq(a,b,c,d,e,f,g,h){f=void 0===f?!0:f;g=void 0===g?!1:g;h=void 0===h?!0:h;var k,l,m,n,q,r,t,w,v,y,z,A,B,D,G;return Q(function(C){if(1==C.g){k=null;l=Dd(e);g&&(l.manifest.disableVideo=!0);m=function(){return k.P&&k.s?null:k};n=function(){return m()?m().getConfiguration():a.g};if(Infinity!=a.oa.width||Infinity!=a.oa.height||a.g.ignoreHardwareResolution)return C.A(2);q=Rb();return F(C,q.mc(),3)}2!=C.g&&(r=C.h,a.oa.width=r.width,a.oa.height=r.height);t=new ti(l,a.oa,null);w={networkingEngine:a.H, +filter:function(E){var I,K;return Q(function(J){if(1==J.g)return F(J,ui(t,E),2);if(4!=J.g){I=J.h;if(!I)return J.A(0);K=dq("trackschanged");return F(J,Promise.resolve(),4)}k.dispatchEvent(K);H(J)})},makeTextStreamsForClosedCaptions:function(E){return yq(a,E)},onTimelineRegionAdded:function(E){em(k.H,E)},onEvent:function(E){return k.dispatchEvent(E)},onError:function(E){return k.onError(E)},isLowLatencyMode:function(){return n().streaming.lowLatencyMode},updateDuration:function(){a.l&&k.P&&a.l.updateDuration()}, +newDrmInfo:function(E){var I=k.i,K=I?I.h:null;K&&I.B&&xi(t,K.keySystem,E)},onManifestUpdated:function(){var E=(new Map).set("isLive",a.T());k.dispatchEvent(dq("manifestupdated",E));$n(k,!1,function(){if(a.C)a.C.onManifestUpdated(a.T())})},getBandwidthEstimate:function(){return a.u.getBandwidthEstimate()},onMetadata:function(E,I,K,J){var L=E;if("com.apple.hls.interstitial"==E&&(L="com.apple.quicktime.HLS",E={startTime:I,endTime:K,values:J},a.C))a.C.onHLSInterstitialMetadata(a,a.h,E);J=u(J);E=J.next(); +for(var M={};!E.done;M={Hh:void 0},E=J.next())M.Hh=E.value,"ID"!=M.Hh.name&&$n(k,!1,function(O){return function(){zq(a,I,K,L,O.Hh)}}(M))},disableStream:function(E){return a.disableStream(E,a.g.streaming.maxDisabledTime)},addFont:function(E,I){return a.addFont(E,I)}};v=new dm(function(){return a.xa()});v.addEventListener("regionadd",function(E){var I=E.region;Aq(a,"timelineregionadded",I,k);$n(k,!1,function(){a.C&&(a.C.onDashTimedMetadata(I),a.C.onDASHInterstitialMetadata(a,a.h,I))})});y=null;l.streaming.observeQualityChanges&& +(y=new Yl(function(){return a.Pb()}),y.addEventListener("qualitychange",function(E){Bq(a,E.quality,E.position)}),y.addEventListener("audiotrackchange",function(E){Bq(a,E.quality,E.position,!0)}));z=!0;A={uc:a.H,onError:function(E){return k.onError(E)},Kf:function(E){$n(k,!0,function(){if(a.D)a:{var I=E,K=dq("keystatuschanged");a.dispatchEvent(K);var J=Object.keys(I);1==J.length&&""==J[0]&&(J=["00"],I={"00":I[""]});K=1==J.length&&"00"==J[0];var L=!1;if(J.length){J=a.keySystem();for(var M=fh(a.g.drm.clearKeys), +O=u(a.i.variants),N=O.next();!N.done;N=O.next()){N=N.value;var P=[];N.audio&&P.push(N.audio);N.video&&P.push(N.video);P=u(P);for(var R=P.next();!R.done;R=P.next()){var T=R.value;R=N.allowedByKeySystem;if(T.keyIds.size)if(T.drmInfos.length&&!M.size){T=u(T.drmInfos);for(var ca=T.next();!ca.done;ca=T.next())if(ca=ca.value,ca.keyIds.size&&ca.keySystem==J){N.allowedByKeySystem=!0;ca=u(ca.keyIds);for(var Y=ca.next();!Y.done;Y=ca.next())if(Y=Y.value,(Y=I[K?"00":Y])||a.D.F)N.allowedByKeySystem=N.allowedByKeySystem&& +!!Y&&!zi.includes(Y)}}else for(N.allowedByKeySystem=!0,T=u(T.keyIds),ca=T.next();!ca.done;ca=T.next())if(ca=ca.value,(ca=I[K?"00":ca])||a.D.F)N.allowedByKeySystem=N.allowedByKeySystem&&!!ca&&!zi.includes(ca);R!=N.allowedByKeySystem&&(L=!0)}}}if(L&&(Cq(a),!Dq(a)))break a;(I=a.l.l)&&!I.allowedByKeySystem&&aq(a)}})},onExpirationUpdated:function(E,I){var K=dq("expirationupdated");k.dispatchEvent(K);if((K=k.l)&&K.onExpirationUpdated)K.onExpirationUpdated(E,I)},onEvent:function(E){k.dispatchEvent(E);"drmsessionupdate"== +E.type&&z&&(z=!1,E=Date.now()/1E3-k.Ha,(a.B||k.getStats()).m=E,a.P&&$c(a.P))}};B=Xp(a,m);Vg(a.H,B);D=function(){return a.sd(A)};G={config:l,Fl:w,Ql:v,Pl:y,sd:D,El:t,networkingEngine:B,dk:f,ck:h};k=new Zn(b,d,c,G);return C.return(k)})}function oq(a,b){var c,d,e;return Q(function(f){if(1==f.g)return c=a.g.manifest.retryParameters,F(f,to(b,a.H,c),2);d=f.h;"application/x-mpegurl"==d&&(e=Rb(),"WEBKIT"===e.Na()&&(d="application/vnd.apple.mpegurl"));return f.return(d)})} +function xq(a,b){if(!Ei(Rb()))return!0;if(b){if(""==(a.h||Fi()).canPlayType(b))return!1;if(!Ei(Rb())||!Ci.has(b))return!0;if(lf(b))return"WEBKIT"===Rb().Na()&&(a.g.drm.servers["com.apple.fps"]||a.g.drm.servers["com.apple.fps.1_0"])?a.g.streaming.useNativeHlsForFairPlay:a.g.streaming.preferNativeHls;if("application/dash+xml"===b||"video/vnd.mpeg.dash.mpd"===b)return a.g.streaming.preferNativeDash}return!1} +function Eq(a){var b=a.g.textDisplayFactory;b!==a.Se&&(a.s=b(),a.s.configure?a.s.configure(a.g.textDisplayer):Uc("Text displayer w/ configure",'Text displayer should have a "configure" method!'),a.Se=b,a.s.setTextVisibility(a.na))} +function mq(a){var b,c,d;return Q(function(e){if(1==e.g)return Rb(),iq(a,"media-source"),a.g.mediaSource.useSourceElements&&Mj(a.h),Eq(a),b=Fq(a.h,a.s,{Ik:function(){return a.keySystem()},onMetadata:function(f,g,h){f=u(f);for(var k=f.next();!k.done;k=f.next())if(k=k.value,k.data&&"number"==typeof k.cueTime&&k.frames){var l=k.cueTime+g,m=h;m&&l>m&&(m=l);for(var n=u(k.frames),q=n.next();!q.done;q=n.next())zq(a,l,m,"org.id3",q.value);if(a.C)a.C.onHlsTimedMetadata(k,l)}},Kl:function(f){a.Ta&&em(a.Ta, +{schemeIdUri:f.schemeIdUri,startTime:f.startTime,endTime:f.endTime,id:String(f.id),emsg:f})},onEvent:function(f){return a.dispatchEvent(f)},Ml:function(){a.G&&a.G.update&&a.G.update()}},a.P,a.g.mediaSource),c=a.g.manifest,d=c.segmentRelativeVttTiming,b.Ha=d,F(e,b.J,2);a.I=b;H(e)})} +function Gq(a,b,c){function d(){return Hq(a)}a.j.o(b,"playing",d);a.j.o(b,"pause",d);a.j.o(b,"ended",d);a.j.o(b,"ratechange",function(){var f=a.h.playbackRate;0!=f&&(a.J&&(a.J.set(f),a.m==Iq&&a.u.playbackRateChanged(f),Jq(a,f)),f=dq("ratechange"),a.dispatchEvent(f))});b.remote&&(a.j.o(b.remote,"connect",function(){a.l&&"connected"==b.remote.state&&Kq(a);Cq(a)}),a.j.o(b.remote,"connecting",function(){return Cq(a)}),a.j.o(b.remote,"disconnect",function(){return Q(function(f){if(1==f.g)return a.l&&"disconnected"== +b.remote.state?F(f,Qm(a.l),3):f.A(2);2!=f.g&&Kq(a);Cq(a);H(f)})}));b.audioTracks&&(a.j.o(b.audioTracks,"addtrack",function(){return Cq(a)}),a.j.o(b.audioTracks,"removetrack",function(){return Cq(a)}),a.j.o(b.audioTracks,"change",function(){return Cq(a)}));b.videoTracks&&(a.j.o(b.videoTracks,"addtrack",function(){return Cq(a)}),a.j.o(b.videoTracks,"removetrack",function(){return Cq(a)}),a.j.o(b.videoTracks,"change",function(){return Cq(a)}));if(b.textTracks){var e=function(){a.m===Lq&&a.s instanceof +Go&&Kq(a);Cq(a)};a.j.o(b.textTracks,"addtrack",function(f){if(f.track)switch(f=f.track,f.kind){case "metadata":Mq(a,f);break;case "chapters":Nq(a,f);break;default:e()}});a.j.o(b.textTracks,"removetrack",e);a.j.o(b.textTracks,"change",e);"keep"!==a.g.streaming.crossBoundaryStrategy&&(a.j.o(b,"waiting",function(){a.l&&Um(a.l)}),a.j.o(b,"timeupdate",function(){a.l&&Um(a.l)}))}"none"!=b.preload&&a.j.qa(b,"loadedmetadata",function(){a.B.F=Date.now()/1E3-c})} +function tq(a,b,c,d){var e,f,g,h,k,l,m,n,q,r,t,w,v,y,z,A,B,D,G,C,E,I,K,J,L,M,O,N;return Q(function(P){switch(P.g){case 1:iq(a,"load");e=a.h;a.J=new Ul({qf:function(){return e.playbackRate},Uc:function(){return e.defaultPlaybackRate},Wh:function(R){e.playbackRate=R},gj:function(R){e.currentTime+=R}});Gq(a,e,b);"onchange"in window.screen&&a.j.o(window.screen,"change",function(){if(a.N.getConfiguration){var R=a.N.getConfiguration();"AUTO"==R.Gc?Dq(a):"AUTO"==a.g.preferredVideoHdrLevel&&a.g.abr.enabled&& +(R.Gc="AUTO",a.N.configure(R),Dq(a))}});f=!1;g=u(a.i.variants);for(h=g.next();!h.done;h=g.next())k=h.value,(l=k.video&&k.video.dependencyStream)&&(f=ad(l));cq(a,a.g,f);a.Id=a.g.preferredTextLanguage;a.Je=a.g.preferredTextRole;a.Ie=a.g.preferForcedSubs;Oq(a.i.presentationTimeline,a.g.playRangeStart,a.g.playRangeEnd);a.u.init(function(R,T,ca){a.i&&a.l&&R!=a.l.l&&Pq(a,R,!0,void 0===T?!1:T,void 0===ca?0:ca)});a.u.setMediaElement(e);a.u.setCmsdManager(a.ea);a.l=Qq(a);a.l.configure(a.g.streaming);a.m=Iq; +a.dispatchEvent(dq("streaming"));m=c;case 2:(q=a.l.l)||m||(m=Dq(a)?a.u.chooseVariant():null);r=[];n=q||m;t=u([n.video,n.audio]);for(w=t.next();!w.done;w=t.next())(v=w.value)&&!v.segmentIndex&&(r.push(v.createSegmentIndex()),v.dependencyStream&&r.push(v.dependencyStream.createSegmentIndex()));if(!(0E&&(B=E);return F(P,Uq(m,B),9);case 9:I=P.h,y(I);case 8:Pq(a,m,!0,!1,0);case 7:return a.F.ready(),K=a.qc().find(function(R){return R.active}), +K||((J=ig(a.i.textStreams,a.Id,a.Je,a.Ie)[0]||null)&&Sn(a.B.h,J,!0),m&&(J?(lg(m.audio,J,a.g)&&(a.na=!0),a.na&&a.s.setTextVisibility(!0)):(a.na=!1,a.s.setTextVisibility(!1)),Vq(a)),J&&(a.g.streaming.alwaysStreamText||a.$c())&&(Om(a.l,J),Wq(a))),F(P,a.l.start(d),10);case 10:a.g.abr.enabled&&(a.u.enable(),Xq(a));Cq(a);Dq(a);a.i.variants.some(function(R){return R.primary});if((L=a.T())&&(a.g.streaming.liveSync&&a.g.streaming.liveSync.enabled||a.i.serviceDescription||a.g.streaming.liveSync.panicMode)|| +a.g.streaming.vodDynamicPlaybackRate)M=function(){return Yq(a)},a.j.o(e,"timeupdate",M);L||(O=function(){return Zq(a)},a.j.o(e,"timeupdate",O),Zq(a),a.i.nextUrl&&(0, the browser will not load anything until play() is called. We are unable to measure load latency in a meaningful way, and we cannot provide track info yet. Please do not use preload="none" with Shaka Player.'), +l.resolve()),a.j.qa(d,"error",function(){l.reject(kq(a))}),F(w,Cf(a.g.streaming.loadTimeout,l),4);case 4:if((n=a.T())&&(a.g.streaming.liveSync&&a.g.streaming.liveSync.enabled||a.g.streaming.liveSync.panicMode)||a.g.streaming.vodDynamicPlaybackRate)q=function(){return Yq(a)},a.j.o(d,"timeupdate",q);n||(r=function(){return Zq(a)},a.j.o(d,"timeupdate",r),Zq(a));a.C&&(a.C.onManifestUpdated(n),n&&(t=a.xa().end,a.j.o(d,"progress",function(){var v=a.xa().end;t!=v&&(a.C.onManifestUpdated(a.T()),t=v)}))); +a.Y=!0;H(w)}})}function cr(a){var b=a.g.preferredAudioLanguage;""!=b&&a.xj(b,a.g.preferredVariantRole)}function er(a){var b=a.g.preferredTextLanguage;""!=b&&a.Rh(b,a.g.preferredTextRole,a.g.preferForcedSubs)} +function Mq(a,b){if("metadata"==b.kind){b.mode="hidden";a.j.o(b,"cuechange",function(){if(b.activeCues)for(var d=u(b.activeCues),e=d.next();!e.done;e=d.next())if(e=e.value,zq(a,e.startTime,e.endTime,e.type,e.value),a.C)a.C.onCueMetadataChange(e.value);if(b.cues){d=[];e=u(b.cues);for(var f=e.next(),g={};!f.done;g={Ac:void 0},f=e.next())g.Ac=f.value,"com.apple.quicktime.HLS"==g.Ac.type&&null!=g.Ac.startTime&&(f=d.find(function(h){return function(k){return k.startTime==h.Ac.startTime&&k.endTime==h.Ac.endTime}}(g)), +f||(f={startTime:g.Ac.startTime,endTime:g.Ac.endTime,values:[]},d.push(f)),f.values.push(g.Ac.value));d=u(d);for(e=d.next();!e.done;e=d.next())e=e.value,e.values.some(function(h){return"X-ASSET-URI"==h.key||"X-ASSET-LIST"==h.key})&&a.C&&(e.values.push({key:"CUE",description:"",data:0!=e.startTime||a.T()?"ONCE":"ONCE,PRE",mimeType:null,pictureType:null}),a.C.onHLSInterstitialMetadata(a,a.h,e))}});var c=(new yf(function(){var d=fr(a);d=u(d);for(var e=d.next();!e.done;e=d.next())e.value.mode="hidden"})).Ja().X(.5); +a.He.push(function(){c.stop()})}}function qq(a,b,c){b=(new Map).set("startTime",b.startTime).set("endTime",b.endTime).set("metadataType",b.schemeIdUri).set("payload",b.payload);a.dispatchEvent(dq(c,b))}function zq(a,b,c,d,e){a.sa&&(b={schemeIdUri:d,startTime:b,endTime:c||Infinity,id:"",payload:e},b.id=JSON.stringify(b),em(a.sa,b))}function Nq(a,b){if(b&&"chapters"==b.kind){b.mode="hidden";var c=(new yf(function(){b.mode="hidden"})).Ja().X(.5);a.He.push(function(){c.stop()})}} +p.Ul=function(){for(var a=this.Z;a.g;)a.release()};p.sd=function(a){return new xh(a)}; +function Xp(a,b){function c(f){b()?b().dispatchEvent(f):a.dispatchEvent(f)}function d(f){b()?$n(b(),!0,f):f()}b||(b=function(){return null});var e=new Rg(function(f,g,h,k,l){var m=b()?b().j:a.u;m&&m.segmentDownloaded(f,g,h,k,l)},function(f,g,h){g=(new Map).set("headers",f).set("request",g).set("requestType",h);c(dq("downloadheadersreceived",g));d(function(){if(a.ea){var k=a.ea;if(k.h.enabled){var l=f["cmsd-static"];if(l)try{var m=new Map,n=l.split(",");for(l=0;lv);if(z){var A=z.next().value;if(A&&A!=q){if(n&&!ud(q.S(),A.S())){var B=A.S()[0],D=new URL(B),G=new URL(n);if(D.origin!==G.origin)var C=B;else{for(var E=D.pathname.split("/").slice(1),I=G.pathname.split("/").slice(1,-1);E[0]===I[0];)E.shift(),I.shift();for(;I.length;)I.shift(),E.unshift("..");C=E.join("/")}r.nor=C}if((A.startByte|| +A.endByte)&&(q.startByte!=A.startByte||q.endByte!=A.endByte)){var K=A.startByte+"-";A.endByte&&(K+=A.endByte);r.nrr=K}}}var J=k.h.Ya()||1,L=wp(k,w.type)||500,M=w.bandwidth;var O=M?M*(q.endTime-q.startTime)/1E3/(L/J/1E3)*k.g.rtpSafetyFactor:NaN;isNaN(O)||(r.rtp=O)}}t&&r.ot!==tp&&(r.tb=xp(k,r.ot)/1E3);mp(k,g,r)}}catch(N){bb("CMCD_SEGMENT_ERROR","Could not generate segment CMCD data.",N)}break;case 2:case 5:case 6:mp(k,g,{ot:"k"});break;case 4:mp(k,g,{ot:"o"})}})},function(f,g,h,k){(f=b()?b().l:a.G)&& +f.banLocation&&f.banLocation(k)},function(f,g){if(g.data){g=g.data.byteLength;var h=b()?b().getStats():a.B;h&&(Xn(h,g),0===f&&(h.aj=g))}});e.configure(a.g.networking);return e}function Rq(a,b){return new Jl(a.h,a.i,a.g.streaming,b,function(){a.eb&&Xl(a.eb,!0);a.l&&a.l.hd();a.O&&gr(a)},function(c){return a.dispatchEvent(c)})} +function Sq(a,b){var c=a.T()||"number"===typeof b&&0=e&&0=b)return 1;if(!(a<=this.h.currentTime)&&al(r,m))&&(q=r);q!=m&&(q?(m=Zf(q),k.Nd(m,!0,d||0)):aq(k))}var k=this;c=void 0===c?0:c;d=void 0===d?0:d;e=void 0===e?"":e;f=void 0===f?!1:f;g=void 0===g?"":g;if(this.i&&this.F&&(h(),!this.Da()))return;(function(){if(k.h&&k.h.audioTracks){var l= +ig(k.kb(),a,b||"",!1)[0];l&&k.Nd(l)}})()};p.Rh=function(a,b,c){function d(){e.Id=a;e.Je=b||"";e.Ie=c||!1;var f=ig(e.i.textStreams,e.Id,e.Je,e.Ie)[0]||null;f&&f!=e.l.B&&(Sn(e.B.h,f,!1),e.g.streaming.alwaysStreamText||e.$c())&&(Om(e.l,f),Kq(e),Wq(e))}var e=this;c=void 0===c?!1:c;if(this.i&&this.F&&(d(),!this.Da()))return;(function(){var f=ig(e.qc(),a,b||"",c||!1)[0];f&&e.Zf(f)})()}; +p.cm=function(a,b,c){function d(){for(var f=null,g=u(e.i.variants),h=g.next();!h.done;h=g.next())if(h=h.value,h.audio.label==a){f=h;break}null!=f&&(e.N=e.g.adaptationSetCriteriaFactory(),e.N.configure({language:f.language,role:"",channelCount:0,Gc:"",spatialAudio:!1,videoLayout:"",Qd:"",qd:a,codecSwitchingStrategy:e.g.mediaSource.codecSwitchingStrategy,audioCodec:"",Sd:"",We:0,preferredAudioCodecs:e.g.preferredAudioCodecs,preferredAudioChannelCount:e.g.preferredAudioChannelCount}),aq(e,b,c))}var e= +this;b=void 0===b?!0:b;c=void 0===c?0:c;if(this.i&&this.F&&(d(),!this.Da()))return;(function(){if(e.h&&e.h.audioTracks){var f=Array.from(e.h.audioTracks),g=null;f=u(f);for(var h=f.next();!h.done;h=f.next())h=h.value,h.label==a&&(g=h);g&&nr(e,g)}})()};p.$c=function(){var a=this.na;return this.s?this.s.isTextVisible():a};p.wk=function(){return this.Za.map(function(a){return $f(a)})}; +p.vk=function(a){Uc("getChapters","Please use an getChaptersAsync.");if(!this.Za.length)return[];var b=yc(a);a=this.Za.filter(function(f){return yc(f.language)==b});if(!a.length)return[];var c=[],d=new Set;a=u(a);for(var e=a.next();!e.done;e=a.next())e=e.value,e.segmentIndex&&e.segmentIndex.Gb(function(f){var g=f.S()[0],h=f.startTime+"-"+f.endTime+"-"+g;f={id:h,title:g,startTime:f.startTime,endTime:f.endTime};d.has(h)||(c.push(f),d.add(h))});return c}; +p.eh=function(a){var b=this,c,d,e,f,g,h,k;return Q(function(l){switch(l.g){case 1:if(!b.Za.length)return l.return([]);c=yc(a);d=b.Za.filter(function(m){return yc(m.language)==c});if(!d.length)return l.return([]);e=[];f=new Set;g=u(d);h=g.next();case 2:if(h.done){l.A(4);break}k=h.value;if(k.segmentIndex){l.A(5);break}return F(l,k.createSegmentIndex(),5);case 5:k.segmentIndex.Gb(function(m){var n=m.S()[0],q=m.startTime+"-"+m.endTime+"-"+n;m={id:q,title:n,startTime:m.startTime,endTime:m.endTime};f.has(q)|| +(e.push(m),f.add(q))});h=g.next();l.A(2);break;case 4:return l.return(e)}})};function ar(a){return Array.from(a.h.textTracks).filter(function(b){return"metadata"!=b.kind&&"chapters"!=b.kind&&"Shaka Player TextTrack"!=b.label})}function br(a){return Array.from(a.h.textTracks).find(function(b){return"Shaka Player TextTrack"==b.label})}function fr(a){return Array.from(a.h.textTracks).filter(function(b){return"metadata"==b.kind})} +p.ze=function(a){a=!!a;this.na!=a&&(this.na=a,this.m==Iq?(this.s.setTextVisibility(a),this.g.streaming.alwaysStreamText||(a?this.l.B||(a=ig(this.i.textStreams,this.Id,this.Je,this.Ie),0=Math.floor(d.end)&&a.rd():Math.floor(c)<=Math.floor(d.start+e)&&a.rd()})} +function Hq(a){if(a.B&&a.O){var b=a.B.g,c="playing";a.O.g==si?c="buffering":a.isEnded()?c="ended":a.h.paused&&(c="paused");var d=c;if(null==b.g)b.g={timestamp:Date.now()/1E3,state:d,duration:0},b=!0;else{var e=Date.now()/1E3;b.g.duration=e-b.g.timestamp;b.g.state==d?b=!1:(b.h.push(b.g),b.g={timestamp:e,state:d,duration:0},b=!0)}b&&(c=(new Map).set("newstate",c),a.dispatchEvent(dq("statechanged",c)))}} +function Yq(a){var b=a.h.playbackRate,c=a.T();if(a.g.streaming.vodDynamicPlaybackRate&&!c){var d=a.g.streaming.vodDynamicPlaybackRateLowBufferRate,e=a.Ni();e<=a.g.streaming.vodDynamicPlaybackRateBufferRatio?b!=d&&a.Nc(d,!1):1==e&&b!==a.J.Uc()&&a.rd()}if(c&&(c=a.xa(),Number.isFinite(c.end)&&!(a.h.currentTime1E3*f&&(f=a.g.streaming.liveSync.dynamicTargetLatency.minLatency, +a.R=Math.max(a.R-(g-f)/2,f+d),a.Kb=Date.now());e&&null!==a.R&&(h=a.R+d,k=a.R-d);g=c.end-a.h.currentTime;d=0;a.m==Lq&&(e=a.h.buffered,0h?(b!=l&&a.Nc(l,!1),a.Kb=null):void 0!=k&&m&&g-de)&&a.sgb&&(b+=Math.pow(2,32)),b=b.toString(16);return new V(2,3,3016,c,b,a.h.error.message)}function Oq(a,b,c){0=this.xa().end};S("shaka.Player",X);X.prototype.isEnded=X.prototype.isEnded;X.prototype.isRemotePlayback=X.prototype.Da;X.prototype.addFont=X.prototype.addFont;X.prototype.setVideoContainer=X.prototype.Yh;X.prototype.getFetchedPlaybackInfo=X.prototype.Fk;X.prototype.getManifestParserFactory=X.prototype.Nk; +X.prototype.getManifest=X.prototype.hh;X.prototype.retryStreaming=X.prototype.Nh;X.prototype.setMaxHardwareResolution=X.prototype.im;X.prototype.addChaptersTrack=X.prototype.Xe;X.prototype.addThumbnailsTrack=X.prototype.Ye;X.prototype.addTextTrackAsync=X.prototype.Td;X.prototype.getStats=X.prototype.getStats;X.prototype.getBufferedInfo=X.prototype.Pb;X.prototype.getSegmentAvailabilityDuration=X.prototype.rf;X.prototype.getPresentationStartTimeAsDate=X.prototype.jh; +X.prototype.getPlayheadTimeAsDate=X.prototype.Rk;X.prototype.setTextTrackVisibility=X.prototype.ze;X.prototype.getChaptersAsync=X.prototype.eh;X.prototype.getChapters=X.prototype.vk;X.prototype.getChaptersTracks=X.prototype.wk;X.prototype.isTextTrackVisible=X.prototype.$c;X.prototype.selectVariantsByLabel=X.prototype.cm;X.prototype.selectTextLanguage=X.prototype.Rh;X.prototype.selectAudioLanguage=X.prototype.xj;X.prototype.getTextLanguages=X.prototype.Yk;X.prototype.getAudioLanguages=X.prototype.pk; +X.prototype.getTextLanguagesAndRoles=X.prototype.Zk;X.prototype.getAudioLanguagesAndRoles=X.prototype.qk;X.prototype.getVideoTracks=X.prototype.getVideoTracks;X.prototype.selectVideoTrack=X.prototype.zj;X.prototype.getAudioTracks=X.prototype.getAudioTracks;X.prototype.selectAudioTrack=X.prototype.yj;X.prototype.selectVariantTrack=X.prototype.Nd;X.prototype.selectTextTrack=X.prototype.Zf;X.prototype.getThumbnails=X.prototype.Ri;X.prototype.getAllThumbnails=X.prototype.nk; +X.prototype.getImageTracks=X.prototype.gh;X.prototype.getTextTracks=X.prototype.qc;X.prototype.getVariantTracks=X.prototype.kb;X.prototype.cancelTrickPlay=X.prototype.rd;X.prototype.trickPlay=X.prototype.Nc;X.prototype.useTrickPlayTrackIfAvailable=X.prototype.oi;X.prototype.getPlaybackRate=X.prototype.Ya;X.prototype.isBuffering=X.prototype.xf;X.prototype.getKeyStatuses=X.prototype.nf;X.prototype.getActiveSessionsMetadata=X.prototype.dh;X.prototype.getExpiration=X.prototype.be; +X.prototype.drmInfo=X.prototype.drmInfo;X.prototype.keySystem=X.prototype.keySystem;X.prototype.isFullyLoaded=X.prototype.ul;X.prototype.goToLive=X.prototype.ll;X.prototype.seekRange=X.prototype.xa;X.prototype.isVideoOnly=X.prototype.wh;X.prototype.isAudioOnly=X.prototype.zd;X.prototype.isInProgress=X.prototype.Zc;X.prototype.isLive=X.prototype.T;X.prototype.getQueueManager=X.prototype.kh;X.prototype.getAdManager=X.prototype.mf;X.prototype.getAssetUri=X.prototype.xd; +X.prototype.getNetworkingEngine=X.prototype.Hb;X.prototype.getMediaElement=X.prototype.Qk;X.prototype.getManifestType=X.prototype.ih;X.prototype.getLoadMode=X.prototype.Jk;X.prototype.resetConfiguration=X.prototype.sj;X.prototype.getBufferFullness=X.prototype.Ni;X.prototype.getNonDefaultConfiguration=X.prototype.Qi;X.prototype.getConfigurationForLowLatency=X.prototype.zk;X.prototype.getConfiguration=X.prototype.getConfiguration;X.prototype.configurationForLowLatency=X.prototype.jk; +X.prototype.configure=X.prototype.configure;X.prototype.releaseAllMutexes=X.prototype.Ul;X.prototype.destroyAllPreloads=X.prototype.Ng;X.prototype.preload=X.prototype.preload;X.prototype.detachAndSavePreload=X.prototype.Ji;X.prototype.unloadAndSavePreload=X.prototype.nm;X.prototype.load=X.prototype.load;X.prototype.updateStartTime=X.prototype.rm;X.prototype.unload=X.prototype.kc;X.prototype.detach=X.prototype.detach;X.prototype.attachCanvas=X.prototype.wi;X.prototype.attach=X.prototype.$b; +X.probeSupport=function(a){a=void 0===a?!0:a;var b,c,d,e,f,g,h;return Q(function(k){switch(k.g){case 1:b={};if(!a){k.A(2);break}return F(k,ki(),3);case 3:b=k.h;case 2:return c=Di(),d=Ak(),e=Rb(),F(k,e.mc(),4);case 4:return f=k.h,g={manifest:c,media:d,drm:b,hardwareResolution:f},h=gq,h.forEach(function(l,m){g[m]=l()}),k.return(g)}})};X.isBrowserSupported=hq;X.setQueueManagerFactory=function(a){Zp=a};X.setAdManagerFactory=function(a){Yp=a};X.registerSupportPlugin=fq;X.prototype.destroy=X.prototype.destroy; +var eq=0,Up=1,Iq=2,Lq=3;X.LoadMode={DESTROYED:eq,NOT_LOADED:Up,MEDIA_SOURCE:Iq,SRC_EQUALS:Lq};X.version="v4.15.0";var yr=["4","15"];Vc=new function(a){this.g=a;this.i=Wc;this.h=Xc}(new Tc(Number(yr[0]),Number(yr[1])));var gq=new Map,Yp=null,Zp=null;function zr(){this.g=[];this.i=this.m=this.l=this.j=this.h=0}function Ar(a){return a.g.length?a.g.reduce(function(b,c){return b+c},0)/a.g.length:0};function Br(a,b,c){var d=this;this.g=a;this.h=b;this.m=c;this.i=!1;this.j=this.h.getVolume();this.l=new Oc;this.l.o(this.h,google.ima.AdEvent.Type.PAUSED,function(){d.i=!0});this.l.o(this.h,google.ima.AdEvent.Type.RESUMED,function(){d.i=!1})}p=Br.prototype;p.needsSkipUI=function(){return!1};p.isClientRendering=function(){return!0};p.hasCustomClick=function(){return!0};p.isUsingAnotherMediaElement=function(){return!0};p.getDuration=function(){return this.g.getDuration()}; +p.getMinSuggestedDuration=function(){return this.g.getMinSuggestedDuration()};p.getRemainingTime=function(){return this.h.getRemainingTime()};p.isPaused=function(){return this.i};p.isSkippable=function(){return 0<=this.g.getSkipTimeOffset()};p.getTimeUntilSkippable=function(){var a=this.g.getSkipTimeOffset();a=this.getRemainingTime()-a;return Math.max(a,0)};p.canSkipNow=function(){return this.h.getAdSkippableState()};p.skip=function(){return this.h.skip()};p.pause=function(){return this.h.pause()}; +p.play=function(){return this.h.resume()};p.getVolume=function(){return this.h.getVolume()};p.setVolume=function(a){this.m.volume=a;return this.h.setVolume(a)};p.isMuted=function(){return 0==this.h.getVolume()};p.isLinear=function(){return this.g.isLinear()};p.resize=function(a,b){this.h.resize(a,b)};p.setMuted=function(a){(this.m.muted=a)?(this.j=this.getVolume(),this.h.setVolume(0)):this.h.setVolume(this.j)};p.getSequenceLength=function(){var a=this.g.getAdPodInfo();return null==a?1:a.getTotalAds()}; +p.getPositionInSequence=function(){var a=this.g.getAdPodInfo();return null==a?1:a.getAdPosition()};p.getTitle=function(){return this.g.getTitle()};p.getDescription=function(){return this.g.getDescription()};p.getVastMediaBitrate=function(){return this.g.getVastMediaBitrate()};p.getVastMediaHeight=function(){return this.g.getVastMediaHeight()};p.getVastMediaWidth=function(){return this.g.getVastMediaWidth()};p.getVastAdId=function(){return""};p.getAdId=function(){return this.g.getAdId()}; +p.getCreativeAdId=function(){return this.g.getCreativeAdId()};p.getAdvertiserName=function(){return this.g.getAdvertiserName()};p.getMediaUrl=function(){return this.g.getMediaUrl()};p.getTimeOffset=function(){var a=this.g.getAdPodInfo();return null==a?0:a.getTimeOffset()};p.getPodIndex=function(){var a=this.g.getAdPodInfo();return null==a?0:a.getPodIndex()};p.release=function(){this.h=this.g=null};S("shaka.ads.ClientSideAd",Br);Br.prototype.release=Br.prototype.release;Br.prototype.getPodIndex=Br.prototype.getPodIndex; +Br.prototype.getTimeOffset=Br.prototype.getTimeOffset;Br.prototype.getMediaUrl=Br.prototype.getMediaUrl;Br.prototype.getAdvertiserName=Br.prototype.getAdvertiserName;Br.prototype.getCreativeAdId=Br.prototype.getCreativeAdId;Br.prototype.getAdId=Br.prototype.getAdId;Br.prototype.getVastAdId=Br.prototype.getVastAdId;Br.prototype.getVastMediaWidth=Br.prototype.getVastMediaWidth;Br.prototype.getVastMediaHeight=Br.prototype.getVastMediaHeight;Br.prototype.getVastMediaBitrate=Br.prototype.getVastMediaBitrate; +Br.prototype.getDescription=Br.prototype.getDescription;Br.prototype.getTitle=Br.prototype.getTitle;Br.prototype.getPositionInSequence=Br.prototype.getPositionInSequence;Br.prototype.getSequenceLength=Br.prototype.getSequenceLength;Br.prototype.setMuted=Br.prototype.setMuted;Br.prototype.resize=Br.prototype.resize;Br.prototype.isLinear=Br.prototype.isLinear;Br.prototype.isMuted=Br.prototype.isMuted;Br.prototype.setVolume=Br.prototype.setVolume;Br.prototype.getVolume=Br.prototype.getVolume; +Br.prototype.play=Br.prototype.play;Br.prototype.pause=Br.prototype.pause;Br.prototype.skip=Br.prototype.skip;Br.prototype.canSkipNow=Br.prototype.canSkipNow;Br.prototype.getTimeUntilSkippable=Br.prototype.getTimeUntilSkippable;Br.prototype.isSkippable=Br.prototype.isSkippable;Br.prototype.isPaused=Br.prototype.isPaused;Br.prototype.getRemainingTime=Br.prototype.getRemainingTime;Br.prototype.getMinSuggestedDuration=Br.prototype.getMinSuggestedDuration;Br.prototype.getDuration=Br.prototype.getDuration; +Br.prototype.isUsingAnotherMediaElement=Br.prototype.isUsingAnotherMediaElement;Br.prototype.hasCustomClick=Br.prototype.hasCustomClick;Br.prototype.isClientRendering=Br.prototype.isClientRendering;Br.prototype.needsSkipUI=Br.prototype.needsSkipUI;function Cr(){} +function Dr(a,b){var c=[];a=u(Od(a,"Ad"));for(var d=a.next();!d.done;d=a.next())if(d=Sd(d.value,"InLine"))if(d=Sd(d,"Creatives")){d=u(Od(d,"Creative"));for(var e=d.next();!e.done;e=d.next()){e=e.value;var f=Sd(e,"Linear");f&&Er(c,b,f);if(e=Sd(e,"NonLinearAds")){e=Od(e,"NonLinear");e=u(e);for(var g=e.next();!g.done;g=e.next())a:{f=c;var h=b,k=g.value,l=Sd(k,"StaticResource");if(l)g=l.attributes.creativeType;else{l=Sd(k,"HTMLResource");if(!l)break a;g="text/html"}if(l=Qd(l)){"text/html"===g&&(l="data:text/html;charset=UTF-8,"+ +encodeURIComponent(l));var m=Vd(k,"width",ae)||Vd(k,"expandedWidth",ae),n=Vd(k,"height",ae)||Vd(k,"expandedHeight",ae);if(m||n){var q=null;(k=k.attributes.minSuggestedDuration)&&(q=Cd(k));k=0;null!=h&&(k=h);f.push({id:null,groupId:null,startTime:k,endTime:null,uri:l,mimeType:g,isSkippable:!1,skipOffset:null,skipFor:null,canJump:!1,resumeOffset:0,playoutLimit:q,once:!0,pre:null==h,post:Infinity==h,timelineRange:!1,loop:!1,overlay:{viewport:{x:0,y:0},topLeft:{x:0,y:0},size:{x:m||0,y:n||0}},displayOnBackground:!1, +currentVideo:null,background:null})}}}}}}return c} +function Er(a,b,c){var d=0;null!=b&&(d=b);var e=null;c.attributes.skipoffset&&(e=Cd(c.attributes.skipoffset),isNaN(e)&&(e=null));if(c=Sd(c,"MediaFiles")){var f=Od(c,"MediaFile");c=f;f=f.filter(function(h){return"streaming"==h.attributes.delivery});f.length&&(c=f);c=c.sort(function(h,k){return(parseInt(k.attributes.height,10)||0)-(parseInt(h.attributes.height,10)||0)});c=u(c);for(f=c.next();!f.done;f=c.next())if(f=f.value,!f.attributes.apiFramework){var g=Qd(f);if(g){a.push({id:null,groupId:null,startTime:d, +endTime:null,uri:g,mimeType:f.attributes.type||null,isSkippable:null!=e,skipOffset:e,skipFor:null,canJump:!1,resumeOffset:0,playoutLimit:null,once:!0,pre:null==b,post:Infinity==b,timelineRange:!1,loop:!1,overlay:null,displayOnBackground:!1,currentVideo:null,background:null});break}}}}S("shaka.ads.Utils",Cr);Cr.ADS_LOADED="ads-loaded";Cr.AD_STARTED="ad-started";Cr.AD_FIRST_QUARTILE="ad-first-quartile";Cr.AD_MIDPOINT="ad-midpoint";Cr.AD_THIRD_QUARTILE="ad-third-quartile";Cr.AD_COMPLETE="ad-complete"; +Cr.AD_STOPPED="ad-stopped";Cr.AD_SKIPPED="ad-skipped";Cr.AD_VOLUME_CHANGED="ad-volume-changed";Cr.AD_MUTED="ad-muted";Cr.AD_PAUSED="ad-paused";Cr.AD_RESUMED="ad-resumed";Cr.AD_SKIP_STATE_CHANGED="ad-skip-state-changed";Cr.CUEPOINTS_CHANGED="ad-cue-points-changed";Cr.IMA_AD_MANAGER_LOADED="ima-ad-manager-loaded";Cr.IMA_STREAM_MANAGER_LOADED="ima-stream-manager-loaded";Cr.AD_CLICKED="ad-clicked";Cr.AD_PROGRESS="ad-progress";Cr.AD_BUFFERING="ad-buffering";Cr.AD_IMPRESSION="ad-impression"; +Cr.AD_DURATION_CHANGED="ad-duration-changed";Cr.AD_CLOSED="ad-closed";Cr.AD_LOADED="ad-loaded";Cr.ALL_ADS_COMPLETED="all-ads-completed";Cr.AD_LINEAR_CHANGED="ad-linear-changed";Cr.AD_METADATA="ad-metadata";Cr.AD_RECOVERABLE_ERROR="ad-recoverable-error";Cr.AD_ERROR="ad-error";Cr.AD_BREAK_READY="ad-break-ready";Cr.AD_INTERACTION="ad-interaction";Cr.AD_CONTENT_PAUSE_REQUESTED="ad-content-pause-requested";Cr.AD_CONTENT_RESUME_REQUESTED="ad-content-resume-requested";Cr.AD_CONTENT_ATTACH_REQUESTED="ad-content-attach-requested";function Fr(a,b,c,d,e){var f=this;this.u=a;this.i=b;this.F=!1;this.B=this.s=null;this.G=NaN;this.l=e;this.j=null;this.h=new Oc;google.ima.settings.setLocale(c);google.ima.settings.setDisableCustomPlaybackForIOS10Plus(!0);this.D=new google.ima.AdDisplayContainer(this.u,this.i);this.D.initialize();this.m=new google.ima.AdsLoader(this.D);this.m.getSettings().setPlayerType("shaka-player");this.m.getSettings().setPlayerVersion("v4.15.0");this.g=null;this.C=d||new google.ima.AdsRenderingSettings;this.h.o(this.m, +google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(g){Gr(f,g)});this.h.o(this.m,google.ima.AdErrorEvent.Type.AD_ERROR,function(g){Hr(f,g)});this.h.o(this.i,"ended",function(){f.m.contentComplete()});this.h.qa(this.i,"play",function(){f.F=!0})}Fr.prototype.configure=function(a){this.s=a};Fr.prototype.stop=function(){this.g&&this.g.stop();this.u&&Oj(this.u)}; +Fr.prototype.release=function(){this.stop();this.B&&this.B.disconnect();this.h&&this.h.release();this.g&&this.g.destroy();this.m.destroy();this.D.destroy()};function Hr(a,b){b.getError();b=(new Map).set("originalEvent",b);a.l(new U("ad-error",b));Ir(a,null);a.l(new U("ad-cue-points-changed",(new Map).set("cuepoints",[])))} +function Gr(a,b){a.l(new U("ads-loaded",(new Map).set("loadTime",Date.now()/1E3-a.G)));if(a.s.customPlayheadTracker){var c={currentTime:a.i.currentTime};a.g=b.getAdsManager(c,a.C);a.i.muted?a.g.setVolume(0):a.g.setVolume(a.i.volume);a.h.o(a.i,"timeupdate",function(){a.i.duration&&(c.currentTime=a.i.currentTime)});a.h.o(a.i,"volumechange",function(){a.j&&(a.j.setVolume(a.i.volume),a.i.muted&&a.j.setMuted(!0))})}else a.g=b.getAdsManager(a.i,a.C);a.l(new U("ima-ad-manager-loaded",(new Map).set("imaAdManager", +a.g)));var d=a.g.getCuePoints();if(d.length){b=[];d=u(d);for(var e=d.next();!e.done;e=d.next())b.push({start:e.value,end:null});a.l(new U("ad-cue-points-changed",(new Map).set("cuepoints",b)))}Jr(a);try{a.g.init(a.i.offsetWidth,a.i.offsetHeight),a.h.o(a.i,"loadeddata",function(){a.g.resize(a.i.offsetWidth,a.i.offsetHeight)}),"ResizeObserver"in window?(a.B=new ResizeObserver(function(){a.g.resize(a.i.offsetWidth,a.i.offsetHeight)}),a.B.observe(a.i)):a.h.o(document,"fullscreenchange",function(){a.g.resize(a.i.offsetWidth, +a.i.offsetHeight)}),a.F||a.s.skipPlayDetection?a.g.start():a.h.qa(a.i,"play",function(){a.F=!0;a.g.start()})}catch(f){Ir(a,null)}} +function Jr(a){function b(c,d){c=(new Map).set("originalEvent",c);a.l(new U(d,c))}a.h.o(a.g,google.ima.AdErrorEvent.Type.AD_ERROR,function(c){Hr(a,c)});a.h.o(a.g,google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED,function(c){Kr(a,c)});a.h.o(a.g,google.ima.AdEvent.Type.STARTED,function(c){Kr(a,c)});a.h.o(a.g,google.ima.AdEvent.Type.FIRST_QUARTILE,function(c){b(c,"ad-first-quartile")});a.h.o(a.g,google.ima.AdEvent.Type.MIDPOINT,function(c){b(c,"ad-midpoint")});a.h.o(a.g,google.ima.AdEvent.Type.THIRD_QUARTILE, +function(c){b(c,"ad-third-quartile")});a.h.o(a.g,google.ima.AdEvent.Type.COMPLETE,function(c){b(c,"ad-complete")});a.h.o(a.g,google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED,function(c){Ir(a,c)});a.h.o(a.g,google.ima.AdEvent.Type.ALL_ADS_COMPLETED,function(c){Ir(a,c)});a.h.o(a.g,google.ima.AdEvent.Type.SKIPPED,function(c){b(c,"ad-skipped")});a.h.o(a.g,google.ima.AdEvent.Type.VOLUME_CHANGED,function(c){b(c,"ad-volume-changed")});a.h.o(a.g,google.ima.AdEvent.Type.VOLUME_MUTED,function(c){b(c,"ad-muted")}); +a.h.o(a.g,google.ima.AdEvent.Type.PAUSED,function(c){a.j&&(a.j.i=!0,b(c,"ad-paused"))});a.h.o(a.g,google.ima.AdEvent.Type.RESUMED,function(c){a.j&&(a.j.i=!1,b(c,"ad-resumed"))});a.h.o(a.g,google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED,function(c){a.j&&b(c,"ad-skip-state-changed")});a.h.o(a.g,google.ima.AdEvent.Type.CLICK,function(c){b(c,"ad-clicked")});a.h.o(a.g,google.ima.AdEvent.Type.AD_PROGRESS,function(c){b(c,"ad-progress")});a.h.o(a.g,google.ima.AdEvent.Type.AD_BUFFERING,function(c){b(c,"ad-buffering")}); +a.h.o(a.g,google.ima.AdEvent.Type.IMPRESSION,function(c){b(c,"ad-impression")});a.h.o(a.g,google.ima.AdEvent.Type.DURATION_CHANGE,function(c){b(c,"ad-duration-changed")});a.h.o(a.g,google.ima.AdEvent.Type.USER_CLOSE,function(c){b(c,"ad-closed")});a.h.o(a.g,google.ima.AdEvent.Type.LOADED,function(c){b(c,"ad-loaded")});a.h.o(a.g,google.ima.AdEvent.Type.ALL_ADS_COMPLETED,function(c){b(c,"all-ads-completed")});a.h.o(a.g,google.ima.AdEvent.Type.LINEAR_CHANGED,function(c){b(c,"ad-linear-changed")});a.h.o(a.g, +google.ima.AdEvent.Type.AD_METADATA,function(c){b(c,"ad-metadata")});a.h.o(a.g,google.ima.AdEvent.Type.LOG,function(c){b(c,"ad-recoverable-error")});a.h.o(a.g,google.ima.AdEvent.Type.AD_BREAK_READY,function(c){b(c,"ad-break-ready")});a.h.o(a.g,google.ima.AdEvent.Type.INTERACTION,function(c){b(c,"ad-interaction")})} +function Kr(a,b){var c=b.getAd();c?(a.j=new Br(c,a.g,a.i),b.type!=google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED||a.s.supportsMultipleMediaElements||a.l(new U("ad-content-pause-requested")),b=(new Map).set("ad",a.j).set("sdkAdObject",c).set("originalEvent",b),a.l(new U("ad-started",b)),a.j.isLinear()&&(a.u.setAttribute("ad-active","true"),a.s.customPlayheadTracker||a.i.pause(),a.i.muted?(b=a.j,b.j=a.i.volume,b.h.setVolume(0)):a.j.setVolume(a.i.volume))):ab("The IMA SDK fired a "+b.type+" event with no associated ad. Unable to play ad!")} +function Ir(a,b){b&&b.type==google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED&&!a.s.supportsMultipleMediaElements&&a.l(new U("ad-content-resume-requested"));a.l(new U("ad-stopped",(new Map).set("originalEvent",b)));a.j&&a.j.isLinear()&&(a.u.removeAttribute("ad-active"),a.s.customPlayheadTracker||a.i.ended||a.i.play())};function Lr(a,b,c,d,e,f){this.g=a;this.i=b;this.j=(this.h=b.isSkippable)?b.skipOffset||0:b.skipOffset;this.l=b.skipFor;this.B=c;this.s=d;this.m=e;this.u=f;this.C=b.overlay}p=Lr.prototype;p.needsSkipUI=function(){return!0};p.isClientRendering=function(){return!0};p.hasCustomClick=function(){return!1};p.isUsingAnotherMediaElement=function(){return this.u};p.getDuration=function(){var a=this.g.duration;return isNaN(a)?-1:a};p.getMinSuggestedDuration=function(){return this.getDuration()}; +p.getRemainingTime=function(){var a=this.g.duration;return isNaN(a)?-1:a-this.g.currentTime};p.isPaused=function(){return this.g.paused};p.isSkippable=function(){return this.h&&null!=this.l?this.getDuration()-this.getRemainingTime()=r&&(!e.D.has(n)&&Rr(n)&&e.D.set(n,e.j.preload(n.uri,null,n.mimeType||void 0)),Sr(e,n));v.A(4);break}if(!e.D.has(n)){v.A(7);break}return F(v,e.D.get(n),8);case 8:(t=v.h)&&t.destroy(),e.D.delete(n);case 7:Tr(e,n),w=JSON.stringify(n),e.R.has(w)&&e.R.delete(w),e.H.delete(n),Ur(e),n.overlay||(g=!0);case 4:m=l.next();v.A(3);break;case 5:g&&Vr(e),H(v)}})})}p=Nr.prototype;p.configure=function(a){this.L=a;Wr(this)}; +function Xr(a){if(!a.$&&a.H.size){a.I.o(a.g,"playing",a.U);a.I.o(a.g,"timeupdate",a.U);a.I.o(a.g,"seeked",a.ea);a.I.o(a.g,"ended",a.Y);if("requestVideoFrameCallback"in a.g&&!Yr()){var b=a.g,c=function(){-1!=a.O&&(a.Y(),-1!=a.O&&(a.O=b.requestVideoFrameCallback(c)))};a.O=b.requestVideoFrameCallback(c)}else a.P.ya(.025);a.N&&a.N.ya(1);a.$=!0}} +function Ur(a){a.$&&!a.H.size&&(a.I.Ca(a.g,"playing",a.U),a.I.Ca(a.g,"timeupdate",a.U),a.I.Ca(a.g,"seeked",a.ea),a.I.Ca(a.g,"ended",a.Y),-1!=a.O&&(a.g.cancelVideoFrameCallback(a.O),a.O=-1),a.P&&a.P.stop(),a.N&&a.N.stop(),a.$=!1)} +function Wr(a){if(a.B&&a.L&&!a.J){var b=a.L.supportsMultipleMediaElements,c=a.g;c.webkitSupportsFullscreen&&c.webkitDisplayingFullscreen&&(b=!1);a.C==b&&(a.C=!b,a.C?(a.h=a.g,a.F&&(a.F.parentElement&&a.B.removeChild(a.F),a.F=null)):(a.F||(b=document.createElement(a.g.tagName),b.autoplay=!0,b.style.position="absolute",b.style.top="0",b.style.left="0",b.style.width="100%",b.style.height="100%",b.style.display="none",b.setAttribute("playsinline",""),a.F=b),a.h=a.F))}} +p.stop=function(){this.l&&this.l.Sa();this.R.clear();this.H.clear();this.j.Ng();if(this.D.size){var a=Array.from(this.D.values());a=u(a);for(var b=a.next();!b.done;b=a.next())(b=b.value)&&b.then(function(c){c&&c.destroy()})}this.D.clear();if(this.K.size)for(a=Array.from(this.K.keys()),a=u(a),b=a.next();!b.done;b=a.next())Tr(this,b.value);this.K.clear();this.j.detach();this.J=!1;this.u=this.m=null;this.C=!0;this.h=this.g;this.F=null;Zr(this);Ur(this);this.B&&Oj(this.B);this.s&&(this.s.stop(),this.s= +null)};p.release=function(){this.stop();this.I&&this.I.release();this.l&&this.l.release();this.P&&(this.P.stop(),this.P=null);this.N&&(this.N.stop(),this.N=null);this.j.destroy()};p.Rb=function(){return this.j};function $r(a,b){var c;Q(function(d){if(1==d.g)return Or(a),F(d,as(a,b),2);c=d.h;c.length?bs(a,c):ab("Unsupported HLS interstitial",b);H(d)})} +function cs(a,b){var c=Sd(b.eventNode,"OverlayEvent"),d=c.attributes.uri,e=c.attributes.mimeType,f="true"==c.attributes.loop,g=Vd(c,"z",ae);if(d&&0!=g){var h=null,k=Sd(c,"Background");if(k){var l=k.attributes.uri;l?h="center / contain no-repeat url('"+l+"')":h=Qd(k)}k=1920;l=1080;var m=Sd(c,"Viewport");if(m){k=Vd(m,"x",ae);if(null==k)return;l=Vd(m,"y",ae);if(null==l)return}var n={viewport:{x:k,y:l},topLeft:{x:0,y:0},size:{x:k,y:l}},q=Sd(c,"Overlay");if(m&&q){var r=Sd(q,"TopLeft"),t=Sd(q,"Size");if(r&& +t){q=Vd(r,"x",ae);if(null==q)return;r=Vd(r,"y",ae);if(null==r)return;var w=Vd(t,"x",ae);if(null==w)return;t=Vd(t,"y",ae);if(null==t)return;n.topLeft.x=q;n.topLeft.y=r;n.size.x=w;n.size.y=t}}q=null;c=Sd(c,"Squeeze");if(m&&c&&(t=Sd(c,"TopLeft"),c=Sd(c,"Size"),t&&c)){m=Vd(t,"x",ae);if(null==m)return;q=Vd(t,"y",ae);if(null==q)return;t=Vd(c,"x",ae);if(null==t)return;c=Vd(c,"y",ae);if(null==c)return;q={viewport:{x:k,y:l},topLeft:{x:m,y:q},size:{x:t,y:c}}}bs(a,[{id:b.id,groupId:null,startTime:b.startTime, +endTime:b.endTime,uri:d,mimeType:e,isSkippable:!1,skipOffset:null,skipFor:null,canJump:!0,resumeOffset:null,playoutLimit:null,once:!1,pre:!1,post:!1,timelineRange:!0,loop:f,overlay:n,displayOnBackground:-1==g,currentVideo:q,background:h}])}} +p.addAdUrlInterstitial=function(a){var b=this,c,d,e,f,g,h,k,l,m;return Q(function(n){switch(n.g){case 1:return c={type:12},F(n,ds(b,a,c),2);case 2:d=n.h;e=Gd(d,"VAST,vmap:VMAP");if(!e)throw new V(2,10,10007);f=[];if("VAST"==e.tagName){f=Dr(e,b.m);n.A(3);break}if("vmap:VMAP"!=e.tagName){n.A(3);break}for(var q=[],r=u(Od(e,"vmap:AdBreak")),t=r.next();!t.done;t=r.next()){var w=t.value,v=w.attributes.timeOffset;v&&(t=null,"start"==v?t=0:"end"==v?t=Infinity:t=Cd(v),(w=Sd(w,"vmap:AdSource"))&&(w=Sd(w,"vmap:AdTagURI"))&& +(w=Pd(w))&&q.push({time:t,uri:w}))}g=u(q);h=g.next();case 5:if(h.done){n.A(3);break}k=h.value;return F(n,ds(b,k.uri,c),8);case 8:l=n.h;m=Gd(l,"VAST");if(!m)throw new V(2,10,10007);f.push.apply(f,x(Dr(m,k.time)));h=g.next();n.A(5);break;case 3:bs(b,f),H(n)}})}; +function bs(a,b){var c,d,e,f,g,h,k,l;Q(function(m){switch(m.g){case 1:c=!1,d=u(b),e=d.next();case 2:if(e.done){m.A(4);break}f=e.value;if(!f.uri){ab("Missing URL in interstitial",f);m.A(3);break}if(f.mimeType){m.A(5);break}ta(m,6);g=a.j.Hb();return F(m,to(f.uri,g,a.G.getConfiguration().streaming.retryParameters),8);case 8:f.mimeType=m.h;wa(m,5);break;case 6:xa(m);case 5:h=f.id||JSON.stringify(f);if(a.R.has(h)){m.A(3);break}f.loop&&!f.overlay&&ab("Loop is only supported in overlay interstitials",f); +f.overlay||(c=!0);a.R.add(h);a.H.add(f);k=!1;f.pre&&null==a.m?k=!0:0!=f.startTime||f.canJump?null!=a.m&&(l=f.startTime-a.m,0=l&&(k=!0)):k=!0;k&&(!a.D.has(f)&&Rr(f)&&a.D.set(f,a.j.preload(f.uri,null,f.mimeType||void 0)),Sr(a,f));case 3:e=d.next();m.A(2);break;case 4:c&&Vr(a),Xr(a),H(m)}})} +function Pr(a,b,c){b=void 0===b?!1:b;c=void 0===c?null:c;var d=0,e=null;if(a.H.size&&null!=a.m){var f=a.g.ended,g=Array.from(a.H).sort(function(n,q){return q.startTime-n.startTime}),h=g;h=b?g.filter(function(n){return n.pre}):f?g.filter(function(n){return n.post}):g.filter(function(n){return!n.pre&&!n.post});g=u(h);for(h=g.next();!h.done;h=g.next()){h=h.value;var k=!1;if(b)k=h.pre;else if(f)k=h.post;else if(!h.pre&&!h.post){var l=a.m-Math.round(1E3*h.startTime)/1E3,m=1;a.L.allowStartInMiddleOfInterstitial&& +h.endTime&&Infinity!=h.endTime&&(m=h.endTime-h.startTime);0=h.startTime?!1:!0)}k&&(!a.u||h.startTime>=a.u.startTime)&&(d==(c||0)?e=h:e&&!h.canJump&&.001Math.abs(g.startTime-b.startTime)}).length);b.once&&(f++,a.H.delete(b),Ur(a),b.overlay||Vr(a));b.mimeType&&(b.mimeType.startsWith("image/")||"text/html"===b.mimeType)?b.overlay?es(a,b,c,d,f):ab("Unsupported interstitial",b):a.C&&b.overlay?ab("Unsupported interstitial",b):fs(a,b,c,d,e,f)} +function es(a,b,c,d,e){function f(){a.s&&(a.s.stop(),a.s=null);a.B.removeChild(k);Zr(a,b);a.i(new U("ad-stopped"));a.l.Sa();var q=Pr(a,b.pre,d-e);q?Qr(a,q,c,++d,Date.now(),e):a.J=!1}a.J=!0;var g=b.overlay,h="text/html"==b.mimeType?"iframe":"img",k=document.createElement(h);k.style.objectFit="contain";k.style.position="absolute";k.style.border="none";gs(a,b);a.i(new U("ad-started",(new Map).set("ad",new Mr(b,c,d))));"iframe"==h?k.src=b.uri:(k.src=b.uri,k.onerror=function(q){a.i(new U("ad-error",(new Map).set("originalEvent", +q)));f()});var l=g.viewport,m=g.topLeft;g=g.size;0==l.x&&0==l.y?(k.width=b.overlay.size.x,k.height=b.overlay.size.y,k.style.bottom="10%",k.style.left="0",k.style.right="0",k.style.width="100%",b.overlay.size.y||"iframe"!=h||(k.style.height="auto")):(k.style.height=g.y/l.y*100+"%",k.style.left=m.x/l.x*100+"%",k.style.top=m.y/l.y*100+"%",k.style.width=g.x/l.x*100+"%");a.B.appendChild(k);var n=Date.now();a.s&&a.s.stop();a.s=new yf(function(){b.playoutLimit&&(Date.now()-n)/1E3>b.playoutLimit?(a.i(new U("ad-complete")), +f()):b.endTime&&a.g.currentTime>b.endTime?(a.i(new U("ad-complete")),f()):a.g.currentTimeb.endTime)a.s&&a.s.stop(),a.i(new U("ad-skipped")),f()})} +function fs(a,b,c,d,e,f){var g,h,k,l,m,n,q,r,t,w,v,y,z,A,B,D,G,C,E,I;Q(function(K){switch(K.g){case 1:g=Date.now();a.J=!0;if(!a.C||1!=d){K.A(2);break}a.i(new U("ad-content-pause-requested",(new Map).set("saveLivePosition",!0)));h=new Hg;k=function(J){return Q(function(L){if(1==L.g)return"detach"!=J.state?L.A(0):Yr()?F(L,new Promise(function(M){return(new yf(M)).X(.1)}),3):L.A(3);h.resolve();a.l.Ca(a.G,"onstatechange",k);H(L)})};a.l.o(a.G,"onstatechange",k);return F(K,h,2);case 2:return gs(a,b),a.C|| +(a.h.style.display="",b.overlay?(a.h.loop=b.loop,l=b.overlay.viewport,m=b.overlay.topLeft,n=b.overlay.size,a.h.style.height=n.y/l.y*100+"%",a.h.style.left=m.x/l.x*100+"%",a.h.style.top=m.y/l.y*100+"%",a.h.style.width=n.x/l.x*100+"%"):(a.g.pause(),null!=b.resumeOffset&&0!=b.resumeOffset&&(a.g.currentTime+=b.resumeOffset),a.h.loop=!1,a.h.style.height="100%",a.h.style.left="0",a.h.style.top="0",a.h.style.width="100%")),q=!1,r=function(){if(!a.C&&!b.overlay&&null==b.resumeOffset)if(b.timelineRange&&b.endTime&& +Infinity!=b.endTime)a.g.currentTime!=b.endTime&&(a.g.currentTime=b.endTime);else{var J=Date.now();a.g.currentTime+=(J-e)/1E3;e=J}},t=function(J){var L,M;return Q(function(O){if(1==O.g){r();L=Pr(a,b.pre,d-f);if(J&&b.groupId)for(;L&&L.groupId==b.groupId;)d++,L=Pr(a,b.pre,d-f);a.s&&(!b.groupId||L&&L.groupId!=b.groupId)&&(a.s.stop(),a.s=null);Zr(a,b);if(L&&!L.overlay)return O.A(2);b.post&&(a.m=null,a.u=null);return a.C?F(O,a.j.detach(),4):F(O,a.j.kc(),4)}2!=O.g&&(a.C&&(M=b.resumeOffset,null==M&&(M=b.timelineRange&& +b.endTime&&Infinity!=b.endTime?b.endTime-(a.m||0):(Date.now()-e)/1E3),a.i(new U("ad-content-resume-requested",(new Map).set("offset",M)))),a.i(new U("ad-stopped")),a.l.Sa(),a.J=!1,a.C?Vr(a):(a.h.style.display="none",r(),a.g.ended||a.g.play()));Wr(a);L&&(a.i(new U("ad-stopped")),a.l.Sa(),Qr(a,L,c,++d,e,f));H(O)})},w=function(J){return Q(function(L){if(q)return L.return();q=!0;a.i(new U("ad-error",(new Map).set("originalEvent",J)));return F(L,t(!1),0)})},v=function(){return Q(function(J){if(1==J.g){if(q)return J.return(); +q=!0;return F(J,t(!1),2)}a.i(new U("ad-complete"));H(J)})},a.Z=function(){return Q(function(J){if(q)return J.return();q=!0;a.i(new U("ad-skipped"));return F(J,t(!0),0)})},y=new Lr(a.h,b,a.Z,c,d,!a.C),a.C||(y.setMuted(a.g.muted),y.setVolume(a.g.volume)),a.i(new U("ad-started",(new Map).set("ad",y))),(z=y.canSkipNow())&&a.i(new U("ad-skip-state-changed")),a.l.qa(a.j,"error",w),a.l.o(a.h,"timeupdate",function(){if(a.h.duration){var J=y.canSkipNow();z!=J&&0=J.playRangeEnd?v():a.i(new U("ad-paused"))}),a.l.o(a.h,"volumechange",function(){a.h.muted?a.i(new U("ad-muted")):a.i(new U("ad-volume-changed"))}), +ta(K,4),Or(a),b.startTime&&b.endTime&&Infinity!=b.endTime&&b.startTime!=b.endTime&&(A=b.endTime-b.startTime,0b.endTime)&&a.Z()}));wa(K,0);break;case 4:I=xa(K);if(!a.J)return K.return();w(I);H(K)}})} +function gs(a,b){b.displayOnBackground&&(a.g.style.zIndex="1");if(null!=b.currentVideo){var c=b.currentVideo;a.g.style.transformOrigin="top left";var d=!0,e=[],f=c.topLeft.x/c.viewport.x*100;0=f&&(e.push("translateX("+f+"%)"),d=!1);f=c.topLeft.y/c.viewport.y*100;0=f&&(e.push("translateY("+f+"%)"),d=!1);f=c.size.x/c.viewport.x;1>f&&e.push("scaleX("+f+")");c=c.size.y/c.viewport.y;1>f&&e.push("scaleY("+c+")");e.length&&(a.g.style.transform=e.join(" "));d&&(a.g.style.transition="transform 250ms")}a.B&& +(a.B.style.pointerEvents="none",b.background&&(a.B.style.background=b.background));a.F&&(a.F.style.background=b.overlay?"":"rgb(0, 0, 0)")}function Zr(a,b){if(!b||b.displayOnBackground)a.g.style.zIndex="";b&&null==b.currentVideo||(a.g.style.transformOrigin="",a.g.style.transition="",a.g.style.transform="");a.B&&(a.B.style.pointerEvents="",!b||b.background)&&(a.B.style.background="");a.F&&(a.F.style.background="")} +function as(a,b){var c,d,e,f,g,h,k,l,m,n,q,r,t,w,v,y,z,A,B,D,G,C,E,I,K,J,L,M,O,N,P,R,T,ca,Y,Ma,Na,Ea,va,Ka,Pa,za;return Q(function(ia){switch(ia.g){case 1:c=[];if(!b)return ia.return(c);d=b.values.find(function(Aa){return"X-ASSET-URI"==Aa.key});e=b.values.find(function(Aa){return"X-ASSET-LIST"==Aa.key});if(!d&&!e)return ia.return(c);f=null;if(g=b.values.find(function(Aa){return"ID"==Aa.key}))f=g.data;h=null==f?Math.floor(10*b.startTime)/10:b.startTime;(k=b.endTime)&&Infinity!=b.endTime&&"number"== +typeof b.endTime&&(k=null==f?Math.floor(10*b.endTime)/10:b.endTime);l=b.values.find(function(Aa){return"X-RESTRICT"==Aa.key});n=m=!0;l&&l.data&&(q=l.data,m=!q.includes("SKIP"),n=!q.includes("JUMP"));r=m?0:null;if(t=b.values.find(function(Aa){return"X-ENABLE-SKIP-AFTER"==Aa.key}))w=t.data,r=parseFloat(w),isNaN(r)&&(r=m?0:null);v=null;if(y=b.values.find(function(Aa){return"X-ENABLE-SKIP-FOR"==Aa.key}))z=y.data,v=parseFloat(z),isNaN(r)&&(v=null);A=null;if(B=b.values.find(function(Aa){return"X-RESUME-OFFSET"== +Aa.key}))D=B.data,A=parseFloat(D),isNaN(A)&&(A=null);G=null;if(C=b.values.find(function(Aa){return"X-PLAYOUT-LIMIT"==Aa.key}))E=C.data,G=parseFloat(E),isNaN(G)&&(G=null);J=K=I=!1;if(L=b.values.find(function(Aa){return"CUE"==Aa.key}))M=L.data,I=M.includes("ONCE"),K=M.includes("PRE"),J=M.includes("POST");O=!1;(N=b.values.find(function(Aa){return"X-TIMELINE-OCCUPIES"==Aa.key}))?(P=N.data,O=P.includes("RANGE")):!B&&a.G.T()&&(O=!K&&!J);if(d){R=d.data;if(!R)return ia.return(c);c.push({id:f,groupId:null, +startTime:h,endTime:k,uri:R,mimeType:null,isSkippable:m,skipOffset:r,skipFor:v,canJump:n,resumeOffset:A,playoutLimit:G,once:I,pre:K,post:J,timelineRange:O,loop:!1,overlay:null,displayOnBackground:!1,currentVideo:null,background:null});ia.A(2);break}if(!e){ia.A(2);break}T=e.data;if(!T)return ia.return(c);ta(ia,4);ca={type:11};return F(ia,ds(a,T,ca),6);case 6:Y=ia.h;Ma=Wb(Y);Na=JSON.parse(Ma);if(Ea=Na["SKIP-CONTROL"])va=Ea["ENABLE-SKIP-AFTER"],"number"==typeof va&&(r=parseFloat(va),isNaN(va)&&(r=m? +0:null)),Ka=Ea["ENABLE-SKIP-FOR"],"number"==typeof Ka&&(v=parseFloat(Ka),isNaN(Ka)&&(v=null));for(Pa=0;Pad.startTimeInSeconds+d.durationInSeconds){d=h;c=f;break}}c&&d&&!a.L.includes(d.adId)&&(a.B=b,a.h.currentTime=c.startTimeInSeconds)}} +function ps(a){if(a.h.duration&&(a.g||a.j.length)){var b=a.h.currentTime,c=!1;if(a.g){c=!0;var d=a.D,e=d.startTimeInSeconds+.5*d.durationInSeconds,f=d.startTimeInSeconds+.75*d.durationInSeconds;b>=d.startTimeInSeconds+.25*d.durationInSeconds&&!a.u.includes("firstQuartile")?(a.u.push("firstQuartile"),rs(a,"firstQuartile")):b>=e&&!a.u.includes("midpoint")?(a.u.push("midpoint"),rs(a,"midpoint")):b>=f&&!a.u.includes("thirdQuartile")&&(a.u.push("thirdQuartile"),rs(a,"thirdQuartile"));d=a.g.getRemainingTime(); +e=a.g.getDuration();a.g.canSkipNow()&&0=d||d>e)&&js(a)}if(!a.g||!a.g.isLinear()){a:for(d=u(a.j),e=d.next();!e.done;e=d.next()){e=e.value;if(a.g&&a.g.isLinear())break;for(f=0;fb){if(a.L.includes(g.adId)){if(a.h.ended)continue;a.h.currentTime=h;break a}js(a);a.K=e;a.g=new hs(g,f+1,e.ads.length,!0,a.h);a.D=g;0===f&&rs(a,"breakStart");ss(a);break}}}if(!a.g)for(d= +u(a.j),e=d.next();!e.done;e=d.next()){e=e.value;if(a.g)break;for(f=0;fb&&(a.h.currentTime=a.B),a.B=null)}}} +function js(a){if(a.g){for(;a.C.lastChild;)a.C.removeChild(a.C.firstChild);a.I||a.L.push(a.D.adId);var b=a.g.m;(void 0===b?0:b)?rs(a,"skip"):rs(a,"complete");b=u(a.m);for(var c=b.next();!c.done;c=b.next())c=c.value,a.s.Ca(c.target,c.type,c.listener);a.m=[];a.u=[];b=a.g.getPositionInSequence();c=a.g.getSequenceLength();b===c&&rs(a,"breakEnd");a.g=null;a.D=null;a.K=null}} +function ss(a){var b=!1;a.h.paused?b=!0:(rs(a,"impression"),rs(a,"start"));a.m.push({target:a.h,type:"volumechange",listener:function(){a.h.muted&&rs(a,"mute")}});a.m.push({target:a.h,type:"volumechange",listener:function(){a.h.muted||rs(a,"unmute")}});a.m.push({target:a.h,type:"play",listener:function(){b?(rs(a,"impression"),rs(a,"start"),b=!1):rs(a,"resume")}});a.m.push({target:a.h,type:"pause",listener:function(){rs(a,"pause")}});for(var c=u(a.m),d=c.next();!d.done;d=c.next())d=d.value,a.s.o(d.target, +d.type,d.listener)} +function rs(a,b){var c=a.D.trackingEvents.find(function(f){return f.eventType==b});c||(c=a.K.adBreakTrackingEvents.find(function(f){return f.eventType==b}));if(c){var d={type:10};c=u(c.beaconUrls);for(var e=c.next();!e.done;e=c.next())(e=e.value)&&""!=e&&(e=Wg([e],Fg()),e.method="POST",a.J.request(7,e,d))}switch(b){case "impression":a.i(new U("ad-impression"));break;case "start":a.i(new U("ad-started",(new Map).set("ad",a.g)));break;case "mute":a.i(new U("ad-muted"));break;case "unmute":a.i(new U("ad-volume-changed"));break; +case "resume":a.i(new U("ad-resumed"));break;case "pause":a.i(new U("ad-paused"));break;case "firstQuartile":a.i(new U("ad-first-quartile"));break;case "midpoint":a.i(new U("ad-midpoint"));break;case "thirdQuartile":a.i(new U("ad-third-quartile"));break;case "complete":a.i(new U("ad-complete"));a.i(new U("ad-stopped"));break;case "skip":a.i(new U("ad-skipped"));a.i(new U("ad-stopped"));break;case "breakStart":a.C.setAttribute("ad-active","true");break;case "breakEnd":a.C.removeAttribute("ad-active"); +break;case "skipStateChanged":a.i(new U("ad-skip-state-changed"))}};function ts(a,b){this.g=a;this.i=null;this.h=b}p=ts.prototype;p.needsSkipUI=function(){return!0};p.isClientRendering=function(){return!1};p.hasCustomClick=function(){return!0};p.isUsingAnotherMediaElement=function(){return!1};p.getDuration=function(){return this.i?this.i.duration:-1};p.getMinSuggestedDuration=function(){return this.getDuration()};p.getRemainingTime=function(){return this.i?this.i.duration-this.i.currentTime:-1};p.isPaused=function(){return this.h.paused};p.isSkippable=function(){return this.g.isSkippable()}; +p.getTimeUntilSkippable=function(){var a=this.g.getSkipTimeOffset();a=this.getRemainingTime()-a;return Math.max(a,0)};p.canSkipNow=function(){return 0==this.getTimeUntilSkippable()};p.skip=function(){this.h.currentTime+=this.getRemainingTime()};p.pause=function(){return this.h.pause()};p.play=function(){return this.h.play()};p.getVolume=function(){return this.h.volume};p.setVolume=function(a){this.h.volume=a};p.isMuted=function(){return this.h.muted};p.isLinear=function(){return!0};p.resize=function(){}; +p.setMuted=function(a){this.h.muted=a};p.getSequenceLength=function(){var a=this.g.getAdPodInfo();return null==a?1:a.getTotalAds()};p.getPositionInSequence=function(){var a=this.g.getAdPodInfo();return null==a?1:a.getAdPosition()};p.getTitle=function(){return this.g.getTitle()};p.getDescription=function(){return this.g.getDescription()};p.getVastMediaBitrate=function(){return 0};p.getVastMediaHeight=function(){return this.g.getVastMediaHeight()};p.getVastMediaWidth=function(){return this.g.getVastMediaWidth()}; +p.getVastAdId=function(){return""};p.getAdId=function(){return this.g.getAdId()};p.getCreativeAdId=function(){return this.g.getCreativeAdId()};p.getAdvertiserName=function(){return this.g.getAdvertiserName()};p.getMediaUrl=function(){return null};p.getTimeOffset=function(){var a=this.g.getAdPodInfo();return null==a?0:a.getTimeOffset()};p.getPodIndex=function(){var a=this.g.getAdPodInfo();return null==a?0:a.getPodIndex()};p.release=function(){this.h=this.i=this.g=null};S("shaka.ads.ServerSideAd",ts); +ts.prototype.release=ts.prototype.release;ts.prototype.getPodIndex=ts.prototype.getPodIndex;ts.prototype.getTimeOffset=ts.prototype.getTimeOffset;ts.prototype.getMediaUrl=ts.prototype.getMediaUrl;ts.prototype.getAdvertiserName=ts.prototype.getAdvertiserName;ts.prototype.getCreativeAdId=ts.prototype.getCreativeAdId;ts.prototype.getAdId=ts.prototype.getAdId;ts.prototype.getVastAdId=ts.prototype.getVastAdId;ts.prototype.getVastMediaWidth=ts.prototype.getVastMediaWidth; +ts.prototype.getVastMediaHeight=ts.prototype.getVastMediaHeight;ts.prototype.getVastMediaBitrate=ts.prototype.getVastMediaBitrate;ts.prototype.getDescription=ts.prototype.getDescription;ts.prototype.getTitle=ts.prototype.getTitle;ts.prototype.getPositionInSequence=ts.prototype.getPositionInSequence;ts.prototype.getSequenceLength=ts.prototype.getSequenceLength;ts.prototype.setMuted=ts.prototype.setMuted;ts.prototype.resize=ts.prototype.resize;ts.prototype.isLinear=ts.prototype.isLinear; +ts.prototype.isMuted=ts.prototype.isMuted;ts.prototype.setVolume=ts.prototype.setVolume;ts.prototype.getVolume=ts.prototype.getVolume;ts.prototype.play=ts.prototype.play;ts.prototype.pause=ts.prototype.pause;ts.prototype.skip=ts.prototype.skip;ts.prototype.canSkipNow=ts.prototype.canSkipNow;ts.prototype.getTimeUntilSkippable=ts.prototype.getTimeUntilSkippable;ts.prototype.isSkippable=ts.prototype.isSkippable;ts.prototype.isPaused=ts.prototype.isPaused;ts.prototype.getRemainingTime=ts.prototype.getRemainingTime; +ts.prototype.getMinSuggestedDuration=ts.prototype.getMinSuggestedDuration;ts.prototype.getDuration=ts.prototype.getDuration;ts.prototype.isUsingAnotherMediaElement=ts.prototype.isUsingAnotherMediaElement;ts.prototype.hasCustomClick=ts.prototype.hasCustomClick;ts.prototype.isClientRendering=ts.prototype.isClientRendering;ts.prototype.needsSkipUI=ts.prototype.needsSkipUI;function us(a,b,c,d){var e=this;this.u=a;this.l=b;this.j=null;this.F=NaN;this.i=d;this.G=!1;this.B=this.m=this.s=null;this.C="";this.D=[];this.h=new Oc;a=new google.ima.dai.api.UiSettings;a.setLocale(c);this.g=new google.ima.dai.api.StreamManager(this.l,this.u,a);this.i(new U("ima-stream-manager-loaded",(new Map).set("imaStreamManager",this.g)));this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.LOADED,function(f){vs(e,f)});this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.ERROR,function(){e.C.length? +e.j.resolve(e.C):e.j.reject("IMA Stream request returned an error and there was no backup asset uri provided.");e.j=null});this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,function(){});this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.STARTED,function(f){f=f.getAd();e.m=new ts(f,e.l);e.B&&(e.m.i=e.B);e.i(new U("ad-started",(new Map).set("ad",e.m)));e.u.setAttribute("ad-active","true")});this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED,function(){e.u.removeAttribute("ad-active"); +var f=e.l.currentTime;e.s&&e.s>f&&(e.l.currentTime=e.s,e.s=null)});this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.AD_PROGRESS,function(f){e.B=f.getStreamData().adProgressData;e.m&&(e.m.i=e.B)});this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.FIRST_QUARTILE,function(){e.i(new U("ad-first-quartile"))});this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.MIDPOINT,function(){e.i(new U("ad-midpoint"))});this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.THIRD_QUARTILE,function(){e.i(new U("ad-third-quartile"))}); +this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.COMPLETE,function(){e.i(new U("ad-complete"));e.i(new U("ad-stopped"));e.u.removeAttribute("ad-active");e.m=null});this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.SKIPPED,function(){e.i(new U("ad-skipped"));e.i(new U("ad-stopped"))});this.h.o(this.g,google.ima.dai.api.StreamEvent.Type.CUEPOINTS_CHANGED,function(f){var g=f.getStreamData();f=[];g=u(g.cuepoints);for(var h=g.next();!h.done;h=g.next())h=h.value,f.push({start:h.start,end:h.end});e.D= +f;e.i(new U("ad-cue-points-changed",(new Map).set("cuepoints",f)))})}p=us.prototype;p.configure=function(){};p.stop=function(){this.C="";this.s=null;this.D=[]};p.release=function(){this.stop();this.h&&this.h.release()};p.onCueMetadataChange=function(a){if(a.key&&a.data){var b={};b[a.key]=a.data;this.g.onTimedMetadata(b)}};p.getCuePoints=function(){return this.D}; +function vs(a,b){a.i(new U("ads-loaded",(new Map).set("loadTime",Date.now()/1E3-a.F)));b=b.getStreamData().url;a.j.resolve(b);a.j=null;a.G||a.h.o(a.l,"seeked",function(){var c=a.l.currentTime;if(0!=c){a.g.streamTimeForContentTime(c);var d=a.g.previousCuePointForStreamTime(c);d&&!d.played&&(a.s=c,a.l.currentTime=d.start)}})};function ws(){jb.call(this);this.h=this.i=this.j=this.g=null;this.m=new zr;this.s=navigator.language;this.l=null}pa(ws,jb);p=ws.prototype;p.setLocale=function(a){this.s=a};p.configure=function(a){this.l=a;this.g&&this.g.configure(this.l);this.j&&this.j.configure(this.l);this.h&&this.h.configure(this.l)};p.initInterstitial=function(a,b,c){var d=this;this.g&&this.g.release();this.g=new Nr(a,b,c,function(e){return xs(d,e)});this.g.configure(this.l)}; +p.initClientSide=function(a,b,c){var d=this;if(!window.google||!google.ima||!google.ima.AdsLoader)throw new V(2,10,1E4);this.j&&this.j.release();this.j=new Fr(a,b,this.s,c,function(e){return xs(d,e)});this.j.configure(this.l)};p.release=function(){this.g&&(this.g.release(),this.g=null);this.j&&(this.j.release(),this.j=null);this.i&&(this.i.release(),this.i=null);this.h&&(this.h.release(),this.h=null);jb.prototype.release.call(this)}; +p.onAssetUnload=function(){this.g&&this.g.stop();this.j&&this.j.stop();this.i&&this.i.stop();this.h&&this.h.stop();this.dispatchEvent(new U("ad-stopped"));this.dispatchEvent(new U("ad-content-attach-requested"));this.m=new zr};p.requestClientSideAds=function(a){if(!this.j)throw new V(1,10,10001);var b=this.j;b.g&&b.g.destroy();b.m&&b.m.contentComplete();b.G=Date.now()/1E3;b.m.requestAds(a)}; +p.updateClientSideAdsRenderingSettings=function(a){if(!this.j)throw new V(1,10,10001);var b=this.j;b.C=a;b.g&&b.g.updateAdsRenderingSettings(b.C)};p.initMediaTailor=function(a,b,c){var d=this;this.i&&this.i.release();this.i=new is(a,b,c,function(e){return xs(d,e)})};p.requestMediaTailorStream=function(a,b,c){if(!this.i)throw new V(1,10,10005);var d=this.i;c=void 0===c?"":c;d.l?a=Promise.reject(new V(1,10,10004)):(d.l=new Hg,ls(d,a,b),d.H=c||"",d.O=Date.now()/1E3,a=d.l);return a}; +p.addMediaTailorTrackingUrl=function(a){if(!this.i)throw new V(1,10,10005);var b=this.i;b.G=a;b.i(new U("ads-loaded",(new Map).set("loadTime",0)))};p.initServerSide=function(a,b){var c=this;if(!window.google||!google.ima||!google.ima.dai)throw new V(2,10,10002);this.h&&this.h.release();this.h=new us(a,b,this.s,function(d){return xs(c,d)});this.h.configure(this.l)}; +p.requestServerSideStream=function(a,b){b=void 0===b?"":b;if(!this.h)throw new V(1,10,10003);a.adTagParameters||(a.adTagParameters={});var c=a.adTagParameters;(c.mpt||c.mpv)&&ab('You have attempted to set "mpt" and/or "mpv" parameters of the ad tag. Please note that those parameters are used for Shaka adoption tracking and will be overridden.');a.adTagParameters.mpt="shaka-player";a.adTagParameters.mpv="v4.15.0";c=this.h;c.j?a=Promise.reject(new V(1,10,10004)):(a instanceof google.ima.dai.api.LiveStreamRequest&& +(c.G=!0),c.j=new Hg,c.g.requestStream(a),c.C=b||"",c.F=Date.now()/1E3,a=c.j);return a};p.replaceServerSideAdTagParameters=function(a){if(!this.h)throw new V(1,10,10003);(a.mpt||a.mpv)&&ab('You have attempted to set "mpt" and/or "mpv" parameters of the ad tag. Please note that those parameters are used for Shaka adoption tracking and will be overridden.');a.mpt="Shaka Player";a.mpv="v4.15.0";this.h.g.replaceAdTagParameters(a)}; +p.getServerSideCuePoints=function(){Uc("AdManager.getServerSideCuePoints","Please use getCuePoints function.");return this.getCuePoints()};p.getCuePoints=function(){var a=[];this.h&&(a=a.concat(this.h.getCuePoints()));this.i&&(a=a.concat(this.i.getCuePoints()));return a};p.getStats=function(){var a=this.m;return{loadTimes:a.g,averageLoadTime:Ar(a),started:a.h,overlayAds:a.j,playedCompletely:a.l,skipped:a.m,errors:a.i}};p.onManifestUpdated=function(a){if(this.i)this.i.onManifestUpdated(a)}; +p.onDashTimedMetadata=function(a){this.h&&"urn:google:dai:2018"==a.schemeIdUri&&this.h.g.processMetadata(a.schemeIdUri,a.eventNode?a.eventNode.attributes.messageData:null,a.startTime)};p.onHlsTimedMetadata=function(a,b){this.h&&this.h.g.processMetadata("ID3",a.data,b)};p.onCueMetadataChange=function(a){if(this.h)this.h.onCueMetadataChange(a)};p.onHLSInterstitialMetadata=function(a,b,c){this.l&&this.l.disableHLSInterstitial||(this.g||this.initInterstitial(null,a,b),this.g&&$r(this.g,c))}; +p.onDASHInterstitialMetadata=function(a,b,c){if(!this.l||!this.l.disableDASHInterstitial){var d=c.schemeIdUri;if("urn:mpeg:dash:event:alternativeMPD:insert:2025"==d||"urn:mpeg:dash:event:alternativeMPD:replace:2025"==d){if(this.g||this.initInterstitial(null,a,b),this.g&&(a=this.g,b="urn:mpeg:dash:event:alternativeMPD:replace:2025"==c.schemeIdUri,d="urn:mpeg:dash:event:alternativeMPD:insert:2025"==c.schemeIdUri,b||d)){for(var e=c.startTime,f=c.endTime,g=null,h=0,k,l=u(c.eventNode.children),m=l.next();!m.done;m= +l.next())if(m=m.value,"AlternativeMPD"==m.tagName){if(m=m.attributes.uri){k=m;break}}else if("InsertPresentation"==m.tagName||"ReplacePresentation"==m.tagName){var n=m.attributes.url;if(n){k=n;(l=Vd(m,"maxDuration",ae))&&(g=l/c.timescale);(l=Vd(m,"returnOffset",ae))&&(h=l/c.timescale);b&&h&&(f=e+h);break}}k&&bs(a,[{id:c.id,groupId:null,startTime:e,endTime:f,uri:k,mimeType:null,isSkippable:!1,skipOffset:null,skipFor:null,canJump:!0,resumeOffset:d?h:null,playoutLimit:g,once:!1,pre:!1,post:!1,timelineRange:b&& +!d,loop:!1,overlay:null,displayOnBackground:!1,currentVideo:null,background:null}])}}else("urn:mpeg:dash:event:2012"==d||"urn:scte:dash:scte214-events"==d)&&c.eventNode&&Sd(c.eventNode,"OverlayEvent")&&(this.g||this.initInterstitial(null,a,b),this.g&&cs(this.g,c))}};p.addCustomInterstitial=function(a){if(!this.g)throw new V(1,10,10006);bs(this.g,[a])};p.addAdUrlInterstitial=function(a){if(!this.g)throw new V(1,10,10006);return this.g.addAdUrlInterstitial(a)}; +p.getInterstitialPlayer=function(){if(!this.g)throw new V(1,10,10006);return this.g.Rb()};function xs(a,b){if(b&&b.type)switch(b.type){case "ads-loaded":a.m.g.push(b.loadTime);break;case "ad-started":a.m.h++;var c=b.ad;c&&!c.isLinear()&&a.m.j++;break;case "ad-complete":a.m.l++;break;case "ad-skipped":a.m.m++;break;case "ad-error":a.m.i++}a.dispatchEvent(b)}S("shaka.ads.AdManager",ws);ws.prototype.getInterstitialPlayer=ws.prototype.getInterstitialPlayer;ws.prototype.addAdUrlInterstitial=ws.prototype.addAdUrlInterstitial; +ws.prototype.addCustomInterstitial=ws.prototype.addCustomInterstitial;ws.prototype.onDASHInterstitialMetadata=ws.prototype.onDASHInterstitialMetadata;ws.prototype.onHLSInterstitialMetadata=ws.prototype.onHLSInterstitialMetadata;ws.prototype.onCueMetadataChange=ws.prototype.onCueMetadataChange;ws.prototype.onHlsTimedMetadata=ws.prototype.onHlsTimedMetadata;ws.prototype.onDashTimedMetadata=ws.prototype.onDashTimedMetadata;ws.prototype.onManifestUpdated=ws.prototype.onManifestUpdated; +ws.prototype.getStats=ws.prototype.getStats;ws.prototype.getCuePoints=ws.prototype.getCuePoints;ws.prototype.getServerSideCuePoints=ws.prototype.getServerSideCuePoints;ws.prototype.replaceServerSideAdTagParameters=ws.prototype.replaceServerSideAdTagParameters;ws.prototype.requestServerSideStream=ws.prototype.requestServerSideStream;ws.prototype.initServerSide=ws.prototype.initServerSide;ws.prototype.addMediaTailorTrackingUrl=ws.prototype.addMediaTailorTrackingUrl; +ws.prototype.requestMediaTailorStream=ws.prototype.requestMediaTailorStream;ws.prototype.initMediaTailor=ws.prototype.initMediaTailor;ws.prototype.updateClientSideAdsRenderingSettings=ws.prototype.updateClientSideAdsRenderingSettings;ws.prototype.requestClientSideAds=ws.prototype.requestClientSideAds;ws.prototype.onAssetUnload=ws.prototype.onAssetUnload;ws.prototype.release=ws.prototype.release;ws.prototype.initClientSide=ws.prototype.initClientSide;ws.prototype.initInterstitial=ws.prototype.initInterstitial; +ws.prototype.configure=ws.prototype.configure;ws.prototype.setLocale=ws.prototype.setLocale;ws.ADS_LOADED="ads-loaded";ws.AD_STARTED="ad-started";ws.AD_FIRST_QUARTILE="ad-first-quartile";ws.AD_MIDPOINT="ad-midpoint";ws.AD_THIRD_QUARTILE="ad-third-quartile";ws.AD_COMPLETE="ad-complete";ws.AD_STOPPED="ad-stopped";ws.AD_SKIPPED="ad-skipped";ws.AD_VOLUME_CHANGED="ad-volume-changed";ws.AD_MUTED="ad-muted";ws.AD_PAUSED="ad-paused";ws.AD_RESUMED="ad-resumed";ws.AD_SKIP_STATE_CHANGED="ad-skip-state-changed"; +ws.CUEPOINTS_CHANGED="ad-cue-points-changed";ws.IMA_AD_MANAGER_LOADED="ima-ad-manager-loaded";ws.IMA_STREAM_MANAGER_LOADED="ima-stream-manager-loaded";ws.AD_CLICKED="ad-clicked";ws.AD_PROGRESS="ad-progress";ws.AD_BUFFERING="ad-buffering";ws.AD_IMPRESSION="ad-impression";ws.AD_DURATION_CHANGED="ad-duration-changed";ws.AD_CLOSED="ad-closed";ws.AD_LOADED="ad-loaded";ws.ALL_ADS_COMPLETED="all-ads-completed";ws.AD_LINEAR_CHANGED="ad-linear-changed";ws.AD_METADATA="ad-metadata"; +ws.AD_RECOVERABLE_ERROR="ad-recoverable-error";ws.AD_ERROR="ad-error";ws.AD_BREAK_READY="ad-break-ready";ws.AD_INTERACTION="ad-interaction";ws.AD_CONTENT_PAUSE_REQUESTED="ad-content-pause-requested";ws.AD_CONTENT_RESUME_REQUESTED="ad-content-resume-requested";ws.AD_CONTENT_ATTACH_REQUESTED="ad-content-attach-requested";Yp=function(){return new ws};function ys(a){return JSON.stringify(a,function(b,c){if("function"!=typeof c){if(c instanceof Event||c instanceof U){var d={};for(e in c)(b=c[e])&&"object"==typeof b?"detail"==e&&(d[e]=b):e in Event||(d[e]=b);return d}if(c instanceof Error){var e=new Set(["name","message","stack"]);for(d in c)e.add(d);d=u(Object.getOwnPropertyNames(c));for(b=d.next();!b.done;b=d.next())e.add(b.value);d={};e=u(e);for(b=e.next();!b.done;b=e.next())b=b.value,d[b]=c[b];c={__type__:"Error",contents:d}}else if(c instanceof +TimeRanges){e={__type__:"TimeRanges",length:c.length,start:[],end:[]};c=u(Hj(c));for(d=c.next();!d.done;d=c.next())d=d.value,b=d.end,e.start.push(d.start),e.end.push(b);c=e}else c=ArrayBuffer.isView(c)&&1===c.BYTES_PER_ELEMENT?{__type__:"Uint8Array",entries:Array.from(c)}:"number"==typeof c?isNaN(c)?"NaN":isFinite(c)?c:0>c?"-Infinity":"Infinity":c;return c}})} +function zs(a){return JSON.parse(a,function(b,c){if("NaN"==c)var d=NaN;else if("-Infinity"==c)d=-Infinity;else if("Infinity"==c)d=Infinity;else if(c&&"object"==typeof c&&"TimeRanges"==c.__type__)d=As(c);else if(c&&"object"==typeof c&&"Uint8Array"==c.__type__)d=new Uint8Array(c.entries);else if(c&&"object"==typeof c&&"Error"==c.__type__){b=c.contents;c=Error(b.message);for(d in b)c[d]=b[d];d=c}else d=c;return d})} +function As(a){return{length:a.length,start:function(b){return a.start[b]},end:function(b){return a.end[b]}}} +var Bs="ended play playing pause pausing ratechange seeked seeking timeupdate volumechange".split(" "),Cs="buffered currentTime duration ended loop muted paused playbackRate seeking videoHeight videoWidth volume".split(" "),Ds=["loop","playbackRate"],Es=["pause","play"],Fs=(new Map).set("getAssetUri",2).set("getAudioLanguages",4).set("getAudioLanguagesAndRoles",4).set("getBufferFullness",1).set("getBufferedInfo",2).set("getExpiration",2).set("getKeyStatuses",2).set("getPlaybackRate",2).set("getTextLanguages", +4).set("getTextLanguagesAndRoles",4).set("isAudioOnly",10).set("isBuffering",1).set("isInProgress",1).set("isLive",10).set("isTextTrackVisible",1).set("isVideoOnly",10).set("keySystem",10).set("seekRange",1).set("getLoadMode",10).set("getManifestType",10).set("isFullyLoaded",1).set("isEnded",1),Gs=(new Map).set("getConfiguration",4).set("getConfigurationForLowLatency",4).set("getStats",5).set("getAudioTracks",2).set("getChaptersTracks",2).set("getImageTracks",2).set("getVideoTracks",2).set("getTextTracks", +2).set("getVariantTracks",2),Hs=(new Map).set("getPlayheadTimeAsDate",1).set("getPresentationStartTimeAsDate",20).set("getSegmentAvailabilityDuration",20),Is=[["getConfiguration","configure","getConfigurationForLowLatency","configurationForLowLatency"]],Js=[["isTextTrackVisible","setTextTrackVisibility"]],Ks="cancelTrickPlay configure configurationForLowLatency getChapters resetConfiguration retryStreaming selectAudioLanguage selectAudioTrack selectTextLanguage selectTextTrack selectVariantTrack selectVariantsByLabel selectVideoTrack setTextTrackVisibility trickPlay updateStartTime goToLive useTrickPlayTrackIfAvailable".split(" "), +Ls="addChaptersTrack addTextTrackAsync addThumbnailsTrack getAllThumbnails getChaptersAsync getThumbnails attach attachCanvas detach load unload".split(" ");function Ms(a,b,c,d,e,f,g){var h=this;this.G=a;this.J=g;this.l=new yf(b);this.K=c;this.u=!1;this.B=d;this.F=e;this.L=f;this.i=this.m=!1;this.I="";this.s=null;this.C=function(){return Ns(h)};this.D=function(k,l){k=zs(l);switch(k.type){case "event":var m=k.targetName,n=Xa(k.event);h.B(m,n);break;case "update":m=k.update;for(n in m){k=h.g[n]||{};for(var q in m[n])k[q]=m[n][q]}h.u&&(h.K(),h.u=!1);break;case "asyncComplete":if(q=k.id,n=k.error,l=k.res,k=h.h.get(q),h.h.delete(q),k)if(n){q=new V(n.severity, +n.category,n.code);for(m in n)q[m]=n[m];k.reject(q)}else k.resolve(l)}};this.g={video:{},player:{}};this.H=0;this.h=new Map;this.j=null;Os.add(this)}p=Ms.prototype;p.destroy=function(){Os.delete(this);Ps(this);Qs&&Rs(this);this.l&&(this.l.stop(),this.l=null);this.F=this.B=null;this.i=this.m=!1;this.D=this.C=this.j=this.h=this.g=this.s=null;return Promise.resolve()};p.Pa=function(){return this.i};p.Sf=function(){return this.I}; +p.init=function(){if(this.G.length)if(window.chrome&&chrome.cast&&chrome.cast.isAvailable){this.m=!0;this.l.Ja();var a=new chrome.cast.SessionRequest(this.G,[],null,this.J,null);a=new chrome.cast.ApiConfig(a,function(b){for(var c=u(Os),d=c.next();!d.done;d=c.next()){d=d.value;var e=b;d.j=new Hg;d.u=!0;Ss(d,e)}},function(b){for(var c=u(Os),d=c.next();!d.done;d=c.next())d=d.value,Ts="available"==b,d.l.Ja()},"origin_scoped");chrome.cast.initialize(a,function(){},function(){});Ts&&this.l.X(Us);(a=Qs)&& +a.status!=chrome.cast.SessionStatus.STOPPED?(this.j=new Hg,this.u=!0,Ss(this,a)):Qs=null}else window.__onGCastApiAvailable!==Vs&&(Ws=window.__onGCastApiAvailable||null,window.__onGCastApiAvailable=Vs)};p.Sh=function(a){this.s=a;this.i&&Xs(this,{type:"appData",appData:this.s})}; +p.cast=function(){var a=this;return Q(function(b){if(!a.m)throw new V(1,8,8E3);if(!Ts)throw new V(1,8,8001);if(a.i)throw new V(1,8,8002);a.j=new Hg;chrome.cast.requestSession(function(c){return Ss(a,c)},function(c){return Ys(a,c)});return F(b,a.j,0)})};function Zs(a){a.i&&chrome.cast.requestSession(function(b){return Ss(a,b)},function(b){return Ys(a,b)})}p.wd=function(){if(this.i){Ps(this);if(Qs){Rs(this);try{Qs.stop(function(){},function(){})}catch(a){}Qs=null}Ns(this)}}; +p.get=function(a,b){var c=this;if("video"==a){if(Es.includes(b))return function(){return c.pj.apply(c,[a,b].concat(x(Ja.apply(0,arguments))))}}else if("player"==a){if(Hs.has(b)&&!this.get("player","isLive")())return function(){};if(Ks.includes(b))return function(){return c.pj.apply(c,[a,b].concat(x(Ja.apply(0,arguments))))};if(Ls.includes(b))return function(){return c.Vl.apply(c,[a,b].concat(x(Ja.apply(0,arguments))))};if(Fs.has(b)||Gs.has(b))return function(){return c.g[a][b]}}return this.g[a][b]}; +p.set=function(a,b,c){this.g[a][b]=c;Xs(this,{type:"set",targetName:a,property:b,value:c})};function Ss(a,b){var c=a.L();Qs=b;b.addUpdateListener(a.C);b.addMessageListener("urn:x-cast:com.google.shaka.v2",a.D);Ns(a);Xs(a,{type:"init",initState:c,appData:a.s});a.j.resolve()}function Ys(a,b){var c=8003;switch(b.code){case "cancel":c=8004;break;case "timeout":c=8005;break;case "receiver_unavailable":c=8006}a.j.reject(new V(2,8,c,b))} +p.pj=function(a,b){Xs(this,{type:"call",targetName:a,methodName:b,args:Ja.apply(2,arguments)})};p.Vl=function(a,b){var c=Ja.apply(2,arguments),d=new Hg,e=this.H.toString();this.H++;this.h.set(e,d);try{Xs(this,{type:"asyncCall",targetName:a,methodName:b,args:c,id:e})}catch(f){d.reject(f)}return d};function Rs(a){var b=Qs;b.removeUpdateListener(a.C);b.removeMessageListener("urn:x-cast:com.google.shaka.v2",a.D)} +function Ns(a){var b=Qs?"connected"==Qs.status:!1;if(a.i&&!b){a.F();for(var c in a.g)a.g[c]={};Ps(a)}a.i=b;a.I=b?Qs.receiver.friendlyName:"";a.l.Ja()}function Ps(a){if(a.h)for(var b=u(a.h.keys()),c=b.next();!c.done;c=b.next()){c=c.value;var d=a.h.get(c);a.h.delete(c);d.reject(new V(1,7,7E3))}} +function Xs(a,b){b=ys(b);var c=Qs;try{c.sendMessage("urn:x-cast:com.google.shaka.v2",b,function(){},db)}catch(d){throw b=new V(2,8,8005,d),c=new U("error",(new Map).set("detail",b)),a.B("player",c),a.wd(),b;}}var Us=.02,Ts=!1,Qs=null,Ws=null,Os=new Set;function Vs(a){Ws?window.__onGCastApiAvailable=Ws:delete window.__onGCastApiAvailable;Ws=null;if(a)for(var b=u(Os),c=b.next();!c.done;c=b.next())c.value.init();"function"===typeof window.__onGCastApiAvailable&&window.__onGCastApiAvailable(a)};function $s(a,b,c,d){d=void 0===d?!1:d;jb.call(this);var e=this;this.i=a;this.h=b;this.l=this.s=this.m=this.u=this.j=null;this.H=c;this.G=d;this.D=[];this.C=[];this.B=[];this.F=new Map;this.g=null;window.chrome?(this.g=new Ms(c,function(){return at(e)},function(){return bt(e)},function(f,g){return ct(e,f,g)},function(){return dt(e)},function(){return et(e)},d),ft(this)):(this.j=this.i,this.u=this.h)}pa($s,jb);p=$s.prototype; +p.destroy=function(a){this.g&&(void 0===a?0:a)&&this.g.wd();this.l&&(this.l.release(),this.l=null);a=[];this.h&&(a.push(this.h.destroy()),this.h=null);this.g&&(a.push(this.g.destroy()),this.g=null);this.u=this.j=this.i=null;jb.prototype.release.call(this);return Promise.all(a)};p.Fc=function(){return this.j};p.Rb=function(){return this.u};p.Cg=function(){return this.g?this.g.m&&Ts:!1};p.Pa=function(){return this.g?this.g.Pa():!1};p.Sf=function(){return this.g?this.g.Sf():""}; +p.cast=function(){var a=this;return Q(function(b){return 1==b.g?a.g?F(b,a.g.cast(),2):b.return():a.h?F(b,a.h.kc(),0):b.return()})};p.Sh=function(a){this.g&&this.g.Sh(a)};p.Nj=function(){this.g&&Zs(this.g)};p.wd=function(){this.g&&this.g.wd()}; +p.Di=function(a,b){b=void 0===b?!1:b;var c=this;return Q(function(d){if(1==d.g){if(a==c.H&&b==c.G)return d.return();c.H=a;c.G=b;if(!c.g)return d.return();c.g.wd();return F(d,c.g.destroy(),2)}c.g=null;c.g=new Ms(a,function(){return at(c)},function(){return bt(c)},function(e,f){return ct(c,e,f)},function(){return dt(c)},function(){return et(c)},b);c.g.init();H(d)})}; +function ft(a){a.g.init();a.l=new Oc;for(var b=u(Bs),c=b.next();!c.done;c=b.next())a.l.o(a.i,c.value,function(f){a.g.Pa()||(f=Xa(f),a.m.dispatchEvent(f))});for(var d in Ya)a.l.o(a.h,Ya[d],function(f){a.g.Pa()||a.s.dispatchEvent(f)});a.j={};b={};for(var e in a.i)b={me:b.me},b.me=e,Object.defineProperty(a.j,b.me,{configurable:!1,enumerable:!0,get:function(f){return function(){return gt(a,f.me)}}(b),set:function(f){return function(g){var h=f.me;a.g.Pa()?a.g.set("video",h,g):a.i[h]=g}}(b)});a.u={};ht(a, +function(f){Object.defineProperty(a.u,f,{configurable:!1,enumerable:!0,get:function(){return it(a,f)}})});jt(a);a.m=new jb;a.m.Pe=a.j;a.s=new jb;a.s.Pe=a.u;a.l.o(a.h,"unloading",function(){a.g&&a.g.Pa()||kt(a)})}function jt(a){var b=new Map;ht(a,function(c,d){b.has(d)?(d=b.get(d),c.length=e)return null;for(var f=-1,g=-1,h=0;hc||127c||0>b))if(b>=c)for(--d;0<=d;d--)a.i[b+d]=a.i[c+d].map(function(f){return f});else for(var e=0;eb;b++)a.i.push(bu())}function bu(){for(var a=[],b=0;42>b;b++)a.push(null);return a}function cu(a,b){du(a)&&(a.i[a.h][a.g]=new It(b,a.D,a.B,a.u,a.C),a.g++)}function du(a){var b=a.gc;c++,b++)a.i[b]=a.i[c];for(c=0;1>c;c++,b++)a.i[b]=bu()} +function fu(a,b,c){var d=new ne(a.j,b,"");d.textAlign=0===a.F?"left":1===a.F?"right":pe;var e=d.region;a.I&&(e.id+="svc"+a.I);e.id+="win"+a.L;e.height=a.s;e.width=a.m;e.heightUnits=2;e.widthUnits=2;e.viewportAnchorX=a.H;e.viewportAnchorY=a.K;e.viewportAnchorUnits=a.J?pd:2;switch(a.G){case 0:e.regionAnchorX=0;e.regionAnchorY=0;break;case 1:e.regionAnchorX=50;e.regionAnchorY=0;break;case 2:e.regionAnchorX=100;e.regionAnchorY=0;break;case 3:e.regionAnchorX=0;e.regionAnchorY=50;break;case 4:e.regionAnchorX= +50;e.regionAnchorY=50;break;case 5:e.regionAnchorX=100;e.regionAnchorY=50;break;case 6:e.regionAnchorX=0;e.regionAnchorY=100;break;case 7:e.regionAnchorX=50;e.regionAnchorY=100;break;case 8:e.regionAnchorX=100,e.regionAnchorY=100}if(c=Ft(d,"svc"+c,a.i,a.j,b))a.j=b;return c}$t.prototype.display=function(){this.l=!0};function gu(){this.i=[];this.h=null;this.g=0}function hu(a,b){3===b.type?(a.g=2*(b.value&63)-1,a.h=[]):a.h&&(0this.h.length)throw new V(2,2,3E3);this.g+=a}; +iu.prototype.uj=function(a){if(0>this.g-a)throw new V(2,2,3E3);this.g-=a};function ku(a){this.i=a;this.h=[null,null,null,null,null,null,null,null];this.g=null} +function lu(a,b,c,d){if(!a.g)return[];if(24==c)return c=ju(b).value,d=ju(b).value,c=function(f){return f.map(function(g){return("0"+(g&255).toString(16)).slice(-2)}).join("")}([c,d]),cu(a.g,String.fromCharCode(parseInt(c,16))),[];b=a.g;var e=null;switch(c){case 8:!du(b)||0>=b.g&&0>=b.h||(0>=b.g?(b.g=b.m-1,b.h--):b.g--,b.i[b.h][b.g]=null);break;case 13:b.isVisible()&&(e=fu(b,d,a.i));b.h+1>=b.s?eu(b):b.h++;b.g=0;break;case 14:b.isVisible()&&(e=fu(b,d,a.i));b.i[b.h]=bu();b.g=0;break;case 12:b.isVisible()&& +(e=fu(b,d,a.i)),au(b),b.h=0,b.g=0}return e?[e]:[]} +function mu(a,b,c,d){if(128<=c&&135>=c)d=c&7,a.h[d]&&(a.g=a.h[d]);else{if(136===c){c=ju(b).value;b=[];c=u(nu(a,c));for(var e=c.next();!e.done;e=c.next()){e=a.h[e.value];if(e.isVisible()){var f=fu(e,d,a.i);f&&b.push(f)}au(e)}return b}if(137===c)for(b=ju(b).value,b=u(nu(a,b)),c=b.next();!c.done;c=b.next())c=a.h[c.value],c.isVisible()||(c.j=d),c.display();else{if(138===c){c=ju(b).value;b=null;c=u(nu(a,c));for(e=c.next();!e.done;e=c.next())e=a.h[e.value],e.isVisible()&&(b=fu(e,d,a.i)),e.l=!1;return b? +[b]:[]}if(139===c){c=ju(b).value;b=null;c=u(nu(a,c));for(e=c.next();!e.done;e=c.next())e=a.h[e.value],e.isVisible()?b=fu(e,d,a.i):e.j=d,e.l=!e.l;return b?[b]:[]}if(140===c)return b=ju(b).value,ou(a,b,d);if(143===c)return d=ou(a,255,d),pu(a),d;if(144===c)b.skip(1),d=ju(b).value,a.g&&(a.g.B=0<(d&128),a.g.D=0<(d&64));else if(145===c)d=ju(b).value,c=ju(b).value,b.skip(1),a.g&&(b=qu((c&48)>>4,(c&12)>>2,c&3),a.g.C=qu((d&48)>>4,(d&12)>>2,d&3),a.g.u=b);else if(146===c)d=ju(b).value,b=ju(b).value,a.g&&(a= +a.g,a.h=d&15,a.g=b&63);else if(151===c)b.skip(1),b.skip(1),d=ju(b).value,b.skip(1),a.g&&(a.g.F=d&3);else if(152<=c&&159>=c){c=(c&15)-8;e=null!==a.h[c];e||(f=new $t(c,a.i),f.j=d,a.h[c]=f);d=ju(b).value;f=ju(b).value;var g=ju(b).value,h=ju(b).value,k=ju(b).value;b=ju(b).value;e&&0===(b&7)||(b=a.h[c],b.h=0,b.g=0,b.D=!1,b.B=!1,b.C="white",b.u="black");b=a.h[c];b.l=0<(d&32);b.K=f&127;b.H=g;b.G=(h&240)>>4;b.J=0<(f&128);b.s=(h&15)+1;b.m=(k&63)+1;a.g=a.h[c]}}}return[]} +function nu(a,b){for(var c=[],d=0;8>d;d++)1===(b&1)&&a.h[d]&&c.push(d),b>>=1;return c}function ou(a,b,c){var d=[];b=u(nu(a,b));for(var e=b.next();!e.done;e=b.next()){e=e.value;var f=a.h[e];f.isVisible()&&(f=fu(f,c,a.i))&&d.push(f);a.h[e]=null}return d}function pu(a){a.g=null;a.h=[null,null,null,null,null,null,null,null]}function qu(a,b,c){var d={0:0,1:0,2:1,3:1};a=d[a];b=d[b];c=d[c];return ru[a<<2|b<<1|c]} +var su=new Map([[32," "],[33,"\u00a0"],[37,"\u2026"],[42,"\u0160"],[44,"\u0152"],[48,"\u2588"],[49,"\u2018"],[50,"\u2019"],[51,"\u201c"],[52,"\u201d"],[53,"\u2022"],[57,"\u2122"],[58,"\u0161"],[60,"\u0153"],[61,"\u2120"],[63,"\u0178"],[118,"\u215b"],[119,"\u215c"],[120,"\u215d"],[121,"\u215e"],[122,"\u2502"],[123,"\u2510"],[124,"\u2514"],[125,"\u2500"],[126,"\u2518"],[127,"\u250c"]]),ru="black blue green cyan red magenta yellow white".split(" ");function tu(){this.h=[];this.g=[];this.i=new gu;this.l=0;this.m=new Map([["CC1",new Ut(0,0)],["CC2",new Ut(0,1)],["CC3",new Ut(1,0)],["CC4",new Ut(1,1)]]);this.u=this.s=0;this.j=new Map;this.C=!0;this.B=new Set;uu(this)}tu.prototype.clear=function(){this.l=0;this.h=[];this.g=[];var a=this.i;a.i=[];a.h=[];a.g=0;uu(this);a=u(this.j.values());for(var b=a.next();!b.done;b=a.next())pu(b.value)}; +function uu(a){a.s=0;a.u=0;for(var b=u(a.m.values()),c=b.next();!c.done;c=b.next())c=c.value,c.h=0,c.g=c.j,c.m=null,Kt(c.i),Kt(c.j),Kt(c.s);a.C=!0} +tu.prototype.extract=function(a,b){if(this.C){for(var c=u(this.m.values()),d=c.next();!d.done;d=c.next())d.value.l=b;this.C=!1}a=new hh(a,0);if(!(8>a.getLength())&&181===a.aa()&&49===a.Fa()&&1195456820===a.W()&&3===a.aa()&&(c=a.aa(),0!==(c&64)))for(c&=31,a.skip(1),d=0;d>2,g=a.aa(),h=a.aa();f&&(e&=3,0===e||1===e?this.h.push({pts:b,type:e,Eb:g,lc:h,order:this.h.length}):(this.g.push({pts:b,type:e,value:g,order:this.g.length}),this.g.push({pts:b,type:2,value:h,order:this.g.length})))}}; +tu.prototype.decode=function(){function a(e,f){return e.pts-f.pts||e.order-f.order}var b=[];this.h.sort(a);this.g.sort(a);for(var c=u(this.h),d=c.next();!d.done;d=c.next())(d=vu(this,d.value))&&b.push(d);c=u(this.g);for(d=c.next();!d.done;d=c.next())hu(this.i,d.value);c=u(this.i.i);for(d=c.next();!d.done;d=c.next())d=wu(this,d.value),b.push.apply(b,x(d));this.i.i=[];this.h=[];this.g=[];return b}; +function vu(a,b){var c=b.type;if(16===(b.Eb&112)){var d=b.Eb>>3&1;0===c?a.s=d:a.u=d}d="CC"+((c<<1|(c?a.u:a.s))+1);c=a.m.get(d);if(255===b.Eb&&255===b.lc||!b.Eb&&!b.lc||!xu(b.Eb)||!xu(b.lc))return 45<=++a.l&&uu(a),null;a.l=0;b.Eb&=127;b.lc&=127;var e=b.Eb;if(1<=e&&15>=e||!b.Eb&&!b.lc)return null;e=null;if(16===(b.Eb&112))a:{a.B.add(d),d=b.Eb;a=b.lc;if(c.m===(d<<8|a))c.m=null;else if(c.m=d<<8|a,16===(d&240)&&64===(a&192)){b=[11,11,1,2,3,4,12,13,14,15,5,6,7,8,9,10][(d&7)<<1|a>>5&1];d="white";e=!1;var f= +null;var g=95=g?d=Zt[Math.floor(g/2)]:15>=g?e=!0:f=Math.floor((g-16)/2);a=1===(a&1);4!==c.h&&(g=c.g,3===c.h&&b!==g.g&&(c=1+b-g.h,Tt(g,c,1+g.g-g.h,g.h),Nt(g,0,c-1),Nt(g,b+1,15-b)),g.g=b,g.m=a,g.j=e,g.l=d,g.u=f,g.s="black")}else if(17===(d&247)&&32===(a&240))c.g.m=!1,c.g.j=!1,c.g.l="white",Ot(c.g,0,32),d=!1,b=Zt[(a&14)>>1],"white_italics"===b&&(b="white",d=!0),c.g.m=1===(a&1),c.g.j=d,c.g.l=b;else if(16===(d&247)&&32===(a&240)||23===(d&247)&&45===(a&255))b="black",0===(d&7)&&(b=Yt[(a& +14)>>1]),c.g.s=b;else if(17===(d&247)&&48===(a&240))Ot(c.g,1,a);else if(18===(d&246)&&32===(a&224))Ot(c.g,d&1?3:2,a);else{if(20===(d&246)&&32===(a&240)){a=b.pts;d=null;switch(b.lc){case 32:Wt(c);break;case 33:c=c.g;c.i[c.g].pop();break;case 37:d=Vt(c,2,a);break;case 38:d=Vt(c,3,a);break;case 39:d=Vt(c,4,a);break;case 40:Ot(c.g,0,32);break;case 41:c.h=2;c.g=c.i;c.g.h=0;c.l=a;break;case 42:Kt(c.s);Xt(c);break;case 43:Xt(c);break;case 44:b=c.i;d=null;4!==c.h&&(d=Lt(b,c.l,a));Nt(b,0,15);break;case 45:b= +c.g;3!==c.h?d=null:(d=Lt(b,c.l,a),e=b.g-b.h+1,Tt(b,e-1,e,b.h),Nt(b,0,e-1),Nt(b,b.g,15-b.g),c.l=a);break;case 46:Nt(c.j,0,15);break;case 47:b=null,4!==c.h&&(b=Lt(c.i,c.l,a)),d=c.j,c.j=c.i,c.i=d,Wt(c),c.l=a,d=b}e=d;break a}(23==d||31==d)&&33<=a&&35>=a&&(c.g.B=a-32)}e=null}else a=b.lc,Ot(c.g,0,b.Eb),Ot(c.g,0,a);return e} +function wu(a,b){var c=[];try{for(;b.Oa();){var d=ju(b).value,e=(d&224)>>5,f=d&31;7===e&&0!=f&&(e=ju(b).value&63);if(0!=e){a.B.add("svc"+e);a.j.has(e)||a.j.set(e,new ku(e));for(var g=a.j.get(e),h=b.Ua();b.Ua()-h=m)var r=lu(e,k,m,n);else if(128<=m&&159>=m)r=mu(e,k,m,n);else{if(4096<=m&&4127>=m)e=k,k=m&255,8<=k&&15>=k?e.skip(1):16<=k&&23>=k?e.skip(2):24<=k&&31>=k&&e.skip(3);else if(4224<=m&&4255>=m)e=k,k=m& +255,128<=k&&135>=k?e.skip(4):136<=k&&143>=k&&e.skip(5);else if(32<=m&&127>=m)k=m,e.g&&(127===k?cu(e.g,"\u266a"):cu(e.g,String.fromCharCode(k)));else if(160<=m&&255>=m)e.g&&cu(e.g,String.fromCharCode(m));else if(4128<=m&&4223>=m){if(k=m&255,e.g)if(su.has(k)){var t=su.get(k);cu(e.g,t)}else cu(e.g,"_")}else 4256<=m&&4351>=m&&e.g&&(160!=(m&255)?cu(e.g,"_"):cu(e.g,"[CC]"));r=[]}c.push.apply(c,x(r))}}}}catch(w){if(w instanceof V&&3E3===w.code)bb("CEA708_INVALID_DATA","Buffer read out of bounds / invalid CEA-708 Data."); +else throw w;}return c}function xu(a){for(var b=0;a;)b^=a&1,a>>=1;return 1===b}tu.prototype.getStreams=function(){return Array.from(this.B)};S("shaka.cea.CeaDecoder",tu);kd=function(){return new tu};function yu(a){for(var b=[],c=a,d=a=0;d>1&63;r=39==r||40==r;break;case Fu:h=2;b.skip(1);r=q>>1&63;r=23==r||24==r;break;default:return}if(r)for(q=0,lc.byteLength){c=[];break a}var f=Kb(c,a,e);b.push({type:d,value:f});a+=e}c=b}return c}function Iu(a){a=hc(Pd(a));a=Hu(a).filter(function(b){return b.type===Ju})[0];if(!a)return null;a=Xb(a.value,!0);return(a=Hd(a,"WRMHEADER"))?a:null} +function Ku(a){try{var b=Iu(a);if(b)a:{for(var c=u(Rd(b,"DATA")),d=c.next();!d.done;d=c.next()){var e=d.value;if(e.children)for(var f=u(e.children),g=f.next();!g.done;g=f.next()){var h=g.value;if("LA_URL"==h.tagName){var k=Pd(h);break a}}}k=""}else k="";return k}catch(l){return""}}var Ju=1;function Lu(a,b,c){var d=Mu(a),e=null;a=[];var f=[],g=null,h=new Set(d.map(function(l){return l.keyId}));h.delete(null);var k="cenc";if(1"+a+"");return Ku(a)}return""} +function Ou(a,b,c,d,e){var f=[];c=u(c);for(var g=c.next();!g.done;g=c.next()){g=g.value;var h=d[g.Ld];if(h){var k;if((k=Td(g.node,"urn:microsoft:playready","pro"))&&Pd(k)){k=Pd(k);k=hc(k);var l=new Uint8Array([154,4,240,121,152,64,66,134,171,146,230,91,224,136,95,149]);k=[{initData:wh(k,l,new Set,0),initDataType:"cenc",keyId:g.keyId}]}else k=null;l=null;if("urn:uuid:e2719d58-a985-b3c9-781a-b030af78d30e"===g.Ld){l=g;var m=e;if(0==m.size)l=null;else{var n=new Uint8Array([16,119,239,236,192,178,77,2, +172,227,60,30,82,226,251,75]),q=new Uint8Array([]);l=[{initData:wh(q,n,m,1),initDataType:"cenc",keyId:l.keyId}]}}k=mc(h,b,g.init||a||k||l);if(h=Ru.get(h))k.licenseServerUri=h(g);f.push(k)}}return f}function Mu(a){var b=[];a=u(a);for(var c=a.next();!c.done;c=a.next())(c=Su(c.value))&&b.push(c);return b} +function Su(a){var b=a.attributes.schemeIdUri,c=Wd(a,"urn:mpeg:cenc:2013","default_KID"),d=Ud(a,"urn:mpeg:cenc:2013","pssh").map(Qd),e=a.attributes.value;if(!b)return null;b=b.toLowerCase();if(c&&(c=c.replace(/-/g,"").toLowerCase(),c.includes(" ")))throw new V(2,4,4009);var f=[];try{f=d.map(function(g){return{initDataType:"cenc",initData:hc(g),keyId:null}})}catch(g){throw new V(2,4,4007);}return{node:a,Ld:b,keyId:c,init:0v)if(r){r=Vd(r,"t",ce);if(null== +r)break;else if(t>=r)break;v=Math.ceil((r-t)/w)-1}else{if(Infinity==a)break;else if(t/f>=a)break;v=Math.ceil((a*f-t)/w)-1}0>>31;q&=2147483647;var t=g.reader.W();g.reader.skip(4);if(1==r)throw new V(2,3,3006);h.push(new zj(l/k+c,(l+t)/k+c,function(){return f},a,a+q-1,b,c,d,e));l+=t;a+=q}g.parser.stop();return h};function bv(a){this.h=Ob(a);this.g=new hh(this.h,0)}bv.prototype.Oa=function(){return this.g.Oa()}; +function cv(a){var b=dv(a);if(7=c&&(c=v.timeline+1)}-1==k&&(k=c);r=new Dv(n,a.M.originalId,a.bandwidth,a.M.jb,a.Nb,t,w,m,g,a.M.Yf,k)}n.timeline&&"image"!==a.ua.contentType&&"text"!==a.ua.contentType&&a.presentationTimeline.kj(r.h?r.h.timeline:[],t);d&&a.pc&&(d.segmentIndex=r);d=(d=(d=n.timeline)&&d[d.length-1])?d.end+n.fc:-1;l=-1;r instanceof Dv&&(l=r.hf());return{endTime:d,timeline:l,Tc:function(){r instanceof Dv&&0==r.getNumReferences()&&Cv(r,n,t,w,m);return Promise.resolve(r)}, +timescale:n.timescale}}function xv(a){return a.Kc}function zv(a){var b=Uu(a,xv),c=Vu(a,xv,"media"),d=Vu(a,xv,"index"),e=Vu(a,xv,"k"),f=0;e&&(f=parseInt(e,10));return{gg:b.gg,ob:b.ob,timescale:b.timescale,Ae:b.Ae,fc:b.fc,mi:b.mi,timeline:b.timeline,Ic:c&&cc(c),je:d,mimeType:a.M.mimeType,codecs:a.M.codecs,bandwidth:a.bandwidth,Jl:f}} +function Av(a){var b=a.je?1:0;b+=a.timeline?1:0;b+=a.ob?1:0;if(0==b)throw new V(2,4,4002);1!=b&&(a.je&&(a.timeline=null),a.gg=null,a.ob=null);if(!a.je&&!a.Ic)throw new V(2,4,4002);} +function Bv(a,b,c,d,e,f,g,h){function k(L){var M=L-v,O=M*w,N=b.gg,P=M*N;"BigInt"in window&&P>Number.MAX_SAFE_INTEGER&&(P=BigInt(M)*BigInt(N));O+=q;M=O+w;N=Math.min(M,m());var R=[],T=b.Jl;if(T)for(var ca=(N-O)/T,Y={},Ma=0;Mam()&&!O.length?null:O})}return Promise.resolve(K)} +function yv(a,b){var c=a.M.vf;c||(c=Vu(a,xv,"initialization"));if(!c)return null;c=cc(c);var d=a.M.originalId,e=a.bandwidth||null,f=a.M.jb,g=a.Nb;b=new xj(function(){var h=Tu(c,d,null,null,e,null);return lc(f(),[h],g())},0,null,kv(a),null,null,b,a.ua.encrypted);b.codecs=a.M.codecs;b.mimeType=a.M.mimeType;a.va&&(b.g=a.va.start+a.va.duration);return b} +function Dv(a,b,c,d,e,f,g,h,k,l,m){Ol.call(this,[]);this.h=a;this.F=b;this.C=c;this.D=d;this.H=e;this.j=f;this.l=g;this.u=h;this.B=k;this.G=l;this.I=m;Ev(this)}pa(Dv,Ol);p=Dv.prototype;p.getNumReferences=function(){return this.h?this.h.timeline.length:0};p.release=function(){Ol.prototype.release.call(this);this.h=null}; +p.hb=function(a){if(this.h){for(var b=0,c=this.h.timeline,d=0;d=b&&(this.g=this.g.slice(b)),this.i+=b,0===this.getNumReferences()&&this.release())}}; +function Cv(a,b,c,d,e){Fv(a,e);if(a.h){c=a.h.timeline;a.h.Ic!==b.Ic&&(a.h.Ic=b.Ic);if(c.length){var f=c[c.length-1];b=b.timeline.filter(function(g){return g.end>f.end})}else b=b.timeline.slice();0=a.l||0>=d.end||b.push(d);a.h.timeline=b;a.hb(a.j)}} +p.find=function(a){if(this.h&&this.h.timeline&&this.h.timeline.length&&a=this.l)return null;for(var c=b.length-1,d=0;d=f&&aa||a>=this.getNumReferences()||!this.h)return null;var c=this.g[a];if(!c){var d=this.h.timeline[a],e=d.bm,f=d.ni+this.h.mi;c=this.j-this.h.fc;var g=this.j+d.end,h=g;a===this.getNumReferences()-1&&Infinity!==this.l&&(h=.1h&&a.j.delete(f);d=d.filter(function(k){for(var l=u(a.j.keys()),m=l.next();!m.done;m=l.next())if(m.value.includes((new qb(k.location)).Fb))return!1;return!0});d.length&&(a.C=d[0].Gh);d=d.map(function(k){return k.location});if(!d.length&&a.h)for(e=u(a.h.split(",")),g=e.next();!g.done;g=e.next())if(g=b.get(g.value))a.C=a.h,d.push(g);if(!d.length)for(b=u(b.values()),e=b.next();!e.done;e=b.next())d.push(e.value);return c?d:lc(a.i,d)};function Nv(){this.l=[];this.h=[];this.g=[];this.j=[];this.i=[];this.u=this.s=!1;this.m=new Set}p=Nv.prototype;p.release=function(){for(var a=u(this.h.concat(this.g,this.j,this.i)),b=a.next();!b.done;b=a.next())b=b.value,b.segmentIndex&&b.segmentIndex.release();this.h=[];this.g=[];this.j=[];this.i=[];this.l=[];this.u=this.s=!1;this.m.clear()};p.il=function(){return this.l};p.lh=function(){return this.j.slice()};p.Gk=function(){return this.i}; +p.Ii=function(a,b){if(a){if("audio"==a.type)for(var c=u(this.h),d=c.next();!d.done;d=c.next())d=d.value,d.matchedStreams=d.matchedStreams.filter(function(e){return e!==a});else if("video"==a.type)for(c=u(this.g),d=c.next();!d.done;d=c.next())d=d.value,d.matchedStreams=d.matchedStreams.filter(function(e){return e!==a}),d.trickModeVideo&&(d.trickModeVideo.matchedStreams=d.trickModeVideo.matchedStreams.filter(function(e){return e!==a})),d.dependencyStream&&(d.dependencyStream.matchedStreams=d.dependencyStream.matchedStreams.filter(function(e){return e!== +a}));else if(a.type==rc)for(c=u(this.j),d=c.next();!d.done;d=c.next())d=d.value,d.matchedStreams=d.matchedStreams.filter(function(e){return e!==a});else if("image"==a.type)for(c=u(this.i),d=c.next();!d.done;d=c.next())d=d.value,d.matchedStreams=d.matchedStreams.filter(function(e){return e!==a});a.segmentIndex&&a.closeSegmentIndex();this.m.delete(b)}}; +function Ov(a,b){var c=[],d=[],e=[],f=[];a=u(a);for(var g=a.next();!g.done;g=a.next()){var h=g.value;g=new Map(h.audioStreams.map(function(n){return[Pv(n),n]}));var k=new Map(h.videoStreams.map(function(n){return[Qv(n),n]})),l=new Map(h.textStreams.map(function(n){return[Rv(n),n]}));h=new Map(h.imageStreams.map(function(n){return[Sv(n),n]}));if(b){var m=Tv(rc);l.set(Rv(m),m);m=Tv("image");h.set(Sv(m),m)}c.push(g);d.push(k);e.push(l);f.push(h)}return{xi:c,Wj:d,Rj:e,Vi:f}} +p.Gg=function(a,b,c){c=void 0===c?!1:c;var d=this,e,f,g,h,k,l,m,n,q,r,t,w,v,y,z,A,B,D,G,C,E,I,K,J,L,M,O,N,P,R,T,ca;return Q(function(Y){if(1==Y.g){e=uc;if(!b&&1==a.length)return f=Ov(a,!1),g=f.xi,h=f.Wj,k=f.Rj,l=f.Vi,d.h=Array.from(g[0].values()),d.g=Array.from(h[0].values()),d.j=Array.from(k[0].values()),d.i=Array.from(l[0].values()),Y.A(2);m=c?d.m.size:0;n=-1;for(q=0;q=d?h.push(new Set(c[k].values())):h.push(new Set);l=u(b);m=l.next();case 2:if(m.done){J.A(4);break}n=m.value;return F(J,aw(a,n,c,d,f,h,g),5);case 5:q=J.h;if(!q)throw new V(2,4,4037);m=l.next();J.A(2);break;case 4:r=u(h);for(t=r.next();!t.done;t=r.next())for(w=t.value,v=u(w),y=v.next();!y.done;y=v.next())z=y.value,(A=bw(a,z,c,e,f,h))&&b.push(A);B=u(h);for(D=B.next();!D.done;D= +B.next())for(G=D.value,C=u(G),E=C.next(),I={};!E.done;I={$h:void 0},E=C.next())if(I.$h=E.value,!cw(I.$h)&&(K=b.some(function(L){return function(M){return dw(a,L.$h,M)}}(I))))throw new V(2,4,4037);return J.return(b)}})}function aw(a,b,c,d,e,f,g){return Q(function(h){if(1==h.g)return ew(a,c,b,0d)return!0;if(ed.length)return!0;if(e.lengthd)return!0;if(ed.length)return!0;if(e.lengtha){if(c<=a||c-ab-a)return sw}else{if(c>a)return sw;if(a-ca-b)return sw}return uw}function tw(a,b,c){b=Math.abs(a-b);a=Math.abs(a-c);return av&&w>t&&a.L++;null==w&&(w=t);if(!(null!==a.N&&null!==r&&null!==q&&q< +a.N)||a.F.includes(r)||l+1==d.length){null!==q&&(null===a.N||q>a.N)&&(a.N=q);k=Uw(a,b,c,{start:q,duration:w,node:m,Yi:null==w||!n});h.push(k);b.za.id&&w&&a.oa.set(b.za.id,w);if(null==w){k=null;break}k=q+w}}if(e)for(b=u(h),c=b.next();!c.done;c=b.next())c=c.value.id,a.F.includes(c)||a.F.push(c);else a.F=h.map(function(y){return y.id});return null!=f?{periods:h,duration:f+g,Ki:!1}:{periods:h,duration:k,Ki:!0}} +function Nw(a){var b=Array.from(a.D.keys()).filter(function(h){return!a.F.includes(h)});b=u(b);for(var c=b.next();!c.done;c=b.next()){c=c.value;for(var d=!0,e=u(a.D.get(c)),f=e.next();!f.done;f=e.next()){f=f.value;var g=a.s.get(f);g&&(g.segmentIndex&&0!=g.segmentIndex.getNumReferences()?d=!1:(a.m&&a.m.Ii(g,c),a.s.delete(f)))}d&&a.D.delete(c)}}function Ow(a,b){b=new Set(b.map(function(e){return e.id}));for(var c=u(a.C.keys()),d=c.next();!d.done;d=c.next())d=d.value,b.has(d)||a.C.delete(d)} +function Uw(a,b,c,d){b.za=Vw(a,d.node,null,c);b.va=d;b.za.wb=b.wb;b.za.id||(b.za.id="__shaka_period_"+d.start);var e=Od(d.node,"EventStream");c=b.presentationTimeline.Jb();e=u(e);for(var f=e.next();!f.done;f=e.next())Ww(a,d.start,d.duration,f.value,c);c=Od(d.node,"SupplementalProperty");c=u(c);for(e=c.next();!e.done;e=c.next())if(e=e.value,"urn:mpeg:dash:urlparam:2014"==e.attributes.schemeIdUri&&(e=Xw(a,e)))b.Nb=e;c=Od(d.node,"AdaptationSet").map(function(r,t){return Yw(a,b,t,r)}).filter(Bf);if(b.pc){e= +[];f=u(c);for(var g=f.next();!g.done;g=f.next()){g=u(g.value.Xl);for(var h=g.next();!h.done;h=g.next())e.push(h.value)}if(e.length!=(new Set(e)).size)throw new V(2,4,4018);}e=new Map;f=u(c);for(g=f.next();!g.done;g=f.next())for(g=u(g.value.lk),h=g.next();!h.done;h=g.next()){var k=u(h.value);h=k.next().value;k=k.next().value;e.set(h,k)}if(e.size)for(f=null,g=u(c),h=g.next();!h.done;h=g.next()){h=h.value;k=[];for(var l=u(h.streams),m=l.next(),n={};!m.done;n={ai:void 0},m=l.next())if(n.ai=m.value,e.has(n.ai.originalId)){f|| +(f=Od(d.node,"AdaptationSet").map(function(r,t){return Yw(a,b,t,r)}).filter(Bf));m=u(f);for(var q=m.next();!q.done;q=m.next())if(q=q.value.streams.find(function(r){return function(t){return t.originalId==r.ai.originalId}}(n)))q.dependencyStream=e.get(q.originalId),q.originalId+=q.dependencyStream.originalId,k.push(q)}k.length&&h.streams.push.apply(h.streams,x(k))}d=c.filter(function(r){return!r.li});c=c.filter(function(r){return r.li});if(!a.g.disableIFrames)for(c=u(c),e=c.next();!e.done;e=c.next())for(e= +e.value,f=e.li.split(" "),g=u(d),h=g.next();!h.done;h=g.next())if(h=h.value,f.includes(h.id))for(h=u(h.streams),k=h.next();!k.done;k=h.next())kg(k.value,e.streams);c=Zw(a.g.disableAudio,d,"audio");e=Zw(a.g.disableVideo,d,"video");f=Zw(a.g.disableText,d,rc);d=Zw(a.g.disableThumbnails,d,"image");if(0===e.length&&0===c.length)throw new V(2,4,4004);return{id:b.za.id,audioStreams:c,videoStreams:e,textStreams:f,imageStreams:d}} +function Zw(a,b,c){return a||!b.length?[]:b.reduce(function(d,e){if(e.contentType!=c)return d;d.push.apply(d,x(e.streams));return d},[])} +function Yw(a,b,c,d){function e(L){var M=L.attributes["dvb:fontFamily"];L=L.attributes["dvb:url"];M&&L&&(L=lc(b.ua.jb(),[L],b.Nb()),a.j.addFont(M,L[0]))}function f(L){switch(L){case 1:case 5:case 6:case 7:return"srgb";case 9:return"rec2020";case 11:case 12:return"p3"}}function g(L){switch(L){case 1:case 6:case 13:case 14:case 15:return"SDR";case 16:return"PQ";case 18:return"HLG"}}b.ua=Vw(a,d,b.za,null);b.ua.position=c;var h=!1;c=Od(d,"Role");var k=c.map(function(L){return L.attributes.value}).filter(Bf), +l=void 0,m=b.ua.contentType==rc;m&&(l="subtitle");c=u(c);for(var n=c.next();!n.done;n=c.next()){n=n.value;var q=n.attributes.schemeIdUri;if(null==q||"urn:mpeg:dash:role:2011"==q)switch(n=n.attributes.value,n){case "main":h=!0;break;case "caption":case "subtitle":l=n}}var r=Od(d,"EssentialProperty");c=null;var t=!1;n=null;q=!1;r=u(r);for(var w=r.next();!w.done;w=r.next()){w=w.value;var v=w.attributes.schemeIdUri;if("http://dashif.org/guidelines/trickmode"==v)c=w.attributes.value;else if("urn:mpeg:mpegB:cicp:TransferCharacteristics"== +v)var y=g(parseInt(w.attributes.value,10));else if("urn:mpeg:mpegB:cicp:ColourPrimaries"==v)var z=f(parseInt(w.attributes.value,10));else"urn:mpeg:mpegB:cicp:MatrixCoefficients"!=v&&("urn:mpeg:dash:ssr:2023"==v&&a.g.dash.enableFastSwitching?t=!0:"urn:dvb:dash:fontdownload:2014"==v?e(w):"urn:mpeg:dash:urlparam:2014"==v?(n=Xw(a,w))||(q=!0):q=!0)}if(q)return null;var A=null;q=Od(d,"SupplementalProperty");q=u(q);for(r=q.next();!r.done;r=q.next())r=r.value,w=r.attributes.schemeIdUri,"http://dashif.org/guidelines/last-segment-number"== +w?A=parseInt(r.attributes.value,10)-1:"urn:mpeg:mpegB:cicp:TransferCharacteristics"==w?y=g(parseInt(r.attributes.value,10)):"urn:mpeg:mpegB:cicp:ColourPrimaries"==w?z=f(parseInt(r.attributes.value,10)):"urn:dvb:dash:fontdownload:2014"==w?e(r):"urn:mpeg:dash:urlparam:2014"==w&&(n=Xw(a,r));n&&(b.Nb=n);n=Od(d,"Accessibility");var B=new Map,D;n=u(n);for(q=n.next();!q.done;q=n.next())if(r=q.value,q=r.attributes.schemeIdUri,r=r.attributes.value,"urn:scte:dash:cc:cea-608:2015"!=q||a.g.disableText)if("urn:scte:dash:cc:cea-708:2015"!= +q||a.g.disableText)"urn:mpeg:dash:role:2011"==q?null!=r&&(k.push(r),"captions"==r&&(l="caption")):"urn:tva:metadata:cs:AudioPurposeCS:2007"==q&&("1"==r?D="visually impaired":"2"==r?D="hard of hearing":"9"==r&&(D="spoken subtitles"));else if(q=1,null!=r)for(r=u(r.split(";")),w=r.next();!w.done;w=r.next()){v=w.value;var G=w=void 0;v.includes("=")?(v=v.split("="),w="svc"+v[0],G=v[1].split(",")[0].split(":").pop()):(w="svc"+q,q++,G=v);B.set(w,yc(G))}else B.set("svc1","und");else if(q=1,null!=r)for(r= +r.split(";"),w=u(r),v=w.next();!v.done;v=w.next()){G=v.value;var C=v=void 0;G.includes("=")?(G=G.split("="),v=G[0].startsWith("CC")?G[0]:"CC"+G[0],C=G[1]||"und"):(v="CC"+q,2==r.length?q+=2:q++,C=G);B.set(v,yc(C))}else B.set("CC1","und");n=Od(d,"ContentProtection");var E=Lu(n,a.g.ignoreDrmInfo,a.g.dash.keySystemsByURI);b.ua.encrypted=0a.J)){var c=a.J;0<=a.g.updatePeriod&&(c=a.g.updatePeriod);a.K.X(Math.max(c-b,Mc(a.ra)))}} +function Vw(a,b,c,d){c=c||{contentType:"",mimeType:"",codecs:"",emsgSchemeIdUris:[],frameRate:void 0,pixelAspectRatio:void 0,Jf:null,audioSamplingRate:null,wb:0,Yf:0,encrypted:!1};d=d||c.jb;var e=b.attributes.id,f=b.attributes.supplementalId,g=Od(b,"BaseURL"),h,k=!1;if(a.h)for(var l=u(g),m=l.next();!m.done;m=l.next()){var n=m.value;m=n.attributes.serviceLocation;n=Qd(n);m&&n&&(Lv(a.h,e,m,n),k=!0)}k&&a.h||(h=g.map(Qd));l=b.attributes.contentType||c.contentType;m=b.attributes.mimeType||c.mimeType;n= +um([b.attributes.codecs||c.codecs]).join(",");var q=Vd(b,"frameRate",ge)||c.frameRate,r=b.attributes.sar||c.pixelAspectRatio,t=ex(Od(b,"InbandEventStream"),c.emsgSchemeIdUris),w=Od(b,"AudioChannelConfiguration");w=fx(w)||c.Jf;var v=Vd(b,"audioSamplingRate",ce)||c.audioSamplingRate;l||(l=ax(m,n));var y=Sd(b,"SegmentBase"),z=Sd(b,"SegmentTemplate"),A=y?Vd(y,"availabilityTimeOffset",ee)||0:0,B=z?Vd(z,"availabilityTimeOffset",ee)||0:0,D=g&&g.length?Vd(g[0],"availabilityTimeOffset",ee)||0:0;A=c.wb+D+A+ +B;B=null;(D=Sd(b,"SegmentSequenceProperties"))&&(D=Sd(D,"SAP"))&&(B=Vd(D,"cadence",ae));D=b.attributes.label;var G=Od(b,"Label");G&&G.length&&(G=G[0],Pd(G)&&(D=Pd(G)));return{jb:function(){return lc(d(),g.length?a.h&&k?Mv(a.h,e):h?h:[]:[])},Md:y||c.Md,xc:Sd(b,"SegmentList")||c.xc,Kc:z||c.Kc,Qf:Sd(b,"ProducerReferenceTime")||c.Qf,width:Vd(b,"width",ce)||c.width,height:Vd(b,"height",ce)||c.height,contentType:l,mimeType:m,codecs:n,frameRate:q,pixelAspectRatio:r,emsgSchemeIdUris:t,id:f||e,originalId:e, +language:b.attributes.lang,Jf:w,audioSamplingRate:v,wb:A,vf:null,Yf:B||c.Yf,label:D||null,encrypted:!1}}function ex(a,b){b=b.slice();a=u(a);for(var c=a.next();!c.done;c=a.next())c=c.value.attributes.schemeIdUri,b.includes(c)||b.push(c);return b} +function fx(a){a=u(a);for(var b=a.next();!b.done;b=a.next()){b=b.value;var c=b.attributes.schemeIdUri;if(c&&(b=b.attributes.value))switch(c){case "urn:mpeg:dash:outputChannelPositionList:2012":return b.trim().split(/ +/).length;case "urn:mpeg:dash:23003:3:audio_channel_configuration:2011":case "urn:dts:dash:audio_channel_configuration:2012":b=parseInt(b,10);if(!b)continue;return b;case "tag:dolby.com,2015:dash:audio_channel_configuration:2015":c=[2,1,2,2,2,2,1,2,2,1,1,1,1,2,1,1,2,2];b=parseInt(b, +16);if(!b)continue;for(var d=0,e=0;ec}).map(Qd).filter(Bf);return d.length?lc(a.B,d):[]}S("shaka.dash.DashParser",zw);Bi("application/dash+xml",function(){return new zw});Bi("video/vnd.mpeg.dash.mpd",function(){return new zw});function hx(){}S("shaka.dependencies",hx);hx.has=function(a){return ix.has(a)};hx.add=function(a,b){if(!jx[a])throw Error(a+" is not supported");a==kx?Uc("mux.js","mux.js is no longer used in Shaka Player."):ix.set(a,function(){return b})};var kx="muxjs",jx={Hn:kx,ISOBoxer:"ISOBoxer"};hx.Allowed=jx;var ix=new Map([["ISOBoxer",function(){return window.ISOBoxer}]]);function lx(){this.j=new Qb(function(){return navigator.userAgent.match(/Smart( ?|_)TV/i)||navigator.userAgent.match(/Android ?TV/i)?"TV":navigator.userAgentData?navigator.userAgentData.mobile?"MOBILE":"DESKTOP":/(?:iPhone|iPad|iPod)/.test(navigator.userAgent)?"MOBILE":navigator.userAgentData&&navigator.userAgentData.platform?"android"==navigator.userAgentData.platform.toLowerCase()?"MOBILE":"DESKTOP":navigator.userAgent.includes("Android")?"MOBILE":"DESKTOP"});this.l=new Qb(function(){return navigator.vendor.includes("Apple")&& +(navigator.userAgent.includes("Version/")||navigator.userAgent.includes("OS/"))?"WEBKIT":navigator.userAgent.includes("Edge/")?"EDGE":navigator.userAgent.includes("Chrome/")?"CHROMIUM":navigator.userAgent.includes("Firefox/")?"GECKO":"UNKNOWN"})}function Ei(){var a=window.ManagedMediaSource||window.MediaSource;return a&&a.isTypeSupported?!0:!1}p=lx.prototype;p.ic=function(){return!!navigator.mediaCapabilities};p.Ia=function(){return this.j.value()};p.Na=function(){return this.l.value()};p.xe=function(){return!1}; +p.qj=function(){return!1};p.wf=function(){return!1};p.rj=function(){return!1};p.we=function(){return!1};p.kd=function(){return!0};p.ld=function(){return!0};p.Be=function(){return!0};p.wj=function(){return 0};p.mc=function(){return Promise.resolve({width:Infinity,height:Infinity})};p.Ij=function(){return!1};p.Zh=function(){return!1}; +p.ab=function(a){var b=this.Ia();if("TV"===b||"CONSOLE"===b||"CAST"===b)a.ads.customPlayheadTracker=!0,a.ads.skipPlayDetection=!0,a.ads.supportsMultipleMediaElements=!1;return a};p.di=function(){return!!window.indexedDB};p.oj=function(){return[]};function Gn(a){Rb();return void 0!==window.matchMedia&&window.matchMedia("(color-gamut: p3)").matches?a?"HLG":"PQ":"SDR"}p.dg=function(){return!1};p.ej=function(){return!1};p.Oh=function(){return!1};p.ci=function(){return!0};p.fj=function(){return!1}; +p.Qj=function(){return!0};p.toString=function(){return"Device: "+this.Qb()+" v"+this.Ga()+"; Type: "+this.Ia()};function mx(){lx.call(this);this.g=new Qb(function(){var a=navigator.userAgent.match(/Version\/(\d+)/);return a?parseInt(a[1],10):(a=navigator.userAgent.match(/OS (\d+)(?:_\d+)?/))?parseInt(a[1],10):null});this.h=new Qb(function(){return/(?:iPhone|iPad|iPod)/.test(navigator.userAgent)||1this.g&&a.push("opus");return a};p.ej=function(){return!0};p.fj=function(){return 3===this.Ga()};navigator.userAgent.includes("Tizen")&&(Tb=function(){return new vx});function wx(){lx.apply(this,arguments)}pa(wx,lx);wx.prototype.Ga=function(){return null};wx.prototype.Qb=function(){return"Vizio"};wx.prototype.Ia=function(){return"TV"};wx.prototype.ic=function(){return!1};navigator.userAgent.includes("VIZIO SmartCast")&&(Tb=function(){return new wx});function xx(){lx.call(this);this.h=new Qb(function(){return navigator.userAgent.includes("DT_STB_BCM")});this.g=new Qb(function(){if(navigator.userAgent.includes("DT_STB_BCM"))return 11;var a=navigator.userAgent.match(/Version\/(\d+)/);return a?parseInt(a[1],10):(a=navigator.userAgent.match(/OS (\d+)(?:_\d+)?/))?parseInt(a[1],10):null})}pa(xx,lx);p=xx.prototype;p.Ga=function(){return this.g.value()};p.Qb=function(){return"WebKit STB"};p.Ia=function(){return"TV"};p.Na=function(){return"WEBKIT"}; +p.ic=function(){return!1};p.kd=function(){var a=this.g.value();return null!==a?15<=a:!0};p.mc=function(){return Promise.resolve({width:window.screen.width*window.devicePixelRatio,height:window.screen.height*window.devicePixelRatio})};p.ci=function(){return!this.h.value()}; +if(navigator.userAgent.includes("DT_STB_BCM")||navigator.userAgent.includes("DT_STB_BCM")||!(!(navigator.vendor||"").includes("Apple")||/(?:iPhone|iPad|iPod)/.test(navigator.userAgent)||1b.length||"data"!=b[0])throw new V(2,1,1004,a);b=b.slice(1).join(":").split(",");if(2>b.length)throw new V(2,1,1004,a);var c=b[0];a=window.decodeURIComponent(b.slice(1).join(","));b=c.split(";");c=b[0];var d=!1;1",gc(b),""].join("\n")))d.licenseServerUri=Ku(b);d=Promise.resolve(d)}else d=Promise.resolve(null);return d}).set("urn:uuid:3d5e6d35-9b9a-41e8-b843-dd3c6e72c42c",function(b){var c=Hx(b,"METHOD");if(["SAMPLE-AES","SAMPLE-AES-CTR"].includes(c)){var d="cenc";"SAMPLE-AES"==c&&(d="cbcs");c=Hx(b,"URI");c=Yx(c.split("?")[0]);c=Kb(c.data);d=mc("com.huawei.wiseplay",d,[{initDataType:"cenc",initData:c}]);(b=Gx(b,"KEYID"))&&d.keyIds.add(b.toLowerCase().substr(2)); +b=Promise.resolve(d)}else b=Promise.resolve(null);return b});this.Za=new Set;this.i=new Map;this.l=null;this.D="";this.Ka=new Rx;this.J=-1;this.Z=Infinity;this.Y=this.vc=this.Ta=!1;this.C=new yf(function(){if(a.R&&!a.g.continueLoadingWhenPaused&&(a.P.Ca(a.R,"timeupdate"),a.R.paused)){a.P.qa(a.R,"timeupdate",function(){return ay(a)});return}ay(a)});this.sa=by;this.m=null;this.Ma=0;this.s=Infinity;this.gb=this.Ha=this.O=0;this.U=new Pg;this.G=new Map;this.H=new Map;this.ra=new Map;this.ea=new Map;this.K= +new Map;this.na=new Map;this.oa=new Map;this.tc=this.$=!1;this.eb=new Lc(5);this.j=null;this.N=!0;this.P=new Oc;this.u=this.R=null;this.Kb=function(){return!1}}p=Zx.prototype;p.configure=function(a,b){var c=this.h&&a.updatePeriod!=this.g.updatePeriod&&0<=a.updatePeriod;this.g=a;b&&(this.Kb=b);this.j&&this.j.configure(this.g);c&&this.m&&this.m.presentationTimeline.T()&&this.C.Ja()}; +p.start=function(a,b){var c=this,d;return Q(function(e){return 1==e.g?(c.h=b,c.$=b.isLowLatencyMode(),F(e,cy(c,[a]).promise,2)):3!=e.g?(d=e.h,c.D=d.uri,F(e,dy(c,d.data),3)):e.return(c.m)})}; +p.stop=function(){this.C&&(this.C.stop(),this.C=null);var a=[];this.U&&(a.push(this.U.destroy()),this.U=null);this.g=this.h=null;this.Za.clear();this.m=null;this.i.clear();this.I.clear();this.H.clear();this.B.clear();this.ra.clear();this.ea.clear();this.K.clear();this.na.clear();this.oa.clear();this.j&&this.j.destroy();this.P&&(this.P.release(),this.P=null);return Promise.all(a)}; +p.update=function(){var a=this,b,c,d,e,f,g,h,k,l,m,n,q;return Q(function(r){if(1==r.g){if(!ey(a))return r.return();b=[];c=Array.from(a.i.values());a.s=Infinity;a.m.gapCount=0;d=c.filter(function(t){return t.stream.segmentIndex});e=u(d);for(f=e.next();!f.done;f=e.next())g=f.value,b.push(fy(a,g));return F(r,Promise.all(b),2)}gy(a,d.map(function(t){return t.stream}));h=d.some(function(t){return 0==t.ee});d.length&&!h&&(k=hy,iy(a,k.$j),l=d.map(function(t){return t.rc}),a.l.vb(Math.min.apply(Math,x(l))), +a.h.updateDuration());h&&jy(a);m=u(d);for(n=m.next();!n.done;n=m.next())q=n.value,q.stream.isAudioMuxedInVideo||!q.stream.segmentIndex||bg(q.stream.segmentIndex)||a.h.disableStream(q.stream);H(r)})};function ky(a,b){return ey(a)?a.L.get(b.type):b.Ef} +function fy(a,b){var c,d,e,f,g,h,k,l,m,n,q,r,t,w,v,y,z,A,B,D,G,C,E,I,K,J,L,M,O,N,P,R,T,ca,Y,Ma,Na;return Q(function(Ea){switch(Ea.g){case 1:if(b.stream.isAudioMuxedInVideo)return Ea.return();c=[];d=u(b.S());for(e=d.next();!e.done;e=d.next())f=e.value,g=new qb(f),h=g.g,b.df&&(0<=b.Vb&&h.add("_HLS_msn",String(b.Vb)),0<=b.Wb&&h.add("_HLS_part",String(b.Wb))),b.ef&&h.add("_HLS_skip","YES"),Hb(h)&&vb(g,wb(h.toString())),c.push(g.toString());ta(Ea,2);return F(Ea,cy(a,c,!0).promise,4);case 4:k=Ea.h;wa(Ea, +3);break;case 2:throw l=xa(Ea),a.h&&a.h.disableStream(b.stream),l;case 3:if(!b.stream.segmentIndex)return Ea.return();m=Sx(a.Ka,k.data);if(1!=m.type)throw new V(2,4,4017);n=k.uri;n==k.originalUri||b.S().includes(n)||b.Tf.push(n);q=Kx(m.ma,"EXT-X-DEFINE");r=ly(a,q,n);t=b.stream;w=ky(a,b);return F(Ea,my(a,m,t.mimeType,b.S,r),5);case 5:v=Ea.h;y=v.keyIds;z=v.drmInfos;A=v.encrypted;B=v.ti;t.encrypted||!A||B||(t.encrypted=!0);D=function(va,Ka){return va.size===Ka.size&&[].concat(x(va)).every(function(Pa){return Ka.has(Pa)})}; +D(t.keyIds,y)||(t.keyIds=y,t.drmInfos=z,a.h.newDrmInfo(t));G=ny(a,m,w,r,b.S,b.type);C=G.segments;if(E=G.bandwidth)t.bandwidth=E;I=cm(t);K=u(C);for(J=K.next();!J.done;J=K.next())L=J.value,L.ha&&(L.ha.Cd=I);t.segmentIndex.pe(C,a.l.Jb());C.length&&(M=Nx(m.ma,"EXT-X-MEDIA-SEQUENCE",0),N=(O=Mx(m.ma,"EXT-X-SKIP"))?Number(Gx(O,"SKIPPED-SEGMENTS")):0,P=oy(M,C),R=P.Vb,T=P.Wb,b.Vb=R+N,b.Wb=T,ca=w.get(M),t.segmentIndex.hb(ca));if(Y=bg(t.segmentIndex))b.dd=Y.startTime,Ma=C[C.length-1],b.rc=Ma.endTime;if(Na=Mx(m.ma, +"EXT-X-ENDLIST"))b.ee=!0;py(a,m);qy(a,m.ma,t.type,r,b.S);H(Ea)}})}p.onExpirationUpdated=function(){};p.onInitialVariantChosen=function(){};p.banLocation=function(a){this.j&&this.j.banLocation(a)};p.setMediaElement=function(a){this.R=a}; +function ry(a,b,c){c=void 0===c?!1:c;for(var d=-1==a.J,e=u(b),f=e.next();!f.done;f=e.next()){f=f.value;var g=f.stream.segmentIndex,h=ky(a,f);if(g=bg(g)){h=u(h);for(var k=h.next();!k.done;k=h.next()){k=u(k.value);var l=k.next().value;if(k.next().value==g.startTime){d&&(a.J=Math.max(a.J,l));f.Og=l;break}}}}if(!(0>a.J))for(b=u(b),d=b.next();!d.done;d=b.next())if(d=d.value,sy(a,d.type)||c)if(e=d.stream.segmentIndex)if(f=a.J-d.Og,0Math.abs(c))){b.dd+=c;b.rc+=c;a=ky(a,b);for(var d=u(a),e=d.next();!e.done;e=d.next()){var f=u(e.value);e=f.next().value;f=f.next().value;a.set(e,f+c)}b.S()}} +function dy(a,b){var c,d,e,f,g,h,k,l,m,n,q,r,t,w,v,y,z,A,B,D,G,C,E,I,K,J,L,M,O,N,P,R,T,ca,Y,Ma,Na,Ea,va,Ka,Pa,za,ia;return Q(function(Aa){switch(Aa.g){case 1:c=uc;d=Sx(a.Ka,b);e=Kx(d.ma,"EXT-X-DEFINE");f=[];g=[];h=[];a.l=new ql(null,0);a.l.jd(!0);k=function(){return[a.D]};l=null;m=new Map;if(1==d.type)return a.N=!1,R=Kx(d.ma,"EXT-X-DEFINE"),m=ly(a,R,a.D),l=c.Ea,T="",ca=new Map,F(Aa,vy(a,a.F++,m,d,k,"",l,T,!0,"Media Playlist",null,ca,null,!1,null,!1),7);wy(a,e);n=Kx(d.ma,"EXT-X-MEDIA");q=Kx(d.ma,"EXT-X-STREAM-INF"); +r=Kx(d.ma,"EXT-X-IMAGE-STREAM-INF");t=Kx(d.ma,"EXT-X-I-FRAME-STREAM-INF");w=Kx(d.ma,"EXT-X-SESSION-KEY");v=Kx(d.ma,"EXT-X-SESSION-DATA");y=Kx(d.ma,"EXT-X-CONTENT-STEERING");xy(a,v);return F(Aa,yy(a,y),4);case 4:if(!a.g.ignoreSupplementalCodecs){z=[];A=u(q);B=A.next();for(D={};!B.done;D={Oj:void 0},B=A.next())if(G=B.value,C=Gx(G,"SUPPLEMENTAL-CODECS"))D.Oj=C.split(/\s*,\s*/).map(function(eb){return eb.split("/")[0]}),E=G.attributes.map(function(eb){return function(fb){var mb=fb.name,xb=fb.value;"CODECS"== +mb&&(xb=eb.Oj.join(","),fb=fb.value.split(","),1d-2&&(e=Math.max(1,d-2));for(e=d-e;ea.u&&(c=Math.min(-a.u,c),a.u+=c);a.l.Fj(0);a.l.Th(c);a.l.jd(!1)} +function xz(a,b,c,d,e){var f=Mx(c,"EXT-X-MAP");if(!f)return null;var g=Hx(f,"URI"),h=Ox(d(),g,e);g=[h.toString(),Gx(f,"BYTERANGE","")].join("-");if(!a.ra.has(g)){var k=void 0,l=null,m=!1;c=u(c);for(var n=c.next();!n.done;n=c.next())n=n.value,"EXT-X-KEY"==n.name?(m=Hx(n,"METHOD"),Xy(m)&&n.idJ?1:0}),c=0;cm))continue}if(null==m){var r=Gx(g,"DURATION")||Gx(g,"PLANNED-DURATION");if(r){var t= +parseFloat(r);isNaN(t)||(m=l+t);if(0>k-f+t)continue}}var w=Gx(g,"CLASS")||"com.apple.quicktime.HLS",v="YES"==Gx(g,"END-ON-NEXT");if(null==m&&v){for(var y=c+1;yk){m=Math.max(0,B-f);break}}}if(null==m)continue}y=["CLASS","START-DATE","END-DATE","DURATION","END-ON-NEXT"];for(var D=[],G=u(g.attributes),C=G.next();!C.done;C=G.next()){var E=C.value;if(!y.includes(E.name)){var I= +Qx(E.value,d);if("X-ASSET-URI"==E.name||"X-ASSET-LIST"==E.name)I=Ox(e(),E.value,d)[0];D.push({key:E.name,description:"",data:I,mimeType:null,pictureType:null})}}if(1C)if(E){E=Vd(E,"t",ce);if(null==E)break;else if(I>=E)break;C=Math.ceil((E-I)/K)-1}else{if(Infinity==z)break;else if(I/v>=z)break;C=Math.ceil((z*v-I)/K)-1}for(E=0;E<=C;++E)D=I+K,B.push({start:I/v,end:D/v,ni:I}),I=D}v=B;y=u(y);for(z=y.next();!z.done;z=y.next())(z=Pz(a,w,z.value,v,t,l))&&("audio"!=z.type||a.g.disableAudio?"video"!=z.type||a.g.disableVideo?z.type!=rc||a.g.disableText||m.push(z):n.push(z):r.push(z))}q=[];r=u(0>1,c[1]=d<<7|b<<3|a>>1,c[2]=a<<7|8,c[3]=0,b=new Uint16Array(2),b[0]=(c[0]<<8)+c[1],b[1]=(c[2]<<8)+c[3],b[0].toString(16)+b[1].toString(16);c=new Uint8Array(2);c[0]=16|d>>1;c[1]=d<<7|b<<3; +b=new Uint16Array(1);b[0]=(c[0]<<8)+c[1];return b[0].toString(16)}function Tz(a,b){var c=0;"AACH"===a&&(c=5);b?0===c&&(c=(parseInt(b.substr(0,2),16)&248)>>3):(c=2,"AACH"===a&&(c=5));return"mp4a.40."+c}function Uz(a){var b=/00000001[0-9]7/.exec(a);return b.length&&a?"avc1."+a.substr(a.indexOf(b[0])+10,6):""} +function Vz(a,b,c,d,e){var f=d.attributes.Url.replace("{bitrate}",String(c.bandwidth));d=[];e=u(e);for(var g=e.next(),h={};!g.done;h={eg:void 0},g=e.next())h.eg=g.value,d.push(new zj(h.eg.start,h.eg.end,function(k){return function(){return lc(a.l,[f.replace("{start time}",String(k.eg.ni))])}}(h),0,null,b,0,0,c.mssPrivateData.duration));return d}S("shaka.mss.MssParser",Mz); +var Rz="AAC AACL AACH AACP AVC1 H264 TTML DFXP".split(" "),Qz=(new Map).set("CAPT","main").set("SUBT","alternate").set("DESC","main");Bi("application/vnd.ms-sstr+xml",function(){return new Mz});function Wz(a,b,c,d,e,f,g){if(200<=c&&299>=c&&202!=c||304==c)return{uri:e||d,originalUri:d,data:b,status:c,headers:a,fromCache:!!a["x-shaka-from-cache"],originalRequest:f};f=null;try{f=Zb(b)}catch(h){}throw new V(401==c||403==c?2:1,1,1001,d,c,f,a,g,e||d);};function Xz(){} +function Yz(a,b,c,d,e,f){var g=new Zz;fh(b.headers).forEach(function(m,n){g.append(n,m)});var h=new $z,k={Bi:!1,Tj:!1};a=aA(a,b,c,{body:b.body||void 0,headers:g,method:b.method,signal:h.signal,credentials:b.allowCrossSiteCredentials?"include":void 0},k,d,e,b.streamDataCallback,f.minBytesForProgressEvents||0);a=new Ig(a,function(){k.Bi=!0;h.abort();return Promise.resolve()});if(b=b.retryParameters.timeout){var l=new yf(function(){k.Tj=!0;h.abort()});l.X(b/1E3);a.finally(function(){l.stop()})}return a} +function aA(a,b,c,d,e,f,g,h,k){var l,m,n,q,r,t,w,v,y,z,A,B,D,G,C;return Q(function(E){switch(E.g){case 1:return l=bA,m=cA,q=new ArrayBuffer(0),t=r=0,w={},v=Date.now(),ta(E,2),F(E,l(a,d),4);case 4:n=E.h;w=dA(n.headers);g(w);if("HEAD"==d.method){E.A(5);break}z=(y=n.headers.get("Content-Length"))?parseInt(y,10):0;if(!n.body)return F(E,n.arrayBuffer(),9);A=n.clone().body.getReader();B=function(I){function K(){var J,L,M,O;return Q(function(N){switch(N.g){case 1:return ta(N,2),F(N,A.read(),4);case 4:J= +N.h;wa(N,3);break;case 2:return xa(N),N.return();case 3:if(J.done){N.A(5);break}r+=J.value.byteLength;if(!h){N.A(5);break}return F(N,h(J.value),5);case 5:L=Date.now();M=r-t;if(100=k||J.done)O=J.done?0:z-r,f(L-v,M,O),t=r,v=L;J.done?I.close():(I.enqueue(J.value),K());H(N)}})}K()};new m({start:B});return F(E,n.arrayBuffer(),8);case 8:q=E.h;E.A(5);break;case 9:q=E.h,D=Date.now(),f(D-v,q.byteLength,0);case 5:b.headers.Range&&(G=b.headers.Range.replace("bytes=","").split("-").filter(function(I){return I}).map(function(I){return parseInt(I, +10)}),2==G.length&&q.byteLength!=G[1]-G[0]+1&&ab("Payload length does not match range requested bytes",b,n));wa(E,3);break;case 2:C=xa(E);if(e.Bi)throw new V(1,1,7001,a,c);if(e.Tj)throw new V(1,1,1003,a,c);throw new V(1,1,1002,a,C,c);case 3:return E.return(Wz(w,q,n.status,a,n.url,b,c))}})}function dA(a){var b={};a.forEach(function(c,d){b[d.trim()]=c});return b} +function eA(){if(window.ReadableStream)try{new ReadableStream({})}catch(a){return!1}else return!1;if(window.Response){if(!(new Response("")).body)return!1}else return!1;return!(!window.fetch||"polyfill"in window.fetch||!window.AbortController)}S("shaka.net.HttpFetchPlugin",Xz);Xz.isSupported=eA;Xz.parse=Yz;var bA=window.fetch,$z=window.AbortController,cA=window.ReadableStream,Zz=window.Headers;eA()&&(Sg("http",Yz,2,!0),Sg("https",Yz,2,!0),Sg("blob",Yz,2,!0));function fA(){} +function gA(a,b,c,d,e,f){var g=new hA,h=Date.now(),k=0,l=new Promise(function(m,n){g.open(b.method,a,!0);g.responseType="arraybuffer";g.timeout=b.retryParameters.timeout;g.withCredentials=b.allowCrossSiteCredentials;g.onabort=function(){n(new V(1,1,7001,a,c))};var q=!1;g.onreadystatechange=function(){if(2==g.readyState&&!q){var t=iA(g);e(t);q=!0}};g.onload=function(t){var w=iA(g),v=g.response;try{d(Date.now()-h,t.loaded-k,0);var y=Wz(w,v,g.status,a,g.responseURL,b,c);m(y)}catch(z){n(z)}};g.onerror= +function(t){n(new V(1,1,1002,a,t,c))};g.ontimeout=function(){n(new V(1,1,1003,a,c))};g.onprogress=function(t){var w=Date.now(),v=f.minBytesForProgressEvents||0,y=t.loaded-k;if(100=v||t.lengthComputable&&t.loaded==t.total)d(w-h,y,4==g.readyState?0:t.total-t.loaded),k=t.loaded,h=w};for(var r in b.headers)g.setRequestHeader(r.toLowerCase(),b.headers[r]);g.send(b.body)});return new Ig(l,function(){g.abort();return Promise.resolve()})} +function iA(a){var b=a.getAllResponseHeaders().trim().split("\r\n");a={};b=u(b);for(var c=b.next();!c.done;c=b.next())c=c.value.split(": "),a[c[0].toLowerCase()]=c.slice(1).join(": ");return a}S("shaka.net.HttpXHRPlugin",fA);fA.parse=gA;var hA=window.XMLHttpRequest;Sg("http",gA,1,!0);Sg("https",gA,1,!0);Sg("blob",gA,1,!0);function jA(a,b,c,d,e){this.g=a;this.i=b;this.groupId=c;this.h=d;this.j=e}function kA(a){var b=a.cc(!1);return b?gc(b):a.S().map(function(c){return"{"+encodeURI(c.split("#xywh=")[0])+"}"}).join("")+":"+a.startByte+":"+a.endByte}function lA(a,b){return ym(a.g.S(),a.g.startByte,a.g.endByte,b.streaming.retryParameters)};function mA(){this.g=this.j=this.i=0;this.h=new Map;this.l=0}function nA(a,b){a.i+=b;var c=a.l;a.l++;a.h.set(c,b);return c}mA.prototype.close=function(a,b){if(this.h.has(a)){var c=this.h.get(a);this.h.delete(a);this.j+=c;this.g+=b}};function oA(a){return 0==a.i?0:a.j/a.i};function pA(a){var b=this;this.u=a;this.i=new Map;this.h=new dh(function(){return qA(b).catch(function(){})});this.j=[];this.s=function(){};this.m=function(){};this.g=new mA;this.l=!1}pA.prototype.destroy=function(){return this.h.destroy()};function rA(a,b,c){a.s=b;a.m=c}function qA(a){a.l=!0;var b=a.j.map(function(c){return c()});a.j=[];return Promise.all(b)} +pA.prototype.queue=function(a,b,c,d,e){var f=this;eh(this.h);var g=(this.i.get(a)||Promise.resolve()).then(function(){var h,k,l,m,n,q,r;return Q(function(t){if(1==t.g)return F(t,sA(f,b),2);h=t.h;if(f.h.g)throw new V(2,9,7001);if(d)for(m in k=Kb(h),l=new vh(k),l.data)n=Number(m),q=l.data[n],r=l.g[n],f.m(q,r);f.g.close(c,h.byteLength);f.s(oA(f.g),f.g.g);return t.return(e(h))})});this.i.set(a,g);return g}; +function tA(a,b,c,d,e,f){eh(a.h);var g=(a.i.get(b)||Promise.resolve()).then(function(){if(a.h.g)throw new V(2,9,7001);if(e){var h=Kb(c);h=new vh(h);for(var k in h.data){var l=Number(k);a.m(h.data[l],h.g[l])}}a.g.close(d,c.byteLength);a.s(oA(a.g),a.g.g);return f(c)});a.i.set(b,g)}function uA(a){return Q(function(b){return 1==b.g?F(b,Promise.all(a.i.values()),2):b.return(a.g.g)})} +function sA(a,b){var c,d,e,f;return Q(function(g){if(1==g.g)return c=bh,d=a.u.request(c,b),e=function(){return d.abort()},a.j.push(e),F(g,d.promise,2);f=g.h;sd(a.j,e);return g.return(f.data)})};function vA(a,b){var c=this;this.i=a;this.h=a.objectStore(b);this.g=new Hg;a.onabort=function(d){d.preventDefault();c.g.reject()};a.onerror=function(d){d.preventDefault();c.g.reject()};a.oncomplete=function(){c.g.resolve()}}vA.prototype.abort=function(){var a=this;return Q(function(b){if(1==b.g){try{a.i.abort()}catch(c){}ta(b,2);return F(b,a.g,4)}if(2!=b.g)return wa(b,0);xa(b);H(b)})}; +function wA(a,b){return new Promise(function(c,d){var e=a.h.openCursor();e.onerror=d;e.onsuccess=function(){var f;return Q(function(g){if(1==g.g){if(null==e.result)return c(),g.return();f=e.result;return F(g,b(f.key,f.value,f),2)}f.continue();H(g)})}})}vA.prototype.store=function(){return this.h};vA.prototype.promise=function(){return this.g};function xA(a){this.h=a;this.g=[]}xA.prototype.destroy=function(){return Promise.all(this.g.map(function(a){return a.abort()}))};function yA(a,b){return zA(a,b,"readwrite")}function zA(a,b,c){c=a.h.transaction([b],c);var d=new vA(c,b);a.g.push(d);d.promise().then(function(){sd(a.g,d)},function(){sd(a.g,d)});return d};function AA(a,b,c){this.h=new xA(a);this.i=b;this.g=c}p=AA.prototype;p.destroy=function(){return this.h.destroy()};p.hasFixedKeySpace=function(){return!0};p.addSegments=function(){return BA(this.i)};p.removeSegments=function(a,b){return CA(this,this.i,a,b)};p.getSegments=function(a){var b=this,c;return Q(function(d){if(1==d.g)return F(d,DA(b,b.i,a),2);c=d.h;return d.return(c.map(function(e){return b.Gi(e)}))})};p.addManifests=function(){return BA(this.g)}; +p.updateManifest=function(){return Promise.reject(new V(2,9,9016,"Cannot modify values in "+this.g))};function EA(a,b,c){a=yA(a.h,a.g);var d=a.store();d.get(b).onsuccess=function(){d.put(c,b)};return a.promise()}p.updateManifestExpiration=function(a,b){var c=yA(this.h,this.g),d=c.store();d.get(a).onsuccess=function(e){if(e=e.target.result)e.expiration=b,d.put(e,a)};return c.promise()};p.removeManifests=function(a,b){return CA(this,this.g,a,b)}; +p.getManifests=function(a){var b=this,c;return Q(function(d){if(1==d.g)return F(d,DA(b,b.g,a),2);c=d.h;return d.return(Promise.all(c.map(function(e){return b.Wd(e)})))})};p.getAllManifests=function(){var a=this,b,c;return Q(function(d){return 1==d.g?(b=zA(a.h,a.g,"readonly"),c=new Map,F(d,wA(b,function(e,f){var g;return Q(function(h){if(1==h.g)return F(h,a.Wd(f),2);g=h.h;c.set(e,g);H(h)})}),2)):3!=d.g?F(d,b.promise(),3):d.return(c)})};p.Gi=function(a){return a};p.Wd=function(a){return Promise.resolve(a)}; +function BA(a){return Promise.reject(new V(2,9,9011,"Cannot add new value to "+a))}p.add=function(a,b){var c=this,d,e,f,g,h,k,l;return Q(function(m){if(1==m.g){d=yA(c.h,a);e=d.store();f=[];g=u(b);h=g.next();for(k={};!h.done;k={Lh:void 0},h=g.next())l=h.value,k.Lh=e.add(l),k.Lh.onsuccess=function(n){return function(){f.push(n.Lh.result)}}(k);return F(m,d.promise(),2)}return m.return(f)})}; +function CA(a,b,c,d){a=yA(a.h,b);b=a.store();c=u(c);for(var e=c.next(),f={};!e.done;f={xh:void 0},e=c.next())f.xh=e.value,b.delete(f.xh).onsuccess=function(g){return function(){return d(g.xh)}}(f);return a.promise()} +function DA(a,b,c){var d,e,f,g,h,k,l;return Q(function(m){if(1==m.g){d=zA(a.h,b,"readonly");e=d.store();f={};g=[];h=u(c);k=h.next();for(l={};!k.done;l={Vf:void 0,zf:void 0},k=h.next())l.zf=k.value,l.Vf=e.get(l.zf),l.Vf.onsuccess=function(n){return function(){void 0==n.Vf.result&&g.push(n.zf);f[n.zf]=n.Vf.result}}(l);return F(m,d.promise(),2)}if(g.length)throw new V(2,9,9012,"Could not find values for "+g);return m.return(c.map(function(n){return f[n]}))})};function FA(a){this.g=new xA(a)}FA.prototype.destroy=function(){return this.g.destroy()};FA.prototype.getAll=function(){var a=this,b,c;return Q(function(d){return 1==d.g?(b=zA(a.g,"session-ids","readonly"),c=[],F(d,wA(b,function(e,f){c.push(f)}),2)):3!=d.g?F(d,b.promise(),3):d.return(c)})};FA.prototype.add=function(a){var b=yA(this.g,"session-ids"),c=b.store();a=u(a);for(var d=a.next();!d.done;d=a.next())c.add(d.value);return b.promise()}; +FA.prototype.remove=function(a){var b=this,c;return Q(function(d){return 1==d.g?(c=yA(b.g,"session-ids"),F(d,wA(c,function(e,f,g){a.includes(f.sessionId)&&g.delete()}),2)):F(d,c.promise(),0)})};function GA(){this.g=new Map}GA.prototype.destroy=function(){for(var a=[],b=u(this.g.values()),c=b.next();!c.done;c=b.next())a.push(c.value.destroy());this.g.clear();return Promise.all(a)};GA.prototype.init=function(){var a=this;HA.forEach(function(e,f){(e=e())&&a.g.set(f,e)});for(var b=[],c=u(this.g.values()),d=c.next();!d.done;d=c.next())b.push(d.value.init());return Promise.all(b)}; +function IA(a){var b=null;a.g.forEach(function(c,d){c.getCells().forEach(function(e,f){e.hasFixedKeySpace()||b||(b={path:{Ub:d,ib:f},ib:e})})});if(b)return b;throw new V(2,9,9013,"Could not find a cell that supports add-operations");}function JA(a,b){a.g.forEach(function(c,d){c.getCells().forEach(function(e,f){b({Ub:d,ib:f},e)})})} +function KA(a,b,c){a=a.g.get(b);if(!a)throw new V(2,9,9013,"Could not find mechanism with name "+b);b=a.getCells().get(c);if(!b)throw new V(2,9,9013,"Could not find cell with name "+c);return b}function LA(a,b){a.g.forEach(function(c){b(c.getEmeSessionCell())})}function MA(a){var b=Array.from(a.g.keys());if(!b.length)throw new V(2,9,9E3,"No supported storage mechanisms found");return a.g.get(b[0]).getEmeSessionCell()} +function NA(a){var b,c,d;return Q(function(e){return 1==e.g?(b=Array.from(a.g.values()),c=0b;if(!k||!l){m.A(3);break}return F(m,f.updateManifestExpiration(d.key(),b),3);case 3:return ya(m),F(m,e.destroy(),10);case 10:Ba(m,0);break;case 2:xa(m),m.A(3)}})}; +p.onInitialVariantChosen=function(){};p.banLocation=function(){};p.setMediaElement=function(){};Bi("application/x-offline-manifest",function(){return new hB});function iB(){}function jB(a,b){var c=aB(a);c&&"manifest"==c.g?(a={uri:a,originalUri:a,data:new ArrayBuffer(0),headers:{"content-type":"application/x-offline-manifest"},originalRequest:b},a=Lg(a)):a=c&&"segment"==c.g?kB(c.key(),c,b):Jg(new V(2,1,9004,a));return a} +function kB(a,b,c){var d=new GA;return Lg(void 0).bb(function(){return d.init()}).bb(function(){return KA(d,b.Ub(),b.ib())}).bb(function(e){return e.getSegments([b.key()])}).bb(function(e){return{uri:b,data:e[0].data,headers:{},originalRequest:c}}).finally(function(){return d.destroy()})}S("shaka.offline.OfflineScheme",iB);iB.plugin=jB;Sg("offline",jB);function lB(a,b,c){var d,e,f,g,h,k;return Q(function(l){switch(l.g){case 1:d=[];for(var m=[],n=u(c),q=n.next();!q.done;q=n.next()){q=q.value;for(var r=!1,t=u(m),w=t.next();!w.done;w=t.next())if(w=w.value,mB(w.info,q)){w.sessionIds.push(q.sessionId);r=!0;break}r||m.push({info:q,sessionIds:[q.sessionId]})}e=u(m);f=e.next();case 2:if(f.done){l.A(4);break}g=f.value;h=nB(a,b,g);return F(l,h,5);case 5:k=l.h;d=d.concat(k);f=e.next();l.A(2);break;case 4:return l.return(d)}})} +function nB(a,b,c){var d,e;return Q(function(f){switch(f.g){case 1:return d=new xh({uc:b,onError:function(){},Kf:function(){},onExpirationUpdated:function(){},onEvent:function(){}}),ta(f,2),d.configure(a),F(f,Fh(d,c.info.keySystem,c.info.licenseUri,c.info.serverCertificate,c.info.audioCapabilities,c.info.videoCapabilities),4);case 4:wa(f,3);break;case 2:return xa(f),F(f,d.destroy(),5);case 5:return f.return([]);case 3:return e=[],F(f,Promise.all(c.sessionIds.map(function(g){return Q(function(h){if(1== +h.g)return ta(h,2),F(h,Rh(d,g),4);if(2!=h.g)return e.push(g),wa(h,0);xa(h);H(h)})})),6);case 6:return F(f,d.destroy(),7);case 7:return f.return(e)}})}function mB(a,b){function c(d,e){return d.robustness==e.robustness&&d.contentType==e.contentType}return a.keySystem==b.keySystem&&a.licenseUri==b.licenseUri&&td(a.audioCapabilities,b.audioCapabilities,c)&&td(a.videoCapabilities,b.videoCapabilities,c)};function oB(a,b,c){var d=b.presentationTimeline.getDuration();b=pB(b);return{offlineUri:null,originalManifestUri:a,duration:d,size:0,expiration:Infinity,tracks:b,appMetadata:c,isIncomplete:!1}}function qB(a,b){var c=cB(new bB(a.Ub(),a.ib()),b),d=b.appMetadata||{};c=pB(c);return{offlineUri:a.toString(),originalManifestUri:b.originalManifestUri,duration:b.duration,size:b.size,expiration:b.expiration,tracks:c,appMetadata:d,isIncomplete:b.isIncomplete||!1}} +function pB(a){var b=[],c=hg(a.variants);c=u(c);for(var d=c.next();!d.done;d=c.next())b.push(Zf(d.value));a=u(a.textStreams);for(c=a.next();!c.done;c=a.next())b.push($f(c.value));return b};function rB(){this.g=new Map}function sB(a,b){var c=b.audio,d=b.video;c&&!d&&a.g.set(c.id,c.bandwidth||b.bandwidth);!c&&d&&a.g.set(d.id,d.bandwidth||b.bandwidth);if(c&&d){var e=c.bandwidth||393216,f=d.bandwidth||b.bandwidth-e;0>=f&&(f=b.bandwidth);a.g.set(c.id,e);a.g.set(d.id,f)}}function tB(a,b){a.g.set(b.id,b.bandwidth||2048)}function uB(a,b){a=a.g.get(b);null==a&&(a=0);return a};function vB(a){var b=this;if(a&&a.constructor!=X)throw new V(2,9,9008);this.g=this.h=null;a?(this.h=a.g,this.g=a.Hb()):(this.h=In(),this.g=new Rg,this.g.configure(this.h.networking));this.i=[];this.l=[];var c=!a;this.j=new dh(function(){var d,e,f,g,h;return Q(function(k){switch(k.g){case 1:return F(k,Promise.all(b.l.map(function(l){return qA(l)})),2);case 2:d=function(){};e=[];f=u(b.i);for(g=f.next();!g.done;g=f.next())h=g.value,e.push(h.then(d,d));return F(k,Promise.all(e),3);case 3:if(!c){k.A(4); +break}return F(k,b.g.destroy(),4);case 4:b.h=null,b.g=null,H(k)}})});this.m=1E9}function wB(){if(Ei(Rb()))a:{var a=u(HA.values());for(var b=a.next();!b.done;b=a.next())if(b=b.value,b=b()){b.destroy();a=!0;break a}a=!1}else a=!1;return a}p=vB.prototype;p.destroy=function(){return this.j.destroy()};p.configure=function(a,b){2==arguments.length&&"string"==typeof a&&(a=on(a,b));return Nn(this.h,a)};p.getConfiguration=function(){var a=In();Nn(a,this.h,In());return a};p.Hb=function(){return this.g}; +p.store=function(a,b,c,d,e){var f=this,g=this.getConfiguration(),h=new pA(this.g);this.l.push(h);b=xB(this,a,b||{},d||[],e||[],function(){var k;return Q(function(l){if(1==l.g)return c?l.A(2):F(l,to(a,f.g,g.manifest.retryParameters),3);2!=l.g&&(c=l.h);k=Gi(a,c||null);return l.return(k())})},g,h);b=new Ig(b,function(){return qA(h)});b.finally(function(){sd(f.l,h)});return yB(this,b)}; +function xB(a,b,c,d,e,f,g,h){var k,l,m,n,q,r,t,w,v,y,z,A,B,D,G,C,E,I,K,J,L,M,O,N;return Q(function(P){switch(P.g){case 1:return zB(),l=k=null,m=new GA,r=q=n=null,ta(P,2,3),F(P,f(),5);case 5:return k=P.h,F(P,AB(a,b,k,g),6);case 6:t=P.h;BB(a);w=!t.presentationTimeline.T()&&!t.presentationTimeline.Zc();if(!w)throw new V(2,9,9005,b);v=u(d);y=v.next();case 7:if(y.done){P.A(9);break}z=y.value;return F(P,CB(a,z,t),10);case 10:A=P.h;t.imageStreams.push(A);BB(a);y=v.next();P.A(7);break;case 9:B=u(e),D=B.next(); +case 11:if(D.done)return Hh(g.drm.clearKeys,t.variants),E=t.variants.some(function(R){if(R.audio)for(var T=u(R.audio.drmInfos),ca=T.next();!ca.done;ca=T.next())if(ca.value.licenseServerUri.startsWith("data:"))return!0;if(R.video)for(R=u(R.video.drmInfos),T=R.next();!T.done;T=R.next())if(T.value.licenseServerUri.startsWith("data:"))return!0;return!1}),I=g.offline.usePersistentLicense,E&&(I=!1),F(P,a.sd(t,function(R){r=r||R},g,I),15);G=D.value;return F(P,DB(a,t,G.uri,G.language,G.kind,G.mime,G.codecs), +14);case 14:C=P.h;t.textStreams.push(C);BB(a);D=B.next();P.A(11);break;case 15:l=P.h;BB(a);if(r)throw r;return F(P,EB(t,l,g,I),16);case 16:return F(P,m.init(),17);case 17:return BB(a),F(P,IA(m),18);case 18:return n=P.h,BB(a),K=FB(l,t,b,c,g,h,I),J=K.Dl,L=K.ji,F(P,n.ib.addManifests([J]),19);case 19:M=P.h;BB(a);q=M[0];BB(a);if(r)throw r;return F(P,GB(a,L,q,J,h,g,n.ib,t,l,I),20);case 20:return BB(a),HB(t,J,l,I),F(P,n.ib.updateManifest(q,J),21);case 21:return BB(a),O=new $A("manifest",n.path.Ub,n.path.ib, +q),P.return(qB(O,J));case 3:return ya(P),F(P,m.destroy(),22);case 22:if(!k){P.A(23);break}return F(P,k.stop(),23);case 23:if(!l){P.A(25);break}return F(P,l.destroy(),25);case 25:Ba(P,0);break;case 2:N=xa(P);if(null==q){P.A(27);break}return F(P,IB(q),27);case 27:throw r||N;}})} +function GB(a,b,c,d,e,f,g,h,k,l){var m,n,q,r,t,w,v,y,z,A,B;return Q(function(D){switch(D.g){case 1:m={};n=0;q=function(){if(a.j.g||e.l)throw new V(2,9,7001);};r=function(G,C){var E,I,K,J,L,M,O,N,P;return Q(function(R){if(1==R.g){E=u(G);I=E.next();for(K={};!I.done;K={nc:void 0},I=E.next())K.nc=I.value,q(),J=lA(K.nc,f),L=K.nc.i,M=K.nc.h,O=function(T){return function(ca){var Y,Ma,Na,Ea;return Q(function(va){switch(va.g){case 1:Y=T.nc.g;Ma=Y.cc(!1);if(!Y.aesKey||Ma){va.A(2);break}return F(va,xm(ca,Y.aesKey, +T.nc.j),3);case 3:ca=va.h;case 2:return Na=kA(Y),F(va,g.addSegments([{data:ca}]),4);case 4:Ea=va.h,q(),m[Na]=Ea[0],n+=ca.byteLength,H(va)}})}}(K),N=K.nc.g,(P=N.cc(!1))?tA(e,K.nc.groupId,P,L,M,O):e.queue(K.nc.groupId,J,L,M,O);return F(R,uA(e),2)}q();if(!C||e.l)return R.A(0);HB(h,d,k,l);return F(R,g.updateManifest(c,d),0)})};t=!1;ta(D,2);if(!JB(h)||!t||KB(h)){D.A(4);break}return F(D,r(b.filter(function(G){return G.h}),!0),5);case 5:return q(),b=b.filter(function(G){return!G.h}),w=m,v=n,m={},n=0,F(D, +LB(g,c,d,w,v,function(){return BB(a)}),6);case 6:q();case 4:if(t){D.A(7);break}return F(D,r(b,!1),8);case 8:return q(),y=m,z=n,m={},n=0,F(D,LB(g,c,d,y,z,function(){return q()}),9);case 9:q();case 7:wa(D,0);break;case 2:return A=xa(D),B=Object.values(m),F(D,g.removeSegments(B,function(){}),10);case 10:throw A;}})} +function IB(a){var b,c,d,e;return Q(function(f){switch(f.g){case 1:return b=new GA,F(f,b.init(),2);case 2:return F(f,IA(b),3);case 3:return c=f.h,d=new $A("manifest",c.path.Ub,c.path.ib,a),F(f,b.destroy(),4);case 4:return e=new vB,F(f,e.remove(d.toString()),0)}})} +function LB(a,b,c,d,e,f){var g,h,k,l,m,n,q,r,t,w,v;return Q(function(y){switch(y.g){case 1:g=!1;ta(y,2);h=!0;k=u(c.streams);for(l=k.next();!l.done;l=k.next())for(m=l.value,n=u(m.segments),q=n.next();!q.done;q=n.next())r=q.value,t=r.pendingSegmentRefId?d[r.pendingSegmentRefId]:null,null!=t&&(r.dataKey=t,r.pendingSegmentRefId=void 0),t=r.pendingInitSegmentRefId?d[r.pendingInitSegmentRefId]:null,null!=t&&(r.initSegmentKey=t,r.pendingInitSegmentRefId=void 0),r.pendingSegmentRefId&&(h=!1),r.pendingInitSegmentRefId&& +(h=!1);c.size+=e;h&&(c.isIncomplete=!1);return F(y,a.updateManifest(b,c),4);case 4:g=!0;f();wa(y,0);break;case 2:return w=xa(y),F(y,IB(b),5);case 5:if(g){y.A(6);break}v=Object.values(d);return F(y,a.removeSegments(v,function(){}),6);case 6:throw w;}})} +function EB(a,b,c,d){var e,f,g,h,k,l,m,n,q,r,t,w,v,y,z,A,B,D,G,C,E,I,K,J,L,M,O,N,P,R;return Q(function(T){switch(T.g){case 1:return e={width:Infinity,height:Infinity},Gf(a,c.restrictions,e),F(T,Jf(b,a,d,c.drm.preferredKeySystems,c.drm.keySystemsMapping),2);case 2:f=[];g=c.preferredDecodingAttributes;h=c.preferredVideoCodecs;k=c.preferredAudioCodecs;l=c.preferredTextFormats;Ef(a,h,k,g,l);m=u(a.variants);for(n=m.next();!n.done;n=m.next())q=n.value,f.push(Zf(q));r=u(a.textStreams);for(t=r.next();!t.done;t= +r.next())w=t.value,f.push($f(w));v=u(a.imageStreams);for(y=v.next();!y.done;y=v.next())z=y.value,f.push(ag(z));return F(T,c.offline.trackSelectionCallback(f),3);case 3:A=T.h;B=a.presentationTimeline.getDuration();D=0;G=u(A);for(C=G.next();!C.done;C=G.next())E=C.value,I=E.bandwidth*B/8,D+=I;ta(T,4);return F(T,c.offline.downloadSizeCallback(D),6);case 6:K=T.h;if(!K)throw new V(2,9,9014);wa(T,5);break;case 4:J=xa(T);if(J instanceof V)throw J;throw new V(2,9,9015);case 5:L=new Set;M=new Set;O=new Set; +N=u(A);for(P=N.next();!P.done;P=N.next())R=P.value,"variant"==R.type&&L.add(R.id),"text"==R.type&&M.add(R.id),"image"==R.type&&O.add(R.id);a.variants=a.variants.filter(function(ca){return L.has(ca.id)});a.textStreams=a.textStreams.filter(function(ca){return M.has(ca.id)});a.imageStreams=a.imageStreams.filter(function(ca){return O.has(ca.id)});MB(a);H(T)}})} +function FB(a,b,c,d,e,f,g){var h=oB(c,b,d),k=e.offline.progressCallback;rA(f,function(t,w){h.size=w;k(h,t)},function(t,w){l&&g&&m==w&&Nh(a,"cenc",t)});var l=JB(b)&&!KB(b),m=null;l&&(m=NB.get(a.h.keySystem));for(var n=new rB,q=u(b.textStreams),r=q.next();!r.done;r=q.next())n.g.set(r.value.id,52);q=u(b.imageStreams);for(r=q.next();!r.done;r=q.next())tB(n,r.value);q=u(b.variants);for(r=q.next();!r.done;r=q.next())sB(n,r.value);f=OB(f,n,b,e);e=f.streams;f=f.ji;(n=a.h)&&g&&(n.initData=[]);return{Dl:{creationTime:Date.now(), +originalManifestUri:c,duration:b.presentationTimeline.getDuration(),size:0,expiration:a.be(),streams:e,sessionIds:g?Wh(a):[],drmInfo:n,appMetadata:d,isIncomplete:!0,sequenceMode:b.sequenceMode,type:b.type},ji:f}}function JB(a){return a.variants.some(function(b){var c=b.audio&&b.audio.encrypted;return b.video&&b.video.encrypted||c})} +function KB(a){return a.variants.some(function(b){return(b.video?b.video.drmInfos:[]).concat(b.audio?b.audio.drmInfos:[]).some(function(c){return c.initData&&c.initData.length})})}function HB(a,b,c,d){b.expiration=c.be();c=Wh(c);b.sessionIds=d?c:[];if(JB(a)&&d&&!c.length)throw new V(2,9,9007);}p.remove=function(a){return PB(this,QB(this,a))}; +function QB(a,b){var c,d,e,f,g,h;return Q(function(k){switch(k.g){case 1:zB();c=aB(b);if(null==c||"manifest"!=c.g)throw new V(2,9,9004,b);d=c;e=new GA;ua(k,2);return F(k,e.init(),4);case 4:return F(k,KA(e,d.Ub(),d.ib()),5);case 5:return f=k.h,F(k,f.getManifests([d.key()]),6);case 6:return g=k.h,h=g[0],F(k,Promise.all([RB(a,h,e),SB(f,d,h)]),2);case 2:return ya(k),F(k,e.destroy(),8);case 8:Ba(k,0)}})} +function TB(a,b){for(var c=[],d=u(a.streams),e=d.next();!e.done;e=d.next())e=e.value,b&&"video"==e.type?c.push({contentType:af(e.mimeType,e.codecs),robustness:a.drmInfo.videoRobustness}):b||"audio"!=e.type||c.push({contentType:af(e.mimeType,e.codecs),robustness:a.drmInfo.audioRobustness});return c}function RB(a,b,c){return Q(function(d){return F(d,UB(a.g,a.h.drm,c,b),0)})} +function SB(a,b,c){function d(){}var e=VB(c);qB(b,c);return Promise.all([a.removeSegments(e,d),a.removeManifests([b.key()],d)])}p.Wl=function(){return PB(this,WB(this))}; +function WB(a){var b,c,d,e,f,g,h,k,l,m;return Q(function(n){switch(n.g){case 1:return zB(),b=a.g,c=a.h.drm,d=new GA,e=!1,ua(n,2),F(n,d.init(),4);case 4:f=[],LA(d,function(q){return f.push(q)}),g=u(f),h=g.next();case 5:if(h.done){n.A(2);break}k=h.value;return F(n,k.getAll(),8);case 8:return l=n.h,F(n,lB(c,b,l),9);case 9:return m=n.h,F(n,k.remove(m),10);case 10:m.length!=l.length&&(e=!0);h=g.next();n.A(5);break;case 2:return ya(n),F(n,d.destroy(),11);case 11:Ba(n,3);break;case 3:return n.return(!e)}})} +p.list=function(){return PB(this,XB())};function XB(){var a,b,c;return Q(function(d){switch(d.g){case 1:return zB(),a=[],b=new GA,ua(d,2),F(d,b.init(),4);case 4:return c=Promise.resolve(),JA(b,function(e,f){c=c.then(function(){var g;return Q(function(h){if(1==h.g)return F(h,f.getAllManifests(),2);g=h.h;g.forEach(function(k,l){k=qB(new $A("manifest",e.Ub,e.ib,l),k);a.push(k)});H(h)})})}),F(d,c,2);case 2:return ya(d),F(d,b.destroy(),6);case 6:Ba(d,3);break;case 3:return d.return(a)}})} +function AB(a,b,c,d){var e,f,g,h,k;return Q(function(l){if(1==l.g)return e=null,f=a.g,g={networkingEngine:f,filter:function(){return Promise.resolve()},makeTextStreamsForClosedCaptions:function(){},onTimelineRegionAdded:function(){},onEvent:function(){},onError:function(m){e=m},isLowLatencyMode:function(){return!1},updateDuration:function(){},newDrmInfo:function(){},onManifestUpdated:function(){},getBandwidthEstimate:function(){return d.abr.defaultBandwidthEstimate},onMetadata:function(){},disableStream:function(){}, +addFont:function(){}},c.configure(d.manifest),BB(a),F(l,c.start(b,g),2);if(3!=l.g)return h=l.h,BB(a),k=YB(h),F(l,Promise.all(kb(k,function(m){return m.createSegmentIndex()})),3);BB(a);if(e)throw e;return l.return(h)})} +function CB(a,b,c){var d,e,f,g,h,k,l,m,n,q,r,t,w,v,y;return Q(function(z){switch(z.g){case 1:return F(z,ZB(a,b),2);case 2:d=z.h;if("text/vtt"!=d)throw new V(1,2,2017,b);return F(z,$B(b,a.g,a.h.streaming.retryParameters),3);case 3:e=z.h;f=pf(d);if(!f)throw new V(2,2,2014,d);g=f();h={periodStart:0,segmentStart:0,segmentEnd:c.presentationTimeline.getDuration(),vttOffset:0};k=Kb(e);l=g.parseMedia(k,h,b,[]);m=[];n=u(l);q=n.next();for(r={};!q.done;r={lg:void 0,ud:void 0},q=n.next())r.ud=q.value,r.lg=null, +t=function(A){return function(){null==A.lg&&(A.lg=lc([b],[A.ud.payload]));return A.lg||[]}}(r),w=new zj(r.ud.startTime,r.ud.endTime,t,0,null,null,0,0,Infinity),r.ud.payload.includes("#xywh")&&(v=r.ud.payload.split("#xywh=")[1].split(","),4===v.length&&w.cg({height:parseInt(v[3],10),positionX:parseInt(v[0],10),positionY:parseInt(v[1],10),width:parseInt(v[2],10)})),m.push(w);y=d;if(!m.length){z.A(4);break}return F(z,to(m[0].S()[0],a.g,a.h.manifest.retryParameters),5);case 5:y=z.h;case 4:return z.return({id:a.m++, +originalId:null,groupId:null,createSegmentIndex:function(){return Promise.resolve()},segmentIndex:new Ol(m),mimeType:y||"",codecs:"",kind:"",encrypted:!1,drmInfos:[],keyIds:new Set,language:"und",originalLanguage:null,label:null,type:"image",primary:!1,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:null,roles:[],forced:!1,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,closedCaptions:null,tilesLayout:"1x1",accessibilityPurpose:null,external:!0,fastSwitching:!1,fullMimeTypes:new Set([af(y|| +"","")]),isAudioMuxedInVideo:!1,baseOriginalId:null})}})} +function DB(a,b,c,d,e,f,g){var h,k,l;return Q(function(m){if(1==m.g)return f?m.A(2):F(m,ZB(a,c),3);2!=m.g&&(f=m.h);h={id:a.m++,originalId:null,groupId:null,createSegmentIndex:function(){return Promise.resolve()},segmentIndex:Ql(0,b.presentationTimeline.getDuration(),[c]),mimeType:f||"",codecs:g||"",kind:e,encrypted:!1,drmInfos:[],keyIds:new Set,language:d,originalLanguage:d,label:null,type:rc,primary:!1,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:null,roles:[],forced:!1,channelsCount:null, +audioSamplingRate:null,spatialAudio:!1,closedCaptions:null,accessibilityPurpose:null,external:!0,fastSwitching:!1,fullMimeTypes:new Set([af(f||"",g||"")]),isAudioMuxedInVideo:!1,baseOriginalId:null};k=af(h.mimeType,h.codecs);l=qf(k);if(!l)throw new V(2,2,2014,f);return m.return(h)})} +function ZB(a,b){var c;return Q(function(d){switch(d.g){case 1:return ta(d,2),F(d,to(b,a.g,a.h.streaming.retryParameters),4);case 4:c=d.h;wa(d,3);break;case 2:xa(d);case 3:if(c)return d.return(c);throw new V(1,2,2011,b);}})}function $B(a,b,c){var d,e,f;return Q(function(g){if(1==g.g)return d=bh,e=Wg([a],c),e.method="GET",F(g,b.request(d,e).promise,2);f=g.h;return g.return(f.data)})} +p.sd=function(a,b,c,d){var e=this,f;return Q(function(g){return 1==g.g?(f=new xh({uc:e.g,onError:b,Kf:function(){},onExpirationUpdated:function(){},onEvent:function(){}}),f.configure(c.drm),F(g,Ch(f,a.variants,d),2)):3!=g.g?F(g,Ph(f),3):g.return(f)})}; +function OB(a,b,c,d){var e=new Map,f=YB(c),g=new Map;f=u(f);for(var h=f.next();!h.done;h=f.next()){h=h.value;var k=aC(a,b,c,h,d,e);g.set(h.id,k)}a=u(c.variants);for(b=a.next();!b.done;b=a.next())b=b.value,b.audio&&g.get(b.audio.id).variantIds.push(b.id),b.video&&g.get(b.video.id).variantIds.push(b.id);return{streams:Array.from(g.values()),ji:Array.from(e.values())}} +function aC(a,b,c,d,e,f){var g={id:d.id,originalId:d.originalId,groupId:d.groupId,primary:d.primary,type:d.type,mimeType:d.mimeType,codecs:d.codecs,frameRate:d.frameRate,pixelAspectRatio:d.pixelAspectRatio,hdr:d.hdr,colorGamut:d.colorGamut,videoLayout:d.videoLayout,kind:d.kind,language:d.language,originalLanguage:d.originalLanguage,label:d.label,width:d.width||null,height:d.height||null,encrypted:d.encrypted,keyIds:d.keyIds,segments:[],variantIds:[],roles:d.roles,forced:d.forced,channelsCount:d.channelsCount, +audioSamplingRate:d.audioSamplingRate,spatialAudio:d.spatialAudio,closedCaptions:d.closedCaptions,tilesLayout:d.tilesLayout,mssPrivateData:d.mssPrivateData,external:d.external,fastSwitching:d.fastSwitching,isAudioMuxedInVideo:d.isAudioMuxedInVideo},h=e.offline.numberOfParallelDownloads,k=0===h?d.id:0;bC(d,c.presentationTimeline.Jb(),function(l,m){var n=kA(l),q=void 0;if(!f.has(n)){var r=l.endTime-l.startTime;r=uB(b,d.id)*r;r=nA(a.g,r);f.set(n,new jA(l,r,k,!1,m))}l.ha&&(q=kA(l.ha),f.has(q)||(r=.5* +uB(b,d.id),r=nA(a.g,r),f.set(q,new jA(l.ha,r,k,!0,m))));g.segments.push({pendingInitSegmentRefId:q,initSegmentKey:q?0:null,startTime:l.startTime,endTime:l.endTime,appendWindowStart:l.appendWindowStart,appendWindowEnd:l.appendWindowEnd,timestampOffset:l.timestampOffset,tilesLayout:l.tilesLayout,pendingSegmentRefId:n,dataKey:0,mimeType:l.mimeType,codecs:l.codecs,thumbnailSprite:l.thumbnailSprite});0!==h&&(k=(k+1)%h)});return g} +function bC(a,b,c){b=a.segmentIndex.find(b);if(null!=b)for(var d=a.segmentIndex.get(b);d;)c(d,b),d=a.segmentIndex.get(++b)}function BB(a){if(a.j.g)throw new V(2,9,7001);}function zB(){if(!wB())throw new V(2,9,9E3);}function PB(a,b){return Q(function(c){if(1==c.g)return a.i.push(b),ua(c,2),F(c,b,4);if(2!=c.g)return c.return(c.h);ya(c);sd(a.i,b);return Ba(c,0)})}function yB(a,b){var c=b.promise;a.i.push(c);return b.finally(function(){sd(a.i,c)})} +function VB(a){var b=new Set;a=u(a.streams);for(var c=a.next();!c.done;c=a.next()){c=u(c.value.segments);for(var d=c.next();!d.done;d=c.next())d=d.value,null!=d.initSegmentKey&&b.add(d.initSegmentKey),b.add(d.dataKey)}return Array.from(b)} +function UB(a,b,c,d){var e,f,g;return Q(function(h){if(1==h.g){if(!d.drmInfo)return h.return();e=MA(c);f=d.sessionIds.map(function(k){return{sessionId:k,keySystem:d.drmInfo.keySystem,licenseUri:d.drmInfo.licenseServerUri,serverCertificate:d.drmInfo.serverCertificate,audioCapabilities:TB(d,!1),videoCapabilities:TB(d,!0)}});return F(h,lB(b,a,f),2)}return 3!=h.g?(g=h.h,F(h,e.remove(g),3)):F(h,e.add(f.filter(function(k){return!g.includes(k.sessionId)})),0)})} +function YB(a){for(var b=new Set,c=u(a.variants),d=c.next();!d.done;d=c.next())d=d.value,d.audio&&b.add(d.audio),d.video&&b.add(d.video);c=u(a.textStreams);for(d=c.next();!d.done;d=c.next())b.add(d.value);a=u(a.imageStreams);for(c=a.next();!c.done;c=a.next())b.add(c.value);return b} +function MB(a){a.variants.map(function(f){return f.video});var b=new Set(a.variants.map(function(f){return f.audio}));a=a.textStreams;for(var c=u(b),d=c.next();!d.done;d=c.next()){d=u(b);for(var e=d.next();!e.done;e=d.next());}b=u(a);for(c=b.next();!c.done;c=b.next())for(c=u(a),d=c.next();!d.done;d=c.next());}S("shaka.offline.Storage",vB);vB.deleteAll=function(){var a;return Q(function(b){return 1==b.g?(a=new GA,ua(b,2),F(b,NA(a),2)):5!=b.g?(ya(b),F(b,a.destroy(),5)):Ba(b,0)})}; +vB.prototype.list=vB.prototype.list;vB.prototype.removeEmeSessions=vB.prototype.Wl;vB.prototype.remove=vB.prototype.remove;vB.prototype.store=vB.prototype.store;vB.prototype.getNetworkingEngine=vB.prototype.Hb;vB.prototype.getConfiguration=vB.prototype.getConfiguration;vB.prototype.configure=vB.prototype.configure;vB.prototype.destroy=vB.prototype.destroy;vB.support=wB; +var NB=(new Map).set("org.w3.clearkey","1077efecc0b24d02ace33c1e52e2fb4b").set("com.widevine.alpha","edef8ba979d64acea3c827dcd51d21ed").set("com.microsoft.playready","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.recommendation","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.software","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.hardware","9a04f07998404286ab92e65be0885f95").set("com.huawei.wiseplay","3d5e6d359b9a41e8b843dd3c6e72c42c"); +fq("offline",wB);function cC(){}function dC(){for(var a=u(eC),b=a.next();!b.done;b=a.next()){b=b.value;try{b.callback()}catch(c){ab("Error installing polyfill!",c)}}}function fC(a,b){a={priority:b||0,callback:a};for(b=0;b=b?(yC(),zC()):15>=b&&yC());a=u(a.oj());for(b=a.next();!b.done;b=a.next())AC(b.value);(window.MediaSource||window.ManagedMediaSource)&&BC();window.MediaSource&&MediaSource.isTypeSupported('video/webm; codecs="vp9"')&&!MediaSource.isTypeSupported('video/webm; codecs="vp09.00.10.08"')&&CC()} +function yC(){var a=MediaSource.prototype.addSourceBuffer;MediaSource.prototype.addSourceBuffer=function(){var b=a.apply(this,Ja.apply(0,arguments));b.abort=function(){};return b}}function zC(){var a=SourceBuffer.prototype.remove;SourceBuffer.prototype.remove=function(b,c){return a.call(this,b,c-.001)}} +function BC(){if(window.MediaSource){var a=MediaSource.isTypeSupported.bind(MediaSource);MediaSource.isTypeSupported=function(c){return"mp2t"!=ef(c)&&a(c)}}if(window.ManagedMediaSource){var b=ManagedMediaSource.isTypeSupported.bind(ManagedMediaSource);window.ManagedMediaSource.isTypeSupported=function(c){return"mp2t"!=ef(c)&&b(c)}}} +function AC(a){var b=MediaSource.isTypeSupported.bind(MediaSource);MediaSource.isTypeSupported=function(d){return hf(d)!=a&&b(d)};if(window.ManagedMediaSource){var c=ManagedMediaSource.isTypeSupported.bind(ManagedMediaSource);window.ManagedMediaSource.isTypeSupported=function(d){return hf(d)!=a&&c(d)}}} +function CC(){var a=MediaSource.isTypeSupported;Rb().Qj()&&(MediaSource.isTypeSupported=function(b){var c=b.split(/ *; */),d=c.findIndex(function(g){return g.startsWith("codecs=")});if(0>d)return a(b);var e=c[d].replace("codecs=","").replace(/"/g,"").split(/\s*,\s*/),f=e.findIndex(function(g){return g.startsWith("vp09")});0<=f&&(e[f]="vp9",c[d]='codecs="'+e.join(",")+'"',b=c.join("; "));return a(b)})}cC.MediaSource=wC;wC.install=xC;fC(xC);function DC(){}function EC(){screen.orientation&&screen.orientation.unlock||(void 0!=screen.orientation?FC():void 0!=window.orientation&&GC())}function FC(){void 0===screen.orientation.lock&&(screen.orientation.lock=function(){return Promise.resolve()});void 0===screen.orientation.unlock&&(screen.orientation.unlock=function(){})} +function GC(){function a(){switch(window.orientation){case -90:b.type="landscape-secondary";b.angle=270;break;case 0:b.type="portrait-primary";b.angle=0;break;case 90:b.type="landscape-primary";b.angle=90;break;case 180:b.type="portrait-secondary",b.angle=180}}var b=new HC;screen.orientation=b;a();window.addEventListener("orientationchange",function(){a();var c=new U("change");b.dispatchEvent(c)})}cC.Orientation=DC;DC.install=EC;function HC(){jb.call(this);this.type="";this.angle=0}pa(HC,jb); +HC.prototype.lock=function(a){function b(d){return screen.lockOrientation?screen.lockOrientation(d):screen.mozLockOrientation?screen.mozLockOrientation(d):screen.msLockOrientation?screen.msLockOrientation(d):!1}var c=!1;switch(a){case "natural":c=b("default");break;case "any":c=!0;this.unlock();break;default:c=b(a)}if(c)return Promise.resolve();a=Error("screen.orientation.lock() is not available on this device");a.name="NotSupportedError";a.code=DOMException.NOT_SUPPORTED_ERR;return Promise.reject(a)}; +HC.prototype.unlock=function(){screen.unlockOrientation?screen.unlockOrientation():screen.mozUnlockOrientation?screen.mozUnlockOrientation():screen.msUnlockOrientation&&screen.msUnlockOrientation()};fC(EC);function IC(){}var JC,KC,LC,MC,NC,OC; +function PC(a){if(window.HTMLVideoElement&&window.WebKitMediaKeys&&window.shakaMediaKeysPolyfill!=QC){if(void 0===a?0:a)JC=!0,KC=Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype,"mediaKeys"),LC=HTMLMediaElement.prototype.setMediaKeys,MC=window.MediaKeys,NC=window.MediaKeySystemAccess,OC=navigator.requestMediaKeySystemAccess;delete HTMLMediaElement.prototype.mediaKeys;HTMLMediaElement.prototype.mediaKeys=null;HTMLMediaElement.prototype.setMediaKeys=RC;window.MediaKeys=SC;window.MediaKeySystemAccess= +TC;navigator.requestMediaKeySystemAccess=UC;window.shakaMediaKeysPolyfill=QC;Rf.clear();zg.clear()}}function UC(a,b){try{var c=new TC(a,b);return Promise.resolve(c)}catch(d){return Promise.reject(d)}}function RC(a){var b=this.mediaKeys;b&&b!=a&&VC(b,null);delete this.mediaKeys;return(this.mediaKeys=a)?VC(a,this):Promise.resolve()} +function WC(a){a=Kb(a.initData);if(Ob(a).getUint32(0,!0)+4!=a.byteLength)throw new RangeError("Malformed FairPlay init data");a=Xb(a.subarray(4),!0);a=$b(a);var b=new Event("encrypted");b.initDataType="skd";b.initData=Lb(a);this.dispatchEvent(b)}cC.PatchedMediaKeysApple=IC; +IC.uninstall=function(){window.shakaMediaKeysPolyfill==QC&&JC&&(JC=!1,Object.defineProperty(HTMLMediaElement.prototype,"mediaKeys",KC),HTMLMediaElement.prototype.setMediaKeys=LC,window.MediaKeys=MC,window.MediaKeySystemAccess=NC,navigator.requestMediaKeySystemAccess=OC,KC=OC=LC=NC=MC=null,window.shakaMediaKeysPolyfill="",Rf.clear(),zg.clear())};IC.install=PC; +function TC(a,b){this.keySystem=a;if(a.startsWith("com.apple.fps"))for(a=u(b),b=a.next();!b.done;b=a.next()){var c=b.value;if("required"==c.persistentState)b=null;else{b={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:c.initDataTypes,sessionTypes:["temporary"],label:c.label};var d=!1,e=!1;if(c.audioCapabilities)for(var f=u(c.audioCapabilities),g=f.next();!g.done;g=f.next())g=g.value,g.contentType&&(d=!0,WebKitMediaKeys.isTypeSupported(this.keySystem, +g.contentType.split(";")[0])&&(b.audioCapabilities.push(g),e=!0));if(c.videoCapabilities)for(c=u(c.videoCapabilities),f=c.next();!f.done;f=c.next())f=f.value,f.contentType&&(d=!0,WebKitMediaKeys.isTypeSupported(this.keySystem,f.contentType.split(";")[0])&&(b.videoCapabilities.push(f),e=!0));d||(e=WebKitMediaKeys.isTypeSupported(this.keySystem,"video/mp4"));b=e?b:null}if(b){this.g=b;return}}a=Error("Unsupported keySystem");a.name="NotSupportedError";a.code=DOMException.NOT_SUPPORTED_ERR;throw a;} +TC.prototype.createMediaKeys=function(){var a=new SC(this.keySystem);return Promise.resolve(a)};TC.prototype.getConfiguration=function(){return this.g};function SC(a){this.h=new WebKitMediaKeys(a);this.g=new Oc}SC.prototype.createSession=function(a){a=a||"temporary";if("temporary"!=a)throw new TypeError("Session type "+a+" is unsupported on this platform.");return new XC(this.h,a)};SC.prototype.setServerCertificate=function(){return Promise.resolve(!1)}; +function VC(a,b){a.g.Sa();if(!b)return Promise.resolve();a.g.o(b,"webkitneedkey",WC);try{return xl(b,HTMLMediaElement.HAVE_METADATA,a.g,function(){b.webkitSetMediaKeys(a.h)}),Promise.resolve()}catch(c){return Promise.reject(c)}}SC.prototype.getStatusForPolicy=function(){return Promise.resolve("usable")};function XC(a){jb.call(this);this.i=null;this.l=a;this.g=this.h=null;this.j=new Oc;this.sessionId="";this.expiration=NaN;this.closed=new Hg;this.keyStatuses=new YC}pa(XC,jb);p=XC.prototype; +p.generateRequest=function(a,b){var c=this;this.h=new Hg;try{var d=this.l.createSession("video/mp4",Kb(b));this.i=d;this.sessionId=d.sessionId||"";this.j.o(this.i,"webkitkeymessage",function(e){c.h&&(c.h.resolve(),c.h=null);e=(new Map).set("messageType",void 0==c.keyStatuses.Ec()?"license-request":"license-renewal").set("message",Lb(e.message));e=new U("message",e);c.dispatchEvent(e)});this.j.o(d,"webkitkeyadded",function(){c.g&&(ZC(c,"usable"),c.g.resolve(),c.g=null)});this.j.o(d,"webkitkeyerror", +function(){var e=Error("EME PatchedMediaKeysApple key error");e.errorCode=c.i.error;if(null!=c.h)c.h.reject(e),c.h=null;else if(null!=c.g)c.g.reject(e),c.g=null;else switch(c.i.error.code){case WebKitMediaKeyError.MEDIA_KEYERR_OUTPUT:case WebKitMediaKeyError.MEDIA_KEYERR_HARDWARECHANGE:ZC(c,"output-not-allowed");break;default:ZC(c,"internal-error")}});ZC(this,"status-pending")}catch(e){this.h.reject(e)}return this.h};p.load=function(){return Promise.reject(Error("MediaKeySession.load not yet supported"))}; +p.update=function(a){this.g=new Hg;try{this.i.update(Kb(a))}catch(b){this.g.reject(b)}return this.g};p.close=function(){try{this.i.close(),this.closed.resolve(),this.j.Sa()}catch(a){this.closed.reject(a)}return this.closed};p.remove=function(){return Promise.reject(Error("MediaKeySession.remove is only applicable for persistent licenses, which are not supported on this platform"))};function ZC(a,b){var c=a.keyStatuses;c.size=void 0==b?0:1;c.g=b;b=new U("keystatuseschange");a.dispatchEvent(b)} +function YC(){this.size=0;this.g=void 0}p=YC.prototype;p.Ec=function(){return this.g};p.forEach=function(a){this.g&&a(this.g,yg.value())};p.get=function(a){if(this.has(a))return this.g};p.has=function(a){var b=yg.value();return this.g&&Jb(a,b)?!0:!1};p.entries=function(){};p.keys=function(){};p.values=function(){};var QC="apple";fC(function(){window.HTMLVideoElement&&window.WebKitMediaKeys&&(navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration||PC())});function $C(){}function aD(){if(window.MediaKeys){var a=Rb();MediaKeys.prototype.setServerCertificate&&a.Be()||(MediaKeys.prototype.setServerCertificate=bD)}}function bD(){return Promise.resolve(!1)}cC.PatchedMediaKeysCert=$C;$C.install=aD;fC(aD);function cD(){} +function dD(){if(!(!window.HTMLVideoElement||navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration)){if(HTMLMediaElement.prototype.webkitGenerateKeyRequest)eD="webkit";else if(!HTMLMediaElement.prototype.generateKeyRequest)return;navigator.requestMediaKeySystemAccess=fD;delete HTMLMediaElement.prototype.mediaKeys;HTMLMediaElement.prototype.mediaKeys=null;HTMLMediaElement.prototype.setMediaKeys=gD;window.MediaKeys=hD;window.MediaKeySystemAccess=iD;window.shakaMediaKeysPolyfill=jD}} +function kD(a){var b=eD;return b?b+a.charAt(0).toUpperCase()+a.slice(1):a}function fD(a,b){try{var c=new iD(a,b);return Promise.resolve(c)}catch(d){return Promise.reject(d)}}function gD(a){var b=this.mediaKeys;b&&b!=a&&lD(b,null);delete this.mediaKeys;(this.mediaKeys=a)&&lD(a,this);return Promise.resolve()}cC.PatchedMediaKeysWebkit=cD;cD.install=dD; +function iD(a,b){this.g=this.keySystem=a;var c=!1;"org.w3.clearkey"==a&&(this.g="webkit-org.w3.clearkey",c=!1);var d=!1;var e=document.getElementsByTagName("video");e=e.length?e[0]:document.createElement("video");b=u(b);for(var f=b.next();!f.done;f=b.next()){f=f.value;var g={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:f.initDataTypes,sessionTypes:["temporary"],label:f.label},h=!1;if(f.audioCapabilities)for(var k=u(f.audioCapabilities), +l=k.next();!l.done;l=k.next())l=l.value,l.contentType&&(h=!0,e.canPlayType(l.contentType.split(";")[0],this.g)&&(g.audioCapabilities.push(l),d=!0));if(f.videoCapabilities)for(k=u(f.videoCapabilities),l=k.next();!l.done;l=k.next())l=l.value,l.contentType&&(h=!0,e.canPlayType(l.contentType,this.g)&&(g.videoCapabilities.push(l),d=!0));h||(d=e.canPlayType("video/mp4",this.g)||e.canPlayType("video/webm",this.g));"required"==f.persistentState&&(c?(g.persistentState="required",g.sessionTypes=["persistent-license"]): +d=!1);if(d){this.h=g;return}}c="Unsupported keySystem";if("org.w3.clearkey"==a||"com.widevine.alpha"==a)c="None of the requested configurations were supported.";a=Error(c);a.name="NotSupportedError";a.code=DOMException.NOT_SUPPORTED_ERR;throw a;}iD.prototype.createMediaKeys=function(){var a=new hD(this.g);return Promise.resolve(a)};iD.prototype.getConfiguration=function(){return this.h};function hD(a){this.l=a;this.h=null;this.g=new Oc;this.i=[];this.j=new Map} +function lD(a,b){a.h=b;a.g.Sa();var c=eD;b&&(a.g.o(b,c+"needkey",function(d){var e=new CustomEvent("encrypted");e.initDataType="cenc";e.initData=Lb(d.initData);a.h.dispatchEvent(e)}),a.g.o(b,c+"keymessage",function(d){var e=mD(a,d.sessionId);e&&(d=(new Map).set("messageType",void 0==e.keyStatuses.Ec()?"licenserequest":"licenserenewal").set("message",d.message),d=new U("message",d),e.h&&(e.h.resolve(),e.h=null),e.dispatchEvent(d))}),a.g.o(b,c+"keyadded",function(d){(d=mD(a,d.sessionId))&&d.ready()}), +a.g.o(b,c+"keyerror",function(d){var e=mD(a,d.sessionId);if(e){var f=Error("EME v0.1b key error"),g=d.errorCode;g.systemCode=d.systemCode;f.errorCode=g;!d.sessionId&&e.h?(45==d.systemCode&&(f.message="Unsupported session type."),e.h.reject(f),e.h=null):d.sessionId&&e.g?(e.g.reject(f),e.g=null):(f=d.systemCode,d.errorCode.code==MediaKeyError.MEDIA_KEYERR_OUTPUT?nD(e,"output-restricted"):1==f?nD(e,"expired"):nD(e,"internal-error"))}}))} +hD.prototype.createSession=function(a){a=a||"temporary";if("temporary"!=a&&"persistent-license"!=a)throw new TypeError("Session type "+a+" is unsupported on this platform.");var b=this.h||document.createElement("video");b.src||(b.src="about:blank");a=new oD(b,this.l,a);this.i.push(a);return a};hD.prototype.setServerCertificate=function(){return Promise.resolve(!1)};hD.prototype.getStatusForPolicy=function(){return Promise.resolve("usable")}; +function mD(a,b){var c=a.j.get(b);return c?c:(c=a.i.shift())?(c.sessionId=b,a.j.set(b,c),c):null}function oD(a,b,c){jb.call(this);this.j=a;this.m=!1;this.g=this.h=null;this.i=b;this.l=c;this.sessionId="";this.expiration=NaN;this.closed=new Hg;this.keyStatuses=new pD}pa(oD,jb);p=oD.prototype;p.ready=function(){nD(this,"usable");this.g&&this.g.resolve();this.g=null}; +function qD(a,b,c){if(a.m)return Promise.reject(Error("The session is already initialized."));a.m=!0;try{if("persistent-license"==a.l)if(c)var d=Kb($b("LOAD_SESSION|"+c));else{var e=$b("PERSISTENT|");d=kc(e,b)}else d=Kb(b)}catch(g){return Promise.reject(g)}a.h=new Hg;var f=kD("generateKeyRequest");try{a.j[f](a.i,d)}catch(g){if("InvalidStateError"!=g.name)return a.h=null,Promise.reject(g);(new yf(function(){try{a.j[f](a.i,d)}catch(h){a.h.reject(h),a.h=null}})).X(.01)}return a.h} +function rD(a,b,c){if(a.g)a.g.then(function(){return rD(a,b,c)}).catch(function(){return rD(a,b,c)});else{a.g=b;if("webkit-org.w3.clearkey"==a.i){var d=Wb(c);var e=JSON.parse(d);"oct"!=e.keys[0].kty&&(a.g.reject(Error("Response is not a valid JSON Web Key Set.")),a.g=null);d=hc(e.keys[0].k);e=hc(e.keys[0].kid)}else d=Kb(c),e=null;var f=kD("addKey");try{a.j[f](a.i,d,e,a.sessionId)}catch(g){a.g.reject(g),a.g=null}}} +function nD(a,b){var c=a.keyStatuses;c.size=void 0==b?0:1;c.g=b;b=new U("keystatuseschange");a.dispatchEvent(b)}p.generateRequest=function(a,b){return qD(this,b,null)};p.load=function(a){return"persistent-license"==this.l?qD(this,null,a):Promise.reject(Error("Not a persistent session."))};p.update=function(a){var b=new Hg;rD(this,b,a);return b}; +p.close=function(){if("persistent-license"!=this.l){if(!this.sessionId)return this.closed.reject(Error("The session is not callable.")),this.closed;var a=kD("cancelKeyRequest");try{this.j[a](this.i,this.sessionId)}catch(b){}}this.closed.resolve();return this.closed};p.remove=function(){return"persistent-license"!=this.l?Promise.reject(Error("Not a persistent session.")):this.close()};function pD(){this.size=0;this.g=void 0}p=pD.prototype;p.Ec=function(){return this.g}; +p.forEach=function(a){this.g&&a(this.g,yg.value())};p.get=function(a){if(this.has(a))return this.g};p.has=function(a){var b=yg.value();return this.g&&Jb(a,b)?!0:!1};p.entries=function(){};p.keys=function(){};p.values=function(){};var eD="",jD="webkit";fC(dD);function sD(){}function tD(){if(window.HTMLVideoElement){var a=HTMLVideoElement.prototype;a.requestPictureInPicture&&document.exitPictureInPicture||!a.webkitSupportsPresentationMode||(document.pictureInPictureEnabled=!0,document.pictureInPictureElement=null,a.requestPictureInPicture=uD,Object.defineProperty(a,"disablePictureInPicture",{get:vD,set:wD,enumerable:!0,configurable:!0}),document.exitPictureInPicture=xD,document.addEventListener("webkitpresentationmodechanged",yD,!0))}} +function yD(a){a=a.target;if("picture-in-picture"==a.webkitPresentationMode){document.pictureInPictureElement=a;var b=new Event("enterpictureinpicture");a.dispatchEvent(b)}else document.pictureInPictureElement==a&&(document.pictureInPictureElement=null),b=new Event("leavepictureinpicture"),a.dispatchEvent(b)} +function uD(){return this.webkitSupportsPresentationMode("picture-in-picture")?(this.webkitSetPresentationMode("picture-in-picture"),document.pictureInPictureElement=this,Promise.resolve()):Promise.reject(Error("PiP not allowed by video element"))}function xD(){var a=document.pictureInPictureElement;return a?(a.webkitSetPresentationMode("inline"),document.pictureInPictureElement=null,Promise.resolve()):Promise.reject(Error("No picture in picture element found"))} +function vD(){return this.hasAttribute("disablePictureInPicture")?!0:!this.webkitSupportsPresentationMode("picture-in-picture")}function wD(a){a?this.setAttribute("disablePictureInPicture",""):this.removeAttribute("disablePictureInPicture")}cC.PiPWebkit=sD;sD.install=tD;fC(tD);function zD(){}function AD(){window.crypto&&("randomUUID"in window.crypto||(window.crypto.randomUUID=BD))}function BD(){var a=URL.createObjectURL(new Blob),b=a.toString();URL.revokeObjectURL(a);return b.substr(b.lastIndexOf("/")+1)}cC.RandomUUID=zD;zD.install=AD;fC(AD);function CD(){}function DD(){var a=Symbol.prototype;"description"in a||Object.defineProperty(a,"description",{get:ED})}function ED(){var a=/\((.*)\)/.exec(this.toString());return a?a[1]:void 0}cC.Symbol=CD;CD.install=DD;fC(DD);function FD(){}function GD(){for(var a=u([Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,Int8Array,Int16Array,Int32Array,Float32Array,Float64Array]),b=a.next();!b.done;b=a.next())b=b.value,b.prototype.indexOf||(b.prototype.indexOf=HD),b.prototype.lastIndexOf||(b.prototype.lastIndexOf=ID),b.prototype.includes||(b.prototype.includes=JD)}function HD(a,b){return Array.prototype.indexOf.call(this,a,b)}function ID(a,b){return Array.prototype.lastIndexOf.call(this,a,b)} +function JD(a,b){return-1!==this.indexOf(a,b)}cC.TypedArray=FD;FD.install=GD;fC(GD);function KD(){}function LD(){if(window.HTMLMediaElement){var a=HTMLMediaElement.prototype.play;HTMLMediaElement.prototype.play=function(){var b=a.apply(this);b&&b.catch(function(){});return b}}}cC.VideoPlayPromise=KD;KD.install=LD;fC(LD);function MD(){}function ND(){if(window.HTMLVideoElement){var a=HTMLVideoElement.prototype;!a.getVideoPlaybackQuality&&("webkitDroppedFrameCount"in a||"number"===typeof Fi().webkitDroppedFrameCount)&&(a.getVideoPlaybackQuality=OD)}}function OD(){return{droppedVideoFrames:this.webkitDroppedFrameCount,totalVideoFrames:this.webkitDecodedFrameCount,corruptedVideoFrames:0,creationTime:NaN,totalFrameDelay:0}}cC.VideoPlaybackQuality=MD;MD.install=ND;fC(ND);function PD(){}function QD(){if(!window.VTTCue&&window.TextTrackCue){var a=null,b=TextTrackCue.length;if(3==b)a=RD;else if(6==b)a=SD;else{try{var c=!!RD(1,2,"")}catch(d){c=!1}c&&(a=RD)}a&&(window.VTTCue=function(d,e,f){return a(d,e,f)})}}function RD(a,b,c){return new window.TextTrackCue(a,b,c)}function SD(a,b,c){return new window.TextTrackCue(a+"-"+b+"-"+c,a,b,c)}cC.VTTCue=PD;PD.install=QD;fC(QD);function TD(a){jb.call(this);this.h=a;this.l=null;this.g=[];this.i=-1;this.j=null;this.m=new Oc}pa(TD,jb);p=TD.prototype;p.destroy=function(){var a=this;return Q(function(b){if(1==b.g)return F(b,a.removeAllItems(),2);a.h=null;a.m&&(a.m.release(),a.m=null);jb.prototype.release.call(a);H(b)})};p.configure=function(a){this.l=a};p.getConfiguration=function(){return this.l};p.getCurrentItem=function(){return this.g.length&&0<=this.i&&this.i=b.g.length)throw new V(2,7,7007);c=b.g[a];b.i!=a&&(b.i=a,b.dispatchEvent(new U("currentitemchanged")));d=b.h.h;e=b.l?b.l.preloadNextUrlWindow:0;0=b.g.length||f||b.h.T()||!d.duration)return D.return();y=b.h.xa().end-d.currentTime;if(isNaN(y)){D.A(0);break}if(!(y<=e)){D.A(0);break}z= +b.l&&b.l.repeatMode;A=null;b.i+1 can only be inside
    in TTML");q=u(Od(e,"div"));for(r=q.next();!r.done;r=q.next())if(Od(r.value,"span").length)throw new V(2,2,2001," can only be inside

    in TTML");if(b=cE(e,b,g,h,k,f,l,n,m,null,!1,c,d))b.backgroundColor||(b.backgroundColor="transparent"), +a.push(b);return a}; +function cE(a,b,c,d,e,f,g,h,k,l,m,n,q){var r=l;if(Md(a)){if(!m)return null;var t={tagName:"span",children:[Pd(a)],attributes:{},parent:null}}else t=a;for(var w=null,v=u(dE),y=v.next();!y.done&&!(w=eE(t,"backgroundImage",d,"#",y.value)[0]);y=v.next());v=null;y=Xd(t,dE,"backgroundImage");var z=/^(urn:)(mpeg:[a-z0-9][a-z0-9-]{0,31}:)(subs:)([0-9]+)$/;if(y&&z.test(y)){v=parseInt(y.split(":").pop(),10)-1;if(v>=q.length)return null;v=q[v]}else n&&y&&!y.startsWith("#")&&(z=new qb(n),y=new qb(y),(y=z.resolve(y).toString())&& +(v=y));if("p"==a.tagName||w||v)m=!0;a=m;y="default"==(t.attributes["xml:space"]||(h?"default":"preserve"));z=t.children.every(Md);h=[];if(!z)for(var A=u(t.children),B=A.next();!B.done;B=A.next())(B=cE(B.value,b,c,d,e,f,g,y,k,t,m,n,q))&&h.push(B);d=null!=l;n=Pd(t);n=t.children.length&&n&&/\S/.test(n);A=t.attributes.begin||t.attributes.end||t.attributes.dur;if(!(A||n||"br"==t.tagName||0!=h.length||d&&!y))return null;q=fE(t,c);n=q.start;for(q=q.end;r&&r.tagName&&"tt"!=r.tagName;)q=gE(r,c,n,q),n=q.start, +q=q.end,r=r.parent;null==n&&(n=0);n+=b.periodStart;q=null==q?Infinity:q+b.periodStart;n=Math.max(n,b.segmentStart);q=Math.min(q,b.segmentEnd);if(!A&&0c.length)return f;var g=a;for(a=null;!a&&!(a=e?Wd(g,e,b):g.attributes[b])&&(g=g.parent,g););if(b=a)for(b=u(b.split(" ")),e=b.next();!e.done;e=b.next())for(e=e.value,a=u(c),g=a.next();!g.done;g=a.next())if(g=g.value,d+g.attributes["xml:id"]==e){f.push(g);break}return f} +function gE(a,b,c,d){a=fE(a,b);null==c?c=a.start:null!=a.start&&(c+=a.start);null==d?d=a.end:null!=a.start&&(d+=a.start);return{start:c,end:d}}function fE(a,b){var c=uE(a.attributes.begin,b),d=uE(a.attributes.end,b);a=uE(a.attributes.dur,b);null==d&&null!=a&&(d=c+a);return{start:c,end:d}} +function uE(a,b){var c=null;if(vE.test(a)){a=vE.exec(a);c=Number(a[1]);var d=Number(a[2]),e=Number(a[3]),f=Number(a[4]);f+=(Number(a[5])||0)/b.h;e+=f/b.frameRate;c=e+60*d+3600*c}else if(wE.test(a))c=xE(wE,a);else if(yE.test(a))c=xE(yE,a);else if(zE.test(a))a=zE.exec(a),c=Number(a[1])/b.frameRate;else if(AE.test(a))a=AE.exec(a),c=Number(a[1])/b.g;else if(BE.test(a))c=xE(BE,a);else if(a)throw new V(2,2,2001,"Could not parse cue time range in TTML");return c} +function xE(a,b){a=a.exec(b);return null==a||""==a[0]?null:(Number(a[4])||0)/1E3+(Number(a[3])||0)+60*(Number(a[2])||0)+3600*(Number(a[1])||0)}function aE(a){return a?(a=/^(\d+) (\d+)$/.exec(a))?{Qc:parseInt(a[1],10),rows:parseInt(a[2],10)}:null:null}S("shaka.text.TtmlTextParser",XD);XD.prototype.parseMedia=XD.prototype.parseMedia;XD.prototype.setManifestType=XD.prototype.setManifestType;XD.prototype.setSequenceMode=XD.prototype.setSequenceMode;XD.prototype.parseInit=XD.prototype.parseInit; +function $D(a,b,c,d){this.frameRate=Number(a)||30;this.h=Number(b)||1;this.g=Number(d);0==this.g&&(this.g=a?this.frameRate*this.h:1);c&&(a=/^(\d+) (\d+)$/g.exec(c))&&(this.frameRate*=Number(a[1])/Number(a[2]))} +var iE=/^(\d{1,2}(?:\.\d+)?|100(?:\.0+)?)% (\d{1,2}(?:\.\d+)?|100(?:\.0+)?)%$/,qE=/^(\d{1,4}(?:\.\d+)?|100)%$/,pE=/^(\d+px|\d+em|\d*\.?\d+c)$/,jE=/^(\d+)px (\d+)px$/,vE=/^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/,wE=/^(?:(\d{2,}):)?(\d{2}):(\d{2})$/,yE=/^(?:(\d{2,}):)?(\d{2}):(\d{2}\.\d+)$/,zE=/^(\d*(?:\.\d*)?)f$/,AE=/^(\d*(?:\.\d*)?)t$/,BE=RegExp("^(?:(\\d*(?:\\.\\d*)?)h)?(?:(\\d*(?:\\.\\d*)?)m)?(?:(\\d*(?:\\.\\d*)?)s)?(?:(\\d*(?:\\.\\d*)?)ms)?$"),oE=(new Map).set("left",ue).set("center","center").set("right", +"end").set("start",ue).set("end","end"),nE=(new Map).set("left","line-left").set("center","center").set("right","line-right"),YD=["http://www.w3.org/ns/ttml#parameter","http://www.w3.org/2006/10/ttaf1#parameter"],ZD=["http://www.w3.org/ns/ttml#styling","http://www.w3.org/2006/10/ttaf1#styling"],dE=["http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt","http://www.smpte-ra.org/schemas/2052-1/2013/smpte-tt"];nf("application/ttml+xml",function(){return new XD});function CE(){this.g=new XD}CE.prototype.parseInit=function(a){var b=!1;(new kh).box("moov",ph).box("trak",ph).box("mdia",ph).box("minf",ph).box("stbl",ph).V("stsd",rh).box("stpp",function(c){b=!0;c.parser.stop()}).parse(a);if(!b)throw new V(2,2,2007);};CE.prototype.setSequenceMode=function(){};CE.prototype.setManifestType=function(){}; +CE.prototype.parseMedia=function(a,b,c){var d=[],e=null,f=[],g=new Map,h=[];(new kh).box("moof",ph).box("traf",ph).V("tfhd",function(y){e=Hi(y.reader,y.flags).Zd}).V("trun",function(y){y=Ki(y.reader,y.version,y.flags);y=u(y.Ph);for(var z=y.next();!z.done;z=y.next())h.push(z.value.sampleSize||e||0)}).V("subs",function(y){for(var z=y.reader,A=z.W(),B=-1,D=0;D").replace(/{\/b}/g,"").replace(/{i}/g,"").replace(/{\/i}/g,"").replace(/{u}/g,"").replace(/{\/u}/g,"")+"\n\n";return b}S("shaka.text.SrtTextParser",KE);KE.srt2webvtt=LE;KE.prototype.parseMedia=KE.prototype.parseMedia; +KE.prototype.setManifestType=KE.prototype.setManifestType;KE.prototype.setSequenceMode=KE.prototype.setSequenceMode;KE.prototype.parseInit=KE.prototype.parseInit;nf("text/srt",function(){return new KE});function ME(){}ME.prototype.parseInit=function(){};ME.prototype.setSequenceMode=function(){};ME.prototype.setManifestType=function(){}; +ME.prototype.parseMedia=function(a){var b="",c="",d=null,e=null;e=Wb(a).split(/\r?\n\s*\r?\n/);a=u(e);for(e=a.next();!e.done;e=a.next()){var f=e.value;e=f;if(f=NE.exec(f))d=f[1],e=f[2];"V4 Styles"==d||"V4+ Styles"==d?(b=e,b=c?b+("\n"+e):e):"Events"==d&&(c=c?c+("\n"+e):e)}d=[];e=null;b=u(b.split(/\r?\n/));for(a=b.next();!a.done;a=b.next())if(a=a.value,!/^\s*;/.test(a)&&(f=OE.exec(a)))if(a=f[1].trim(),f=f[2].trim(),"Format"==a)e=f.split(PE);else if("Style"==a){a=f.split(PE);f={};for(var g=0;g>8&255)+","+(a>>16&255)+","+(a>>24&255^255)/255+")":null} +function QE(a){a=TE.exec(a);return 3600*(a[1]?parseInt(a[1].replace(":",""),10):0)+60*parseInt(a[2],10)+parseFloat(a[3])}S("shaka.text.SsaTextParser",ME);ME.prototype.parseMedia=ME.prototype.parseMedia;ME.prototype.setManifestType=ME.prototype.setManifestType;ME.prototype.setSequenceMode=ME.prototype.setSequenceMode;ME.prototype.parseInit=ME.prototype.parseInit;var NE=/^\s*\[([^\]]+)\]\r?\n([\s\S]*)/,OE=/^\s*([^:]+):\s*(.*)/,PE=/\s*,\s*/,TE=/^(\d+:)?(\d{1,2}):(\d{1,2}(?:[.]\d{1,3})?)?$/; +nf("text/x-ssa",function(){return new ME});function UE(a,b){var c=a[b+1]&1?7:9;return b+c<=a.length&&(a=((a[b+3]&3)<<11|a[b+4]<<3|(a[b+5]&224)>>>5)-c,0>>2;if(d>c.length-1)return null;var e=((a[b+2]&192)>>>6)+1,f=(a[b+2]&1)<<2;f|=(a[b+3]&192)>>>6;return{sampleRate:c[d],channelCount:f,codec:"mp4a.40."+e}} +function WE(a,b){if(b+1=a.length)return!1;var d=(a[b+3]&3)<<11|a[b+4]<<3|(a[b+5]&224)>>>5;if(d<=c)return!1;b+=d;return b===a.length||b+1a.length||11!==a[b]||119!==a[b+1])return null;var c=a[b+4]>>6;if(3<=c)return null;var d=a[b+4]&63,e=2*[64,69,96,64,70,96,80,87,120,80,88,120,96,104,144,96,105,144,112,121,168,112,122,168,128,139,192,128,140,192,160,174,240,160,175,240,192,208,288,192,209,288,224,243,336,224,244,336,256,278,384,256,279,384,320,348,480,320,349,480,384,417,576,384,418,576,448,487,672,448,488,672,512,557,768,512,558,768,640,696,960,640,697,960,768,835,1152,768,836,1152,896,975,1344,896,976,1344, +1024,1114,1536,1024,1115,1536,1152,1253,1728,1152,1254,1728,1280,1393,1920,1280,1394,1920][3*d+c];if(b+e>a.length)return null;var f=a[b+6]>>5,g=0;2===f?g+=2:(f&1&&1!==f&&(g+=2),f&4&&(g+=2));g=(a[b+6]<<8|a[b+7])>>12-g&1;var h=a[b+5]&7;a=new Uint8Array([c<<6|a[b+5]>>3<<1|h>>2,(h&3)<<6|f<<3|g<<2|d>>4,d<<4&224]);return{sampleRate:[48E3,44100,32E3][c],channelCount:[2,1,2,3,3,4,4,5][f]+g,La:a,wa:e}} +function $E(a,b){if(11===a[b]&&119===a[b+1]){var c=0,d=5;b+=d;for(var e,f;0>>24+h<>h;c=c?c<c)return!0}return!1};function aF(a){this.j=a;this.h=0;this.g=new Map;this.i=null}p=aF.prototype;p.destroy=function(){this.g.clear()};p.isSupported=function(a){return"audio/ac3"==a.toLowerCase().split(";")[0]?bd(this.convertCodecs("audio",a)):!1};p.convertCodecs=function(a,b){return"audio/ac3"==b.toLowerCase().split(";")[0]?Rb().we()?'audio/mp4; codecs="ec-3"':'audio/mp4; codecs="ac-3"':b};p.getOriginalMimeType=function(){return this.j}; +p.transmux=function(a,b,c,d){a=Kb(a);for(var e=Yj(a),f=e.length;fa.length||2935!==(a[b]<<8|a[b+1]<<0))return null;var c=new ak(a.subarray(b+2));ck(c,2);ck(c,3);var d=dk(c,11)+1<<1,e=dk(c,2);if(3==e){e=dk(c,2);e=[24E3,22060,16E3][e];var f=3}else e=[48E3,44100,32E3][e],f=dk(c,2);var g=dk(c,3),h=dk(c,1);c=dk(c,5);if(b+d>a.byteLength)return null;a=Math.floor(d*e/(16*[1,2,3,6][f]));a=new Uint8Array([(a&8160)>>5,(a&31)<<3,e<<6|c<<1|0,0|g<<1|h<<0,0]);return{sampleRate:e,channelCount:[2,1,2,3,3,4,4,5][g]+h,La:a,wa:d}};function cF(a){this.j=a;this.h=0;this.g=new Map;this.i=null}p=cF.prototype;p.destroy=function(){this.g.clear()};p.isSupported=function(a){return"audio/ec3"==a.toLowerCase().split(";")[0]?bd(this.convertCodecs("audio",a)):!1};p.convertCodecs=function(a,b){return"audio/ec3"==b.toLowerCase().split(";")[0]?'audio/mp4; codecs="ec-3"':b};p.getOriginalMimeType=function(){return this.j}; +p.transmux=function(a,b,c,d){a=Kb(a);for(var e=Yj(a),f=e.length;fe?kk(c,16):kk(c,64))}fk(c);d=gk(c);if(0===d)gk(c);else if(1===d)for(ck(c,1),fk(c),fk(c),d=gk(c),e=0;e=q?(d=r[q-1],e=t[q-1]):255===q&&(d=dk(c,16),e=dk(c,16))}c=(2-h)*(g+1)*16-2*m-2*n;f=16*(f+1)-2*k-2*l;k=[];b=b.fullData;k.push(b.byteLength>>>8&255);k.push(b.byteLength&255);k=k.concat.apply(k,x(b));b=[];a=a.fullData;b.push(a.byteLength>>>8&255);b.push(a.byteLength&255);b=b.concat.apply(b,x(a));a=new Uint8Array([1, +k[3],k[4],k[5],255,225].concat(k,[1],b));return{height:c,width:f,Wa:a,cb:d,fb:e}} +function fF(a){function b(t){e={data:new Uint8Array([]),frame:!1,isKeyframe:!1,pts:t.pts,dts:t.dts,nalus:[]}}function c(){if(e&&e.nalus.length&&e.frame){for(var t=[],w=u(e.nalus),v=w.next();!v.done;v=w.next()){v=v.value;var y=v.fullData.byteLength,z=new Uint8Array(4);z[0]=y>>24&255;z[1]=y>>16&255;z[2]=y>>8&255;z[3]=y&255;t.push(z);t.push(v.fullData)}e.data=kc.apply(dc,x(t));d.push(e)}}for(var d=[],e=null,f=!1,g=0;gG;G++)dk(a,2);for(G=0;GK;K++)for(var J=0;J<(3===K?2:6);J++)if(ik(a)){var L=Math.min(64,1<<4+(K<<1));1=L?(I=M[L-1],K=O[L-1]):255===L&&(I=dk(a,16),K=dk(a,16)));ik(a)&&ik(a);ik(a)&&(dk(a,3),ik(a),ik(a)&&(jk(a),jk(a),jk(a)));ik(a)&&(gk(a),gk(a));ik(a);ik(a);ik(a);if(L=ik(a))gk(a),gk(a),gk(a),gk(a);if(ik(a)&&(dk(a,32),dk(a,32),ik(a)&&gk(a),ik(a))){O=!1;L=ik(a);M=ik(a);if(L||M){if(O=ik(a))jk(a),dk(a, +5),ik(a),dk(a,5);dk(a,4);dk(a,4);O&&dk(a,4);dk(a,5);dk(a,5);dk(a,5)}for(N=0;N<=f;N++){var R=!0;P=1;ik(a)||(R=ik(a));var T=!1;R?gk(a):T=ik(a);T||(P=gk(a)+1);if(L){for(R=0;R>8;e[14]=d.Gf&255;e[15]=252|d.Eh&3;e[16]=252|d.Fg&3;e[17]=248|d.Bg&7;e[18]=248|d.Ag&7;e[19]=0;e[20]=0;e[21]=(d.Hg&3)<<6|(d.Ch&7)<<3|(d.gi?1:0)<<2|3;e[22]=3;e[23]=160;e[24]=0;e[25]=1;e[26]=(a.byteLength&65280)>>8;e[27]=(a.byteLength& +255)>>0;e.set(a,28);e[23+(5+a.byteLength)]=161;e[a.byteLength+29]=0;e[a.byteLength+30]=1;e[a.byteLength+31]=(b.byteLength&65280)>>8;e[a.byteLength+32]=(b.byteLength&255)>>0;e.set(b,a.byteLength+33);e[23+(a.byteLength+10+b.byteLength)]=162;e[a.byteLength+10+b.byteLength+24]=0;e[a.byteLength+10+b.byteLength+25]=1;e[a.byteLength+10+b.byteLength+26]=(c.byteLength&65280)>>8;e[a.byteLength+10+b.byteLength+27]=(c.byteLength&255)>>0;e.set(c,a.byteLength+10+b.byteLength+28);return e};function lF(a,b){var c=a[b+1]>>3&3,d=a[b+1]>>1&3,e=a[b+2]>>4&15,f=a[b+2]>>2&3;if(1!==c&&0!==e&&15!==e&&3!==f){var g=a[b+3]>>6;e=1E3*mF[14*(3===c?3-d:3===d?3:4)+e-1];f=nF[3*(3===c?0:2===c?1:2)+f];c=oF[c][d];var h=pF[d],k=Math.floor(c*e/f+(a[b+2]>>1&1))*h,l=(navigator.userAgent||"").match(/Chrome\/(\d+)/i);(l=l?parseInt(l[1],10):0)&&87>=l&&2===d&&224E3<=e&&0===g&&(a[b+3]|=128);return{sampleRate:f,channelCount:3===g?1:2,wa:k,Zl:8*c*h}}return null} +function qF(a,b){return 255===a[b]&&224===(a[b+1]&224)&&0!==(a[b+1]&6)}function rF(a,b){if(b+1d;d++)this.usertype[d]!==wF[d]&&(c=!1);c&&(this._parsing&&(this.type="sepiff"),b.call(this))})}p=uF.prototype;p.destroy=function(){}; +p.isSupported=function(a,b){var c=a.startsWith("mss/");if(!this.g||!c)return!1;if(b)return bd(this.convertCodecs(b,a));b=this.convertCodecs("audio",a);a=this.convertCodecs("video",a);return bd(b)||bd(a)};p.convertCodecs=function(a,b){return b.replace("mss/","")};p.getOriginalMimeType=function(){return this.h}; +p.transmux=function(a,b,c){if(!c)return Promise.resolve(Kb(a));if(!b.mssPrivateData)return Promise.reject(new V(2,3,3020,c?c.S()[0]:null));try{var d,e=this.g.parseBuffer(a),f=e.fetch("tfhd");f.track_ID=b.id+1;var g=e.fetch("tfdt"),h=e.fetch("traf");null===g&&(g=this.g.createFullBox("tfdt",h,f),g.version=1,g.flags=0,g.baseMediaDecodeTime=Math.floor(c.startTime*b.mssPrivateData.timescale));var k=e.fetch("trun"),l=e.fetch("tfxd");l&&l._parent.boxes.splice(l._parent.boxes.indexOf(l),1);var m=e.fetch("tfrf"); +m&&m._parent.boxes.splice(m._parent.boxes.indexOf(m),1);var n=e.fetch("sepiff");if(null!==n){n.type="senc";n.usertype=void 0;var q=e.fetch("saio");if(null===q){q=this.g.createFullBox("saio",h);q.version=0;q.flags=0;q.entry_count=1;q.offset=[0];var r=this.g.createFullBox("saiz",h);r.version=0;r.flags=0;r.sample_count=n.sample_count;r.default_sample_info_size=0;r.sample_info_size=[];if(n.flags&2)for(d=0;d>24&255;Na[1]=Ma>>16&255;Na[2]=Ma>>8&255;Na[3]=Ma&255;N.push(Na);N.push(ca.fullData)}}var Ea=N.length?{data:kc.apply(dc,x(N)),isKeyframe:O}:null;if(Ea){null==E&&null!=L.dts&&(E=L.dts);var va=void 0;va=J+ +1>>24&255,xd.sampleRate>>>17&255,xd.sampleRate>>>8&255,xd.sampleRate>>>0&255,0,0].concat(x(fc)));for(var oz=xd.sampleRate,pz=u(k.yb()),Mp=pz.next();!Mp.done;Mp=pz.next()){var Np=Mp.value,Dg=Np.data;null==il&&null!==Np.pts&&(il=Np.pts);for(var hi=0;hia&&(a="0"+a);a=d+":"+a;b&&(10>d&&(a="0"+a),a=c+":"+a);return a};function fG(a,b){ZF.call(this,a,b);var c=this;this.g=Kj();this.g.classList.add("shaka-ad-info");this.g.disabled=!0;this.parent.appendChild(this.g);this.h=new yf(function(){if(c.ad.isLinear()){var d="",e=c.ad.getSequenceLength();1Date.now()){c.l.stop();c.s=Date.now();var e=parseInt(c.h.textContent,10);e=c.m?e-d:e+d;c.h.textContent=e.toString()+"s";c.g.style.opacity="1";c.l.X(.5)}})}pa(oG,ZF);S("shaka.ui.HiddenSeekButton",oG);function qG(a,b){oG.call(this,a,b);this.g.classList.add("shaka-fast-forward-container");this.i.textContent="fast_forward";this.m=!1}pa(qG,oG);S("shaka.ui.HiddenFastForwardButton",qG);function rG(a,b){oG.call(this,a,b);this.g.classList.add("shaka-rewind-container");this.i.textContent="fast_rewind";this.m=!0}pa(rG,oG);S("shaka.ui.HiddenRewindButton",rG);function sG(a,b,c,d){ZF.call(this,a,b);var e=this;this.container=W("div");this.container.classList.add("shaka-range-container");this.container.classList.add.apply(this.container.classList,x(c));this.i=!1;this.bar=document.createElement("input");this.F=new yf(function(){e.onChangeEnd();e.i=!1});this.bar.classList.add("shaka-range-element");this.bar.classList.add.apply(this.bar.classList,x(d));this.bar.type="range";this.bar.step="any";this.bar.min="0";this.bar.max="1";this.bar.value="0";this.bar.disabled= +!this.controls.Ba();this.container.appendChild(this.bar);this.parent.appendChild(this.container);this.K=new yf(function(){e.bar.disabled=!1});this.eventManager.o(this.controls,"showingui",function(){e.K.X(0)});this.eventManager.o(this.controls,"hidingui",function(){e.K.stop();e.bar.disabled=!0});this.eventManager.o(this.bar,"mousedown",function(f){e.bar.disabled||(e.i=!0,e.onChangeStart(),f.stopPropagation())});this.eventManager.o(this.bar,"touchstart",function(f){e.bar.disabled||(e.i=!0,tG(e,f), +e.onChangeStart(),f.stopPropagation())});this.eventManager.o(this.bar,"input",function(){e.onChange()});this.eventManager.o(this.bar,"touchmove",function(f){e.i&&(tG(e,f),e.onChange(),f.stopPropagation())});this.eventManager.o(this.bar,"touchend",function(f){e.i&&(e.i=!1,tG(e,f),e.onChangeEnd(),f.stopPropagation())});this.eventManager.o(this.bar,"touchcancel",function(f){e.i&&(e.i=!1,tG(e,f),e.onChangeEnd(),f.stopPropagation())});this.eventManager.o(this.bar,"mouseup",function(f){e.i&&(e.i=!1,e.onChangeEnd(), +f.stopPropagation())});this.eventManager.o(this.bar,"blur",function(){e.i&&(e.i=!1,e.onChangeEnd())});this.eventManager.o(this.bar,"contextmenu",function(f){f.preventDefault();f.stopPropagation()})}pa(sG,ZF);p=sG.prototype;p.release=function(){this.F&&(this.F.stop(),this.F=null);ZF.prototype.release.call(this)};p.setRange=function(a,b){this.bar.min=a;this.bar.max=b};p.onChangeStart=function(){};p.onChange=function(){};p.onChangeEnd=function(){}; +p.changeTo=function(a){this.i||(this.i=!0,this.onChangeStart());var b=parseFloat(this.bar.min),c=parseFloat(this.bar.max);this.bar.value=a>c?c:ae&&(c=e);a.bar.value=c}S("shaka.ui.RangeElement",sG);sG.prototype.setValue=sG.prototype.setValue;sG.prototype.getValue=sG.prototype.getValue;sG.prototype.changeTo=sG.prototype.changeTo;sG.prototype.onChangeEnd=sG.prototype.onChangeEnd;sG.prototype.onChange=sG.prototype.onChange;sG.prototype.onChangeStart=sG.prototype.onChangeStart; +sG.prototype.setRange=sG.prototype.setRange;function uG(a,b){sG.call(this,a,b,["shaka-seek-bar-container"],["shaka-seek-bar","shaka-no-propagation","shaka-show-controls-on-mouse-over"]);var c=this;this.D=W("div");this.D.classList.add("shaka-ad-markers");this.container.insertBefore(this.D,this.container.childNodes[0]);this.H=this.controls.g;this.u=new yf(function(){var d=c.getValue();c.player.T()||d==c.video.duration&&(d-=.001);c.video.currentTime=d});this.B=new yf(function(){vG(c)});this.L=!1;this.h=W("div");this.h.id="shaka-player-ui-thumbnail-container"; +this.g=W("img");this.g.id="shaka-player-ui-thumbnail-image";this.g.draggable=!1;this.J=W("div");this.J.id="shaka-player-ui-thumbnail-time-container";this.G=W("div");this.G.id="shaka-player-ui-thumbnail-time";this.J.appendChild(this.G);this.h.appendChild(this.g);this.h.appendChild(this.J);this.container.appendChild(this.h);this.j=W("div");this.j.id="shaka-player-ui-time-container";this.container.appendChild(this.j);this.l=this.m=null;this.I=!1;this.s=new yf(function(){wG(c)});this.C=[];this.eventManager.o(this.localization, +"locale-updated",function(){return xG(c)});this.eventManager.o(this.localization,"locale-changed",function(){return xG(c)});this.eventManager.o(this.adManager,"ad-started",function(){yG(c)||dG(c.container,!1)});this.eventManager.o(this.adManager,"ad-stopped",function(){yG(c)&&dG(c.container,!0)});this.eventManager.o(this.adManager,"ad-cue-points-changed",function(d){c.C=d.cuepoints;zG(c)});this.eventManager.o(this.player,"unloading",function(){c.C=[];zG(c);c.l&&(c.l.abort(),c.l=null);c.m=null;wG(c); +AG(c)});this.eventManager.o(this.bar,"mousemove",function(d){var e=c.bar.getBoundingClientRect(),f=parseFloat(c.bar.min),g=parseFloat(c.bar.max);d=Math.max(0,d.clientX-e.left);e=Math.min(g,Math.round(f+(g-f)/e.width*d));c.player.gh().length?(AG(c),BG(c,d,e)):(wG(c),CG(c,d,e))});this.eventManager.o(this.container,"mouseleave",function(){AG(c);c.s.stop();c.s.X(.25)});this.setValue(this.video.currentTime);this.update();xG(this);this.ad&&dG(this.container,!1)}pa(uG,sG);p=uG.prototype; +p.release=function(){this.u&&(this.u.stop(),this.u=null,this.B.stop(),this.B=null);sG.prototype.release.call(this)};p.onChangeStart=function(){this.L=!this.video.paused;this.controls.Xh(!0);this.video.pause();this.s.stop();this.I=!0};p.onChange=function(){if(this.video.duration)if(this.update(),this.u.X(.125),this.player.gh().length){var a=parseFloat(this.bar.min),b=parseFloat(this.bar.max),c=this.bar.getBoundingClientRect(),d=Math.round(this.getValue());BG(this,(d-a)/((b-a)/c.width),d)}else wG(this)}; +p.onChangeEnd=function(){this.u.Ja();this.controls.Xh(!1);this.L&&this.video.play();this.I&&(this.I=!1,this.s.stop(),this.s.X(.25))};p.isShowing=function(){return!this.container.classList.contains("shaka-hidden")}; +p.update=function(){var a=this.H.seekBarColors,b=this.getValue(),c=this.video.buffered.length,d=c?this.video.buffered.start(0):0,e=c?this.video.buffered.end(c-1):0;c=this.player.xa();var f=c.end-c.start;this.setRange(c.start,c.end);yG(this)?(dG(this.container,!0),d=(Math.max(d,c.start)-c.start)/f||0,e=(Math.min(e,c.end)-c.start)/f||0,b=(Math.min(Math.max(b,c.start),c.end)-c.start)/f||0,this.container.style.background="linear-gradient("+["to right",(this.H.showUnbufferedStart?a.base:a.played)+" "+ +100*d+"%",a.played+" "+100*d+"%",a.played+" "+100*b+"%",a.buffered+" "+100*b+"%",a.buffered+" "+100*e+"%",a.base+" "+100*e+"%"].join()+")"):dG(this.container,!1)}; +function vG(a){if(a.C.length){for(var b=a.player.xa(),c=b.end-b.start,d=["to right"],e=[],f=a.H.seekBarColors.adBreaks,g=!1,h=u(a.C),k=h.next();!k.done;k=h.next())if(k=k.value,-1==k.start&&!k.end)g=!0;else if(!k.end&&k.start>=b.start||"number"==typeof k.end&&k.end>b.start){var l=(Math.max(k.start,b.start)-b.start)/c||0,m=l+.01;k.end&&(m=(k.end-b.start)/c||0);e.push({start:l,end:m})}e=e.sort(function(n,q){return n.start-q.start});b=u(e);for(c=b.next();!c.done;c=b.next())c=c.value,d.push("transparent "+ +100*c.start+"%"),d.push(f+" "+100*c.start+"%"),d.push(f+" "+100*c.end+"%"),d.push("transparent "+100*c.end+"%");g&&(d.push("transparent 99%"),d.push(f+" 99%"));a.D.style.background="linear-gradient("+d.join(",")+")"}else a.D.style.background="transparent",a.B.stop()}function zG(a){function b(){vG(a);var c=a.player.xa();c=c.end-c.start;a.player.T()&&5b||!isFinite(b))?!1:null==a.ad||!a.ad.isLinear()}function xG(a){a.bar.ariaLabel=a.localization.resolve("SEEK")} +function CG(a,b,c){var d=a.j.clientWidth;a.j.style.width="auto";a.j.style.height="20px";a.j.style.top="-30px";a.j.style.left=Math.min(a.bar.offsetWidth-d,Math.max(0,b-d/2))+"px";a.j.style.right="";a.j.style.visibility="visible";b=a.player.xa();a.player.T()?(c=b.end-c,1>c?(a.j.textContent=a.localization.resolve("LIVE"),a.j.style.left="",a.j.style.right="0px"):a.j.textContent="-"+DG(c)):a.j.textContent=DG(c-b.start)} +function BG(a,b,c){var d,e,f,g,h,k,l,m,n,q,r,t,w,v,y,z,A;Q(function(B){switch(B.g){case 1:return 0>c&&(c=0),d=a.player.xa(),e=Math.max(Math.ceil(d.start),Math.min(Math.floor(d.end),c)),a.player.T()?(f=d.end-c,a.G.textContent=1>f?a.localization.resolve("LIVE"):"-"+DG(f)):a.G.textContent=DG(c),F(B,a.player.Ri(null,e),2);case 2:g=B.h;if(!g||!g.uris||!g.uris.length)return wG(a),CG(a,b,c),B.return();g.width';ta(B, +5);q=bh;r=ym(g.uris,g.startByte,g.endByte,a.player.getConfiguration().streaming.retryParameters);a.l=a.player.Hb().request(q,r,{type:1});return F(B,a.l.promise,7);case 7:t=B.h;a.l=null;"mjpg"==g.codecs?(w=(new kh).box("mdat",uh(function(D){n=URL.createObjectURL(new Blob([D],{type:"image/jpeg"}))})),w.parse(t.data,!1)):(v=g.mimeType||"image/jpeg",y=new Blob([t.data],{type:v}),n=URL.createObjectURL(y));wa(B,4);break;case 5:z=xa(B);if(7001==z.code)return B.return();throw z;case 4:try{a.h.removeChild(a.g)}catch(D){}a.g= +W("img");a.g.id="shaka-player-ui-thumbnail-image";a.g.draggable=!1;a.g.src=n;a.g.onload=function(){n.startsWith("blob:")&&URL.revokeObjectURL(n)};a.h.insertBefore(a.g,a.h.firstChild);case 3:A=k/g.width,g.imageHeight?a.g.height=g.imageHeight:g.sprite||(a.g.style.height="100%",a.g.style.objectFit="contain"),g.imageWidth?a.g.width=g.imageWidth:g.sprite||(a.g.style.width="100%",a.g.style.objectFit="contain"),a.g.style.left="-"+A*g.positionX+"px",a.g.style.top="-"+A*g.positionY+"px",a.g.style.transform= +"scale("+A+")",a.g.style.transformOrigin="left top",l=Math.floor(k*g.height/g.width),a.h.style.height=l+"px",a.h.style.top=-(l-h)+"px",H(B)}})}function wG(a){a.h.style.visibility="hidden"}function AG(a){a.j.style.visibility="hidden"}function DG(a){var b=Math.round(a);a=Math.floor(b/3600);var c=Math.floor((b-3600*a)/60);b=b-3600*a-60*c;10>b&&(b="0"+b);return 0c&&(c="0"+c),a+":"+c+":"+b):c+":"+b}S("shaka.ui.SeekBar",uG);function EG(){}EG.prototype.create=function(a,b){return new uG(a,b)}; +uG.Factory=EG;function FG(a,b){ZF.call(this,a,b);var c=this;this.j=W("div");this.j.classList.add("shaka-skip-ad-container");this.parent.appendChild(this.j);this.h=W("div");this.h.classList.add("shaka-skip-ad-counter");dG(this.h,!1);this.j.appendChild(this.h);this.g=Kj();this.g.classList.add("shaka-skip-ad-button");this.g.disabled=!0;dG(this.g,!1);this.g.classList.add("shaka-no-propagation");this.j.appendChild(this.g);GG(this);this.i=new yf(function(){if(c.ad.isSkippable()){var d=Math.round(c.ad.getTimeUntilSkippable()); +0h&&g>b?(b=2*Math.sqrt(1+g-h-b),a[3]=(f-l)/b,a[0]=.25*b,a[1]=(c+e)/b,a[2]=(k+d)/b):h>b?(b=2*Math.sqrt(1+h-g-b),a[3]=(k- +d)/b,a[0]=(c+e)/b,a[1]=.25*b,a[2]=(f+l)/b):(b=2*Math.sqrt(1+b-g-h),a[3]=(c-e)/b,a[0]=(k+d)/b,a[1]=(f+l)/b,a[2]=.25*b)}function NG(a,b){var c=b[0],d=b[1],e=b[2];b=b[3];var f=c+c,g=d+d,h=e+e;c*=f;var k=d*f;d*=g;var l=e*f,m=e*g;e*=h;f*=b;g*=b;b*=h;a[0]=1-d-e;a[1]=k+b;a[2]=l-g;a[3]=0;a[4]=k-b;a[5]=1-c-e;a[6]=m+f;a[7]=0;a[8]=l+g;a[9]=m-f;a[10]=1-c-d;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1};function OG(){var a=new Float32Array(4);a[3]=1;return a}function PG(a,b){var c=b[0],d=b[1],e=b[2];b=b[3];var f=c*c+d*d+e*e+b*b;0=f;f++){var g=f*e/100,h=Math.sin(g);g=Math.cos(g);for(var k=0;100>=k;k++){var l=2*k*a/100;b.push(Math.sin(l)*h,g,Math.cos(l)*h);c.push(k/100,f/100)}}for(e=0;100>e;e++)for(a=0;100>a;a++)f=101*e+a,h=f+101,d.push(f,h,f+1),d.push(h,h+1,f+1);return{Vj:b,Sj:c,indices:d}};function RG(a,b,c,d,e){this.i=a;this.oa=b;this.s=c;this.g=d;this.u=new Oc;this.L=OG();this.h=OG();this.ea=this.na=this.$=this.l=null;this.D=JG();this.I=JG();this.N=JG();this.Y=JG();this.C=null;this.O=!1;this.J=this.B=null;this.ra=this.sa=0;this.Z=this.P=this.R=this.K=null;this.H=this.G=0;this.j=75;this.U=0;this.m=e;this.F=-1;SG(this)} +RG.prototype.release=function(){-1!=this.F&&(this.i.cancelVideoFrameCallback(this.F),this.F=-1);this.u&&(this.u.release(),this.u=null);this.B&&(this.B.stop(),this.B=null);this.J&&(this.J.stop(),this.J=null)};RG.prototype.Pd=function(){(this.O=!this.O)||this.g.viewport(0,0,this.s.width,this.s.height);TG(this,!1)}; +function SG(a){UG(a);VG(a);WG(a);XG(a);YG(a);xl(a.i,HTMLMediaElement.HAVE_CURRENT_DATA,a.u,function(){a.i.readyState>=HTMLMediaElement.HAVE_ENOUGH_DATA&&TG(a);if("requestVideoFrameCallback"in a.i){var b=function(){-1!=a.F&&(TG(a),-1!=a.F&&(a.F=a.i.requestVideoFrameCallback(b)))};a.F=a.i.requestVideoFrameCallback(b)}else{var c;a.u.o(a.i,"canplaythrough",function(){TG(a)});a.u.o(a.i,"playing",function(){a.B&&a.B.stop();if(!c){var d=a.oa.kb();d=u(d);for(var e=d.next();!e.done;e=d.next())(e=e.value.frameRate)&& +(!c||cMath.abs(f-m)&&1E-6>Math.abs(g-e)&&1E-6>Math.abs(c-n))for(f=0;16>f;f++)b[f]=0==f%5?1:0;else{d=f-m;e=g-e;m=c-n;var q=1/Math.sqrt(d*d+e*e+m*m);d*=q;e*=q;m*=q;n=k*m-l*e;l=l*d-h*m;h=h*e-k*d;(q=Math.sqrt(n*n+l*l+h*h))?(q=1/q,n*=q,l*=q,h*=q):h=l=n=0;k=e*h-m*l;var r=m*n-d*h;var t=d*l-e*n;(q=Math.sqrt(k*k+r*r+t*t))?(q=1/q,k*=q,r*=q,t*=q):t=r=k=0;b[0]=n;b[1]=k;b[2]= +d;b[3]=0;b[4]=l;b[5]=r;b[6]=e;b[7]=0;b[8]=h;b[9]=t;b[10]=m;b[11]=0;b[12]=-(n*f+l*g+h*c);b[13]=-(k*f+r*g+t*c);b[14]=-(d*f+e*g+m*c);b[15]=1}MG(a.L,a.D);a=b=a.Y;c=[4,4,4];f=c[0];g=c[1];c=c[2];b[0]=a[0]*f;b[1]=a[1]*f;b[2]=a[2]*f;b[3]=a[3]*f;b[4]=a[4]*g;b[5]=a[5]*g;b[6]=a[6]*g;b[7]=a[7]*g;b[8]=a[8]*c;b[9]=a[9]*c;b[10]=a[10]*c;b[11]=a[11]*c;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15]} +function VG(a){ZG(a);a.g.viewport(0,0,a.g.drawingBufferWidth,a.g.drawingBufferHeight);a.g.clearColor(0,0,0,1);a.g.enable(a.g.CULL_FACE);a.g.cullFace(a.g.FRONT);a.g.clear(a.g.COLOR_BUFFER_BIT)} +function WG(a){var b=$G(a,a.g.VERTEX_SHADER),c=$G(a,a.g.FRAGMENT_SHADER);a.l=a.g.createProgram();a.g.attachShader(a.l,b);a.g.attachShader(a.l,c);a.g.linkProgram(a.l);"cubemap"==a.m?(a.R=a.g.getAttribLocation(a.l,"aVertexPosition"),a.P=a.g.getAttribLocation(a.l,"aTextureCoord")):(a.R=a.g.getAttribLocation(a.l,"a_vPosition"),a.g.enableVertexAttribArray(a.R),a.P=a.g.getAttribLocation(a.l,"a_TexCoordinate"),a.g.enableVertexAttribArray(a.P))} +function $G(a,b){switch(b){case a.g.VERTEX_SHADER:var c="cubemap"==a.m?"attribute vec4 aVertexPosition;\nattribute vec2 aTextureCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvarying highp vec2 vTextureCoord;\nvarying highp vec3 vLighting;\nvoid main(void) {\n gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;\n vTextureCoord = aTextureCoord;\n}":"attribute vec4 a_vPosition;\n// Per-vertex texture coordinate info\nattribute vec2 a_TexCoordinate;\nuniform mat4 u_VPMatrix;\n// Passed into the fragment shader.\nvarying vec2 v_TexCoordinate;\nvarying vec3 pass_position;\nvoid main()\n{\n gl_Position = u_VPMatrix * a_vPosition;\n // Pass through texture coord\n v_TexCoordinate = a_TexCoordinate;\n pass_position = a_vPosition.xyz;\n}"; +break;case a.g.FRAGMENT_SHADER:c="cubemap"==a.m?"varying highp vec2 vTextureCoord;\nuniform sampler2D uSampler;\nvoid main(void) {\n highp vec4 texelColor = texture2D(uSampler, vTextureCoord);\n gl_FragColor = vec4(texelColor.rgb , texelColor.a);\n}":"precision highp float;\n#define PI 3.141592653589793238462643383279\nvarying vec2 v_TexCoordinate;\nvarying vec3 pass_position;\nuniform sampler2D uSampler;\nvoid main(void) {\nhighp float xValue =\n (PI + atan(pass_position.z, pass_position.x)) / (2.0 * PI);\n vec2 tc = vec2(xValue, v_TexCoordinate.t);\n tc = vec2(tc.x , tc.y);\nhighp vec4 texelColor =\n texture2D(uSampler, tc);\n gl_FragColor = vec4(texelColor.rgb, texelColor.a);\n}"; +break;default:return null}b=a.g.createShader(b);a.g.shaderSource(b,c);a.g.compileShader(b);return b} +function XG(a){a.K="cubemap"==a.m?{Vj:[-1,-1,-1,-1,-1,1,-1,1,1,-1,1,-1,-1,1,-1,-1,1,1,1,1,1,1,1,-1,-1,-1,1,1,-1,1,1,1,1,-1,1,1,1,-1,-1,1,1,-1,1,1,1,1,-1,1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,1,-1,-1,-1,-1,1,-1,1,1,-1,1,-1,-1],Sj:[2/3,.5,1/3,.5,1/3,0,2/3,0,2/3,.5,2/3,0,1,0,1,.5,1,1,2/3,1,2/3,.5,1,.5,0,.5,0,0,1/3,0,1/3,.5,0,.5,1/3,.5,1/3,1,0,1,1/3,1,1/3,.5,2/3,.5,2/3,1],indices:[0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23]}:"halfequirectangular"==a.m?QG(!0): +QG();a.$=a.g.createBuffer();a.g.bindBuffer(a.g.ARRAY_BUFFER,a.$);a.g.bufferData(a.g.ARRAY_BUFFER,new Float32Array(a.K.Vj),a.g.STATIC_DRAW);a.na=a.g.createBuffer();a.g.bindBuffer(a.g.ARRAY_BUFFER,a.na);a.g.bufferData(a.g.ARRAY_BUFFER,new Float32Array(a.K.Sj),a.g.STATIC_DRAW);a.ea=a.g.createBuffer();a.g.bindBuffer(a.g.ELEMENT_ARRAY_BUFFER,a.ea);a.g.bufferData(a.g.ELEMENT_ARRAY_BUFFER,new Uint16Array(a.K.indices),a.g.STATIC_DRAW)} +function YG(a){a.Z=a.g.createTexture();a.g.bindTexture(a.g.TEXTURE_2D,a.Z);a.g.texParameteri(a.g.TEXTURE_2D,a.g.TEXTURE_WRAP_S,a.g.CLAMP_TO_EDGE);a.g.texParameteri(a.g.TEXTURE_2D,a.g.TEXTURE_WRAP_T,a.g.CLAMP_TO_EDGE);a.g.texParameteri(a.g.TEXTURE_2D,a.g.TEXTURE_MIN_FILTER,a.g.NEAREST);a.g.texParameteri(a.g.TEXTURE_2D,a.g.TEXTURE_MAG_FILTER,a.g.NEAREST)} +function TG(a,b){b=void 0===b?!0:b;var c=a.oa.m==Iq;if(!(!a.i||2>a.i.readyState||!c&&0==a.i.playbackRate)){KG(a.I,a.j*Math.PI/180,1.5625);"cubemap"==a.m?KG(a.I,a.j*Math.PI/180,2.5):KG(a.I,a.j*Math.PI/180,1.5625);a.g.useProgram(a.l);a.g.clear(a.g.COLOR_BUFFER_BIT);ZG(a);b&&(a.g.activeTexture(a.g.TEXTURE0),a.g.bindTexture(a.g.TEXTURE_2D,a.Z),a.g.pixelStorei(a.g.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0),a.g.texImage2D(a.g.TEXTURE_2D,0,a.g.RGBA,a.g.RGBA,a.g.UNSIGNED_BYTE,a.i));if("equirectangular"==a.m||"halfequirectangular"== +a.m)LG(a.N,a.D,a.Y),LG(a.N,a.I,a.N);a.g.bindBuffer(a.g.ARRAY_BUFFER,a.$);a.g.vertexAttribPointer(a.R,3,a.g.FLOAT,!1,0,0);a.g.enableVertexAttribArray(a.R);a.g.bindBuffer(a.g.ARRAY_BUFFER,a.na);a.g.vertexAttribPointer(a.P,2,a.g.FLOAT,!1,0,0);a.g.enableVertexAttribArray(a.P);a.g.bindBuffer(a.g.ELEMENT_ARRAY_BUFFER,a.ea);"cubemap"==a.m?(a.g.uniformMatrix4fv(a.g.getUniformLocation(a.l,"uProjectionMatrix"),!1,a.I),a.g.uniformMatrix4fv(a.g.getUniformLocation(a.l,"uModelViewMatrix"),!1,a.N)):a.g.uniformMatrix4fv(a.g.getUniformLocation(a.l, +"u_VPMatrix"),!1,a.N);a.g.uniform1i(a.g.getUniformLocation(a.l,"uSampler"),0);a.O&&a.g.viewport(0,0,a.s.width/2,a.s.height);a.g.drawElements(a.g.TRIANGLES,a.K.indices.length,a.g.UNSIGNED_SHORT,0);a.O&&(a.g.viewport(a.s.width/2,0,a.s.width/2,a.s.height),a.g.drawElements(a.g.TRIANGLES,a.K.indices.length,a.g.UNSIGNED_SHORT,0))}} +function ZG(a){var b=a.i.videoWidth;b||(b=a.s.scrollWidth);var c=a.i.videoHeight;c||(c=a.s.scrollHeight);if(a.sa!==b||a.ra!==c){a.s.width=b;a.s.height=c;a.sa=b;a.ra=c;var d=b/c,e=a.I,f=-d,g=1/(d-f);e[0]=0*g;e[1]=0;e[2]=0;e[3]=0;e[4]=0;e[5]=0;e[6]=0;e[7]=0;e[8]=(d+f)*g;e[9]=0;e[10]=-1;e[11]=-1;e[12]=0;e[13]=0;e[14]=-0;e[15]=0;a.I=e;a.g.viewport(0,0,b,c)}} +function aH(a,b,c,d){var e=Infinity,f=90*Math.PI/180;"halfequirectangular"==a.m&&(e=90*Math.PI/180,f/=2);var g="cubemap"==a.m?a.N:a.D;a.G+=b;a.H+=c;if(a.G-e){e=Math.sin(b);b=Math.cos(b);var h=g[0],k=g[1],l=g[2],m=g[3],n=g[8],q=g[9],r=g[10],t=g[11];g!==g&&(g[4]=g[4],g[5]=g[5],g[6]=g[6],g[7]=g[7],g[12]=g[12],g[13]=g[13],g[14]=g[14],g[15]=g[15]);g[0]=h*b-n*e;g[1]=k*b-q*e;g[2]=l*b-r*e;g[3]=m*b-t*e;g[8]=h*e+n*b;g[9]=k*e+q*b;g[10]=l*e+r*b;g[11]=m*e+t*b}else a.G-=b;a.H-f?(f=JG(),e=JG(),b= +-1*c,c=Math.sin(b),b=Math.cos(b),h=e[4],k=e[5],l=e[6],m=e[7],n=e[8],q=e[9],r=e[10],t=e[11],e!==f&&(f[0]=e[0],f[1]=e[1],f[2]=e[2],f[3]=e[3],f[12]=e[12],f[13]=e[13],f[14]=e[14],f[15]=e[15]),f[4]=h*b+n*c,f[5]=k*b+q*c,f[6]=l*b+r*c,f[7]=m*b+t*c,f[8]=n*b-h*c,f[9]=q*b-k*c,f[10]=r*b-l*c,f[11]=t*b-m*c,LG(g,f,g)):a.H-=c;c=JG();f=JG();e=Math.sin(d);d=Math.cos(d);b=f[0];h=f[1];k=f[2];l=f[3];m=f[4];n=f[5];q=f[6];r=f[7];f!==c&&(c[8]=f[8],c[9]=f[9],c[10]=f[10],c[11]=f[11],c[12]=f[12],c[13]=f[13],c[14]=f[14],c[15]= +f[15]);c[0]=b*d+m*e;c[1]=h*d+n*e;c[2]=k*d+q*e;c[3]=l*d+r*e;c[4]=m*d-b*e;c[5]=n*d-h*e;c[6]=q*d-k*e;c[7]=r*d-l*e;LG(g,c,g);TG(a,!1)} +function bH(a,b){if(void 0===b||b)MG(a.h,a.D),a.U=0,a.C=OG(),a.C[0]=(a.h[0]-a.L[0])/20,a.C[1]=(a.h[1]-a.L[1])/20,a.C[2]=(a.h[2]-a.L[2])/20,a.C[3]=(a.h[3]-a.L[3])/20;a.h[0]-=a.C[0];a.h[1]-=a.C[1];a.h[2]-=a.C[2];a.h[3]-=a.C[3];b=JG();PG(a.h,a.h);NG(b,a.h);a.D=b;a.J&&(a.J.stop(),a.J=null);20>a.U?a.J=(new yf(function(){bH(a,!1);a.G=0;a.H=0;a.U++;TG(a,!1)})).X(.025):(NG(b,a.L),a.D=b)};function cH(a,b,c,d,e){jb.call(this);var f=this;this.i=a;this.j=b;this.F=c;this.J=d;this.u=e;this.s=new Oc;this.h=new Oc;this.B=dH(this.j);this.g=null;this.l=!1;this.I=this.H=this.G=this.D=this.C=0;this.m=null;this.s.o(d,"loading",function(){f.g&&bH(f.g);eH(f)});this.s.o(d,"spatialvideoinfo",function(g){g=g.detail;switch(g.projection){case "hequ":switch(g.hfov){case 360:f.m="equirectangular";break;case 180:f.m="halfequirectangular"}break;case "fish":f.m="equirectangular";break;default:f.m=null}eH(f)}); +this.s.o(d,"nospatialvideoinfo",function(){f.m=null;eH(f)});this.s.o(d,"unloading",function(){f.m=null;eH(f)});eH(this)}pa(cH,jb);p=cH.prototype;p.release=function(){this.s&&(this.s.release(),this.s=null);this.h&&(this.h.release(),this.h=null);this.g&&(this.g.release(),this.g=null);jb.prototype.release.call(this)};p.configure=function(a){this.u=a;eH(this)};p.Dg=function(){return this.j?!!this.B:!!dH(document.createElement("canvas"))};p.Sb=function(){return!!this.g}; +p.Pd=function(){this.g?this.g.Pd():ab("Not playing VR content")};p.ph=function(a){this.g?aH(this.g,a*fH,0,0):ab("Not playing VR content")};p.nh=function(a){this.g?aH(this.g,0,a*fH,0):ab("Not playing VR content")};p.oh=function(a){this.g?aH(this.g,0,0,a*fH):ab("Not playing VR content")}; +function eH(a){if(a.u.displayInVrMode||a.m){a.j||(a.j=document.createElement("canvas"),a.j.classList.add("shaka-vr-canvas-container"),a.F.parentElement.insertBefore(a.j,a.F.nextElementSibling),a.B=dH(a.j));var b=a.m||a.u.defaultVrProjectionMode;a.g?a.g.m!=b&&(a.h.Sa(),a.g.release(),gH(a,b)):(a.j.style.display="",gH(a,b),a.dispatchEvent(new U("vrstatuschanged",(new Map).set("newStatus",a.Sb()))))}else!a.u.displayInVrMode&&!a.m&&a.j&&a.g&&(a.j.style.display="none",a.h.Sa(),a.g.release(),a.g=null,a.dispatchEvent(new U("vrstatuschanged", +(new Map).set("newStatus",a.Sb()))))}function gH(a,b){a.B&&a.j&&(a.g=new RG(a.F,a.J,a.j,a.B,b),hH(a))}function dH(a){if(!a)return null;var b=Rb().Ia();if("TV"==b||"CONSOLE"==b||"CAST"==b)return null;b=u(["webgl2","webgl"]);for(var c=b.next();!c.done;c=b.next())if(c=a.getContext(c.value))return c;return null} +function hH(a){a.h.o(a.i,"mousedown",function(d){if(!a.l){var e=d.clientX;d=d.clientY;a.l=!0;a.C=e;a.D=d}});0=e.j&&(e.j+=f);20>e.j?e.j=20:100\n \n \n \n \n \n \n \n ')} +function BH(a){var b=W("div");b.classList.add("shaka-hidden-fast-forward-container");a.h.appendChild(b);a.Za=new qG(b,a);a.H.push(a.Za)}function CH(a){var b=W("div");b.classList.add("shaka-hidden-rewind-container");a.h.appendChild(b);a.eb=new rG(b,a);a.H.push(a.eb)} +function DH(a){a.L=W("div");a.L.classList.add("shaka-bottom-controls");a.L.classList.add("shaka-no-propagation");a.h.appendChild(a.L);a.i.o(a.L,"click",function(e){e.target.closest(".shaka-overflow-button")||a.Xc()});LH(a);MH(a);a.G=W("div");a.G.classList.add("shaka-controls-button-panel");a.G.classList.add("shaka-show-controls-on-mouse-over");a.g.enableTooltips&&a.G.classList.add("shaka-tooltips-on");a.L.appendChild(a.G);for(var b=u(a.g.controlPanelElements),c=b.next();!c.done;c=b.next())if(c=c.value, +vH.get(c)){var d=vH.get(c).create(a.G,a);a.H.push(d);"time_and_duration"==c&&(c=new fG(a.G,a),a.H.push(c))}else ab("Unrecognized control panel element requested:",c)}function MH(a){if(a.g.addSeekBar)a.s=NH.create(a.L,a),a.H.push(a.s);else{for(var b=u(a.I),c=b.next();!c.done;c=b.next())c.value.classList.add("shaka-low-position");a=a.G;a.classList.contains("shaka-tooltips-on")&&a.classList.add("shaka-tooltips-low-position")}} +function xH(a){a.F=W("div");a.F.classList.add("shaka-client-side-ad-container");dG(a.F,!1);a.i.o(a.F,"click",function(){pG(a)});a.l.appendChild(a.F)} +function pH(a){a.i.o(a.u,"buffering",function(){OH(a)});OH(a);a.i.o(window,"keydown",function(b){PH(a,b)});a.i.o(window,"click",function(){return a.Xc()});a.i.o(a,"submenuopen",function(){a.Xc()});a.i.o(a.B,"play",function(){kH(a)});a.i.o(a.B,"pause",function(){kH(a)});a.i.o(a.l,"mousemove",function(b){KH(a,b)});a.i.o(a.l,"touchmove",function(b){KH(a,b)},{passive:!0});a.i.o(a.l,"touchend",function(b){KH(a,b)},{passive:!0});a.i.o(a.l,"mouseleave",function(){a.O||a.J.Ja()});a.i.o(a.l,"wheel",function(b){KH(a, +b)},{passive:!0});a.i.o(a.D,"caststatuschanged",function(){rH(a)});a.i.o(a.C,"vrstatuschanged",function(){a.dispatchEvent(new U("vrstatuschanged"))});a.i.o(a.l,"keydown",function(b){var c=document.activeElement,d=c&&c.classList?c.classList.contains("shaka-volume-bar"):!1,e=c&&c.classList&&c.classList.contains("shaka-seek-bar");a.h.contains(c)&&KH(a,b);if(a.g.enableKeyboardPlaybackControls){c=a.g.keyboardSeekDistance;var f=a.g.keyboardLargeSeekDistance;switch(b.key){case "ArrowLeft":a.s&&e&&!d&&0< +c&&(b.preventDefault(),QH(a,a.s.getValue()-c));break;case "ArrowRight":a.s&&e&&!d&&0Math.abs(g-f)&&(g=Infinity);try{navigator.mediaSession.setPositionState({duration:Math.max(0,g),playbackRate:a.B.playbackRate,position:Math.max(0,f)})}catch(h){}}},d=function(){try{navigator.mediaSession.setPositionState()}catch(f){}}, +e=function(f){var g=a.g.keyboardSeekDistance;switch(f.action){case "pause":mG(a);break;case "play":mG(a);break;case "seekbackward":if(f.seekOffset&&!isFinite(f.seekOffset))break;a.j&&a.j.isLinear()||QH(a,a.s.getValue()-(f.seekOffset||g));break;case "seekforward":if(f.seekOffset&&!isFinite(f.seekOffset))break;a.j&&a.j.isLinear()||QH(a,a.s.getValue()+(f.seekOffset||g));break;case "seekto":if(f.seekTime&&!isFinite(f.seekTime))break;a.j&&a.j.isLinear()||QH(a,a.u.xa().start+f.seekTime);break;case "stop":a.u.kc(); +break;case "enterpictureinpicture":a.j&&a.j.isLinear()||a.md()}};b("pause",e);b("play",e);b("seekbackward",e);b("seekforward",e);b("seekto",e);b("stop",e);("documentPictureInPicture"in window||document.pictureInPictureEnabled)&&b("enterpictureinpicture",e);b=function(){a.u.T()||0!=a.u.xa().start?(c(),a.i.o(a.B,"timeupdate",c)):d()};a.u.Y&&b();a.i.o(a.u,"loaded",b);a.i.o(a.u,"unloading",function(){a.i.Ca(a.B,"timeupdate",c)});a.i.o(a.u,"metadata",function(f){if(f=f.payload){var g;"TIT2"==f.key&&f.data&& +(g=f.data);var h;"APIC"==f.key&&"--\x3e"==f.mimeType&&(h=f.data);g&&(f={title:g,artwork:[]},navigator.mediaSession.metadata&&(f=navigator.mediaSession.metadata,f.title=g),navigator.mediaSession.metadata=new MediaMetadata(f));h&&(g=a.m,h!=g.poster&&(g.poster=h),g={title:"",artwork:[{src:h}]},navigator.mediaSession.metadata&&(g=navigator.mediaSession.metadata,g.artwork=[{src:h}]),navigator.mediaSession.metadata=new MediaMetadata(g))}})}} +function tH(a){if(a.g.setupMediaSession&&navigator.mediaSession){try{navigator.mediaSession.setPositionState()}catch(b){}a=function(b){try{navigator.mediaSession.setActionHandler(b,null)}catch(c){}};a("pause");a("play");a("seekbackward");a("seekforward");a("seekto");a("stop");a("enterpictureinpicture")}} +function RH(a){return Q(function(b){return a.B&&0!=a.B.readyState&&!a.D.Pa()&&a.g.enableFullscreenOnRotation&&a.ke()?screen.orientation.type.includes("landscape")&&!a.Hc()?F(b,GH(a),0):screen.orientation.type.includes("portrait")&&a.Hc()?F(b,HH(a),0):b.A(0):b.return()})} +function KH(a,b){"mousemove"==b.type&&(a.h.classList.remove("shaka-keyboard-navigation"),kH(a));"touchstart"==b.type||"touchmove"==b.type||"touchend"==b.type||"keyup"==b.type?a.O=Date.now():a.O+1E3.499995*g?(g=Math.PI/2,a=2*Math.atan2(c,a)):h<-.499995*g?(g=-Math.PI/2,a=2*Math.atan2(c,a)):(g=Math.asin(2*(a*d-b*c)),a=Math.atan2(2*(a*b+c*d),1-2*(e+f)));a=180*Math.acos(Math.cos(a)*Math.cos(g))/Math.PI}else ab("Not playing VR content"),a=null;return a};p.fl=function(){var a=this.C;a.g?a=a.g.j:(ab("Not playing VR content"),a=null);return a}; +p.jm=function(a){var b=this.C;b.g?(0>a?(ab("Field of view should be greater than 0"),a=0):100=b.alpha&&(h="display");break;case "display":0>=--k&&(h="fadeOut");break;case "fadeOut":g=Math.max(0,g-l),0>=g&&(h="transition",f=d(),k=Math.round(60*b.displayDuration),h="fadeIn")}0b&&(c=u([c,b]),b=c.next().value,c=c.next().value);b/c>16/9&&(c=Math.round(9*b/16));a=a.controls.g.qualityMarks;return 8640<=c?c+"p":4320<=c?a["4320"]:2160<=c?a["2160"]:1440<=c?a["1440"]:1080<=c?a["1080"]:720<=c?a["720"]:""} +function RJ(a){var b=$F(a.menu);Oj(a.menu);a.menu.appendChild(b);b=0;b=a.player.zd()?WJ(a):XJ(a);var c=Kj();c.classList.add("shaka-enable-abr-button");a.eventManager.o(c,"click",function(){a.player.configure({abr:{enabled:!0}});RJ(a)});a.j=W("span");a.j.textContent=a.localization.resolve("AUTO_QUALITY");c.appendChild(a.j);a.player.getConfiguration().abr.enabled&&(c.ariaSelected="true",c.appendChild(cG()),a.j.classList.add("shaka-chosen-item"),a.currentSelection.textContent=a.localization.resolve("AUTO_QUALITY")); +a.button.setAttribute("shaka-status",a.currentSelection.textContent);a.menu.appendChild(c);bG(a.menu);a.controls.dispatchEvent(new U("resolutionselectionupdated"));QJ(a);dG(a.button,0f&&(e=u([e,f]),f=e.next().value,e=e.next().value);var g=e;f/e>16/9&&(g=Math.round(9*f/16));f=g+"p";e=new Set;g=u(c);for(var h=g.next();!h.done;h=g.next())h=h.value,h.frameRate&&e.add(Math.round(h.frameRate));1=e)&&(f+=Math.round(b.frameRate));if("PQ"==b.hdr||"HLG"==b.hdr)f+=" HDR";"CH-STEREO"== +b.videoLayout&&(f+=" 3D");if(c.some(function(l){return d(b,l)})&&(c.some(function(l){return d(b,l)&&l.bandwidth==b.bandwidth})||(f+=" ("+Math.round(b.bandwidth/1E3)+" kbits/s)"),a.controls.g.showVideoCodec)){var k=function(l){var m="";l&&(l=ff(l),m=l.startsWith("dovi-")?"Dolby Vision":l.toUpperCase());return m?" "+m:m};c.some(function(l){return d(b,l)&&k(l.codecs)!=k(b.codecs)})&&(f+=k(b.codecs))}return f} +function TJ(a,b,c){var d=Math.round(b.bandwidth/1E3)+" kbits/s";if(a.controls.g.showAudioCodec){var e=function(f){var g="";f&&(g=ff(f).toUpperCase());return g?" "+g:g};c.some(function(f){return e(f.codecs)!=e(b.codecs)})&&(d+=e(b.codecs))}return d} +function QJ(a){var b=a.player.zd()?"QUALITY":"RESOLUTION";a.button.ariaLabel=a.localization.resolve(b);a.backButton.ariaLabel=a.localization.resolve(b);a.backSpan.textContent=a.localization.resolve(b);a.nameSpan.textContent=a.localization.resolve(b);a.j.textContent=a.localization.resolve("AUTO_QUALITY");a.player.getConfiguration().abr.enabled&&(a.currentSelection.textContent=a.localization.resolve("AUTO_QUALITY"))}S("shaka.ui.ResolutionSelection",PJ);function YJ(){} +YJ.prototype.create=function(a,b){return new PJ(a,b)};ZH("quality",new YJ);uH("quality",new YJ);function ZJ(a,b){ZF.call(this,a,b);var c=this;this.g=Kj();this.g.classList.add("material-icons-round");this.g.classList.add("shaka-rewind-button");this.g.classList.add("shaka-tooltip-status");this.g.setAttribute("shaka-status",this.localization.resolve("OFF"));this.g.textContent="fast_rewind";this.parent.appendChild(this.g);$J(this);this.h=this.controls.g.rewindRates;this.eventManager.o(this.localization,"locale-updated",function(){$J(c)});this.eventManager.o(this.localization,"locale-changed",function(){$J(c)}); +this.eventManager.o(this.g,"click",function(){if(c.controls.Ba()&&c.video.duration){var d=c.h.indexOf(c.player.Ya())+1;d=d!=c.h.length?c.h[d]:c.h[0];c.video.paused&&c.video.play();c.player.Nc(d);c.g.setAttribute("shaka-status",d+"x")}});this.eventManager.o(this.player,"ratechange",function(){c.g.setAttribute("shaka-status",c.player.Ya()+"x")})}pa(ZJ,ZF);function $J(a){a.g.ariaLabel=a.localization.resolve("REWIND")}S("shaka.ui.RewindButton",ZJ);function aK(){} +aK.prototype.create=function(a,b){return new ZJ(a,b)};uH("rewind",new aK);function bK(a,b){ZF.call(this,a,b);var c=this;this.l=this.controls.D;this.g=Kj();this.g.classList.add("shaka-save.video-frame-button");this.g.classList.add("shaka-tooltip");this.h=W("i");this.h.classList.add("material-icons-round");this.h.textContent="download";this.g.appendChild(this.h);a=W("label");a.classList.add("shaka-overflow-button-label");a.classList.add("shaka-overflow-menu-only");this.i=W("span");this.i.textContent=this.localization.resolve("DOWNLOAD_VIDEO_FRAME");a.appendChild(this.i); +this.j=W("span");this.j.classList.add("shaka-current-selection-span");a.appendChild(this.j);this.g.appendChild(a);cK(this);this.parent.appendChild(this.g);this.eventManager.o(this.localization,"locale-updated",function(){cK(c)});this.eventManager.o(this.localization,"locale-changed",function(){cK(c)});this.eventManager.o(this.g,"click",function(){var d=document.createElement("canvas"),e=d.getContext("2d"),f=c.controls.m;d.width=f.videoWidth;d.height=f.videoHeight;e.drawImage(f,0,0,d.width,d.height); +d=d.toDataURL("image/png");e=document.createElement("a");e.href=d;e.download="videoframe_"+f.currentTime.toFixed(3)+".png";e.click()});this.eventManager.o(this.controls.C,"vrstatuschanged",function(){dK(c)});this.eventManager.o(this.adManager,"ad-started",function(){dK(c)});this.eventManager.o(this.adManager,"ad-stopped",function(){dK(c)});this.eventManager.o(this.player,"unloading",function(){dK(c)});this.eventManager.o(this.player,"loaded",function(){dK(c)});this.eventManager.o(this.video,"play", +function(){dK(c)});this.eventManager.o(this.video,"pause",function(){dK(c)});this.eventManager.o(this.video,"seeking",function(){dK(c)});this.eventManager.o(this.controls,"caststatuschanged",function(){dK(c)});dK(this)}pa(bK,ZF);function dK(a){var b=!0;a.controls.Sb()&&(b=!1);b&&a.l.Pa()&&(b=!1);b&&(a.player.drmInfo()||a.player.zd())&&(b=!1);b&&a.ad&&(b=!1);b&&a.video.remote&&"disconnected"!=a.video.remote.state&&(b=!1);dG(a.g,b)} +function cK(a){a.g.ariaLabel=a.localization.resolve("DOWNLOAD_VIDEO_FRAME");a.i.textContent=a.localization.resolve("DOWNLOAD_VIDEO_FRAME")}S("shaka.ui.SaveVideoFrameButton",bK);function eK(){}eK.prototype.create=function(a,b){return new bK(a,b)};ZH("save_video_frame",new eK);iG("save_video_frame",new eK);function fK(a,b){ZF.call(this,a,b);var c=this;if(this.h=this.player.kh())this.g=Kj(),this.g.classList.add("shaka-skip-next-button"),this.g.classList.add("material-icons-round"),this.g.classList.add("shaka-tooltip"),this.g.textContent="skip_next",this.parent.appendChild(this.g),gK(this),hK(this),this.eventManager.o(this.localization,"locale-updated",function(){gK(c)}),this.eventManager.o(this.localization,"locale-changed",function(){gK(c)}),this.eventManager.o(this.g,"click",function(){c.controls.Ba()&& +c.h.playItem(c.h.getCurrentItemIndex()+1)}),this.eventManager.o(this.h,"currentitemchanged",function(){hK(c)}),this.eventManager.o(this.h,"itemsinserted",function(){hK(c)}),this.eventManager.o(this.h,"itemsremoved",function(){hK(c)}),this.eventManager.o(this.player,"loading",function(){hK(c)})}pa(fK,ZF);function gK(a){a.g.ariaLabel=a.localization.resolve("SKIP_NEXT")}function hK(a){var b=a.h.getItems().length;b=1 ''); + throw new Error(`HTTP ${response.status} - ${response.statusText}${errorBody ? ': ' + errorBody.substring(0,100)+'...' : ''}`); + } + const content = await response.text(); + if (!content || content.trim() === '') throw new Error('Lista vacía o inaccesible.'); + + const effectiveSourceName = sourceOrigin || url; + processM3UContent(content, effectiveSourceName, !sourceOrigin); + + if(userSettings.autoSaveM3U && !sourceOrigin) { + await saveAppConfigValue('lastM3UUrl', url); + await deleteAppConfigValue('lastM3UFileContent'); + await deleteAppConfigValue('lastM3UFileName'); + await deleteAppConfigValue('currentXtreamServerInfo'); + } + showNotification(`Lista cargada desde URL (${channels.length} canales).`, 'success'); + } catch (err) { + showNotification(`Error cargando URL: ${err.message}`, 'error'); + if (!sourceOrigin) { + channels = []; currentM3UContent = null; currentM3UName = null; currentGroupOrder = []; + filterAndRenderChannels(); + } + } finally { showLoading(false); } +} + +function loadFile(event) { + const file = event.target.files[0]; if (!file) return; + showLoading(true, `Leyendo archivo "${escapeHtml(file.name)}"...`); + + if (typeof hideXtreamInfoBar === 'function') hideXtreamInfoBar(); + channels = []; + currentGroupOrder = []; + currentM3UName = null; + + const reader = new FileReader(); + reader.onload = async (e) => { + try { + const content = e.target.result; + if (!content || content.trim() === '') throw new Error('Archivo vacío.'); + + processM3UContent(content, file.name, true); + + if (userSettings.autoSaveM3U) { + if (content.length < 4 * 1024 * 1024) { + await saveAppConfigValue('lastM3UFileContent', content); + await saveAppConfigValue('lastM3UFileName', currentM3UName); + await deleteAppConfigValue('lastM3UUrl'); + await deleteAppConfigValue('currentXtreamServerInfo'); + } else { + showNotification('Archivo local grande (>4MB), no se guardará para recarga automática.', 'info'); + await deleteAppConfigValue('lastM3UFileContent'); + await deleteAppConfigValue('lastM3UFileName'); + await deleteAppConfigValue('lastM3UUrl'); + await deleteAppConfigValue('currentXtreamServerInfo'); + } + } + showNotification(`Lista "${escapeHtml(file.name)}" cargada (${channels.length} canales).`, 'success'); + } catch (err) { + showNotification(`Error procesando archivo: ${err.message}`, 'error'); + channels = []; currentM3UContent = null; currentM3UName = null; currentGroupOrder = []; + filterAndRenderChannels(); + } finally { showLoading(false); $('#fileInput').val(''); } + }; + reader.onerror = (e) => { + showNotification('Error al leer archivo: ' + e.target.error, 'error'); + showLoading(false); $('#fileInput').val(''); + }; + reader.readAsText(file); +} + +function processM3UContent(content, sourceName, isFullLoad = false) { + currentM3UContent = content; + + if (isFullLoad) { + if (sourceName.startsWith('http')) { + try { + const url = new URL(sourceName); + currentM3UName = url.pathname.split('/').pop() || url.search.substring(1) || url.hostname || 'lista_url'; + currentM3UName = decodeURIComponent(currentM3UName).replace(/\.(m3u8?|txt|pls|m3uplus)$/i, '').replace(/[\/\\]/g,'_'); + if (!currentM3UName || currentM3UName.length > 50) currentM3UName = currentM3UName.substring(0, 47) + '...'; + if(currentM3UName.length === 0) currentM3UName = 'lista_remota'; + } catch(e) { currentM3UName = 'lista_url_malformada'; } + } else { + currentM3UName = sourceName.replace(/\.(m3u8?|txt|pls|m3uplus)$/i, '').replace(/[\/\\]/g,'_'); + if (!currentM3UName || currentM3UName.length > 50) currentM3UName = currentM3UName.substring(0, 47) + '...'; + if(currentM3UName.length === 0) currentM3UName = 'lista_local'; + } + if (channels.length > 0 || currentGroupOrder.length > 0) { + channels = []; + currentGroupOrder = []; + } + } + + const parseResult = typeof parseM3U === 'function' ? parseM3U(content, sourceName) : { channels: [], groupOrder: [] }; + + channels.push(...parseResult.channels); + + const existingGroupsSet = new Set(currentGroupOrder); + parseResult.groupOrder.forEach(group => { + if (!existingGroupsSet.has(group)) { + currentGroupOrder.push(group); + } + }); + const allCurrentGroups = new Set(channels.map(c => c['group-title']).filter(Boolean)); + currentGroupOrder = currentGroupOrder.filter(g => allCurrentGroups.has(g)); + allCurrentGroups.forEach(g => { + if (!currentGroupOrder.includes(g)) currentGroupOrder.push(g); + }); + + + currentPage = 1; + if (typeof matchChannelsWithEpg === 'function') { + matchChannelsWithEpg(); + } + + let initialGroupToSelect = ""; + if (userSettings.persistFilters && userSettings.lastSelectedGroup && currentGroupOrder.includes(userSettings.lastSelectedGroup)) { + initialGroupToSelect = userSettings.lastSelectedGroup; + } + $('#groupFilterSidebar').val(initialGroupToSelect); + filterAndRenderChannels(); + + if (channels.length === 0) { + showNotification(`No se encontraron canales válidos en "${escapeHtml(currentM3UName || sourceName)}". Revisa el formato del M3U.`, 'warning'); + } +} + +function removeChannelsBySourceOrigin(originToRemove) { + if (!originToRemove) return; + + const originalChannelCount = channels.length; + channels = channels.filter(channel => channel.sourceOrigin !== originToRemove); + const channelsRemovedCount = originalChannelCount - channels.length; + + if (channelsRemovedCount > 0) { + if (channels.length > 0) { + regenerateCurrentM3UContentFromString(); + } else { + currentM3UContent = null; + currentM3UName = null; + } + const activeGroups = new Set(channels.map(ch => ch['group-title'])); + currentGroupOrder = currentGroupOrder.filter(group => activeGroups.has(group)); + } +} + +async function appendM3UContent(newM3UString, sourceNameForAppend) { + showLoading(true, `Agregando canales de ${escapeHtml(sourceNameForAppend)}...`); + const parseResult = typeof parseM3U === 'function' ? parseM3U(newM3UString, sourceNameForAppend) : { channels: [], groupOrder: [] }; + const newChannelsFromAppend = parseResult.channels; + const newGroupOrderFromAppend = parseResult.groupOrder; + const wasChannelsEmpty = channels.length === 0; + + if (newChannelsFromAppend.length === 0) { + showNotification(`No se encontraron canales válidos en ${escapeHtml(sourceNameForAppend)} para agregar.`, 'warning'); + showLoading(false); + if (wasChannelsEmpty) { + currentM3UName = null; + currentM3UContent = null; + currentGroupOrder = []; + if (typeof filterAndRenderChannels === 'function') filterAndRenderChannels(); + } + return; + } + + if (wasChannelsEmpty) { + channels = newChannelsFromAppend; + currentGroupOrder = newGroupOrderFromAppend; + currentM3UContent = newM3UString; + currentM3UName = sourceNameForAppend; + } else { + channels.push(...newChannelsFromAppend); + + const existingGroupsSet = new Set(currentGroupOrder); + newGroupOrderFromAppend.forEach(group => { + if (!existingGroupsSet.has(group)) { + currentGroupOrder.push(group); + } + }); + const allCurrentGroups = new Set(channels.map(c => c['group-title']).filter(Boolean)); + currentGroupOrder = currentGroupOrder.filter(g => allCurrentGroups.has(g)); + allCurrentGroups.forEach(g => { + if (!currentGroupOrder.includes(g)) currentGroupOrder.push(g); + }); + + await regenerateCurrentM3UContentFromString(); + } + + currentPage = 1; + if (typeof matchChannelsWithEpg === 'function') { + matchChannelsWithEpg(); + } + filterAndRenderChannels(); + + let notificationMessage; + const addedOrLoaded = wasChannelsEmpty ? 'cargados' : 'agregados/actualizados'; + notificationMessage = `${newChannelsFromAppend.length} canales de ${escapeHtml(sourceNameForAppend)} ${addedOrLoaded}.`; + + if (userSettings.autoSaveM3U) { + if (currentM3UContent && currentM3UContent.length < 4 * 1024 * 1024) { + await saveAppConfigValue('lastM3UFileContent', currentM3UContent); + await saveAppConfigValue('lastM3UFileName', currentM3UName); + await deleteAppConfigValue('lastM3UUrl'); + + if (currentM3UName && !currentM3UName.startsWith('Xtream:')) { + await deleteAppConfigValue('currentXtreamServerInfo'); + } + else if (!sourceNameForAppend.startsWith('Xtream:') && await getAppConfigValue('currentXtreamServerInfo')) { + await deleteAppConfigValue('currentXtreamServerInfo'); + } + notificationMessage += " Lista actual guardada para recarga automática."; + } else if (currentM3UContent) { + await deleteAppConfigValue('lastM3UFileContent'); + await deleteAppConfigValue('lastM3UFileName'); + await deleteAppConfigValue('lastM3UUrl'); + await deleteAppConfigValue('currentXtreamServerInfo'); + notificationMessage += " Lista actual demasiado grande, no se guardó para recarga automática."; + } + } + showNotification(notificationMessage, 'success'); + showLoading(false); +} + +async function regenerateCurrentM3UContentFromString() { + if (!channels || channels.length === 0) { + currentM3UContent = null; + return; + } + let newM3U = "#EXTM3U\n"; + channels.forEach(ch => { + let extinfLine = `#EXTINF:${ch.attributes?.duration || -1}`; + + const tempAttrs = {...ch.attributes}; + delete tempAttrs.duration; + + if (ch['tvg-id']) tempAttrs['tvg-id'] = ch['tvg-id']; + if (ch['tvg-name']) tempAttrs['tvg-name'] = ch['tvg-name']; + if (ch['tvg-logo']) tempAttrs['tvg-logo'] = ch['tvg-logo']; + if (ch['group-title']) tempAttrs['group-title'] = ch['group-title']; + if (ch.attributes && ch.attributes['ch-number']) tempAttrs['ch-number'] = ch.attributes['ch-number']; + if (ch.sourceOrigin) tempAttrs['source-origin'] = ch.sourceOrigin; + + + for (const key in tempAttrs) { + if (tempAttrs[key] || typeof tempAttrs[key] === 'number') { + extinfLine += ` ${key}="${tempAttrs[key]}"`; + } + } + extinfLine += `,${ch.name}\n`; + newM3U += extinfLine; + + if (ch.kodiProps) { + Object.entries(ch.kodiProps).forEach(([key, value]) => { + newM3U += `#KODIPROP:${key}=${value}\n`; + }); + } + if (ch.vlcOptions) { + Object.entries(ch.vlcOptions).forEach(([key, value]) => { + if (key === 'description' && value) { + newM3U += `#EXTVLCOPT:description=${value.replace(/[\n\r]+/g, ' ').replace(/"/g, "'")}\n`; + } else { + newM3U += `#EXTVLCOPT:${key}=${value}\n`; + } + }); + } + if (ch.extHttp && Object.keys(ch.extHttp).length > 0) { + newM3U += `#EXTHTTP:${JSON.stringify(ch.extHttp)}\n`; + } + newM3U += `${ch.url}\n`; + }); + currentM3UContent = newM3U; + + if (userSettings.autoSaveM3U && currentM3UContent && currentM3UName) { + if (currentM3UContent.length < 4 * 1024 * 1024) { + await saveAppConfigValue('lastM3UFileContent', currentM3UContent); + await saveAppConfigValue('lastM3UFileName', currentM3UName); + await deleteAppConfigValue('lastM3UUrl'); + if (currentM3UName && !currentM3UName.startsWith('Xtream:')) { + await deleteAppConfigValue('currentXtreamServerInfo'); + } + } else { + showNotification("Lista M3U actualizada es muy grande (>4MB), no se guardará para recarga automática.", "warning"); + await deleteAppConfigValue('lastM3UFileContent'); + await deleteAppConfigValue('lastM3UFileName'); + await deleteAppConfigValue('lastM3UUrl'); + await deleteAppConfigValue('currentXtreamServerInfo'); + } + } +} + +function downloadCurrentM3U() { + if (!currentM3UContent) { + showNotification('No hay lista M3U cargada para descargar.', 'info'); + return; + } + const fileName = (currentM3UName ? currentM3UName.replace(/\.\.\.$/, '') : 'lista_player') + '.m3u'; + const blob = new Blob([currentM3UContent], { type: 'audio/mpegurl;charset=utf-8' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = fileName; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + showNotification(`Descargando lista como "${escapeHtml(fileName)}"`, 'success'); +} \ No newline at end of file diff --git a/m3u_sender.js b/m3u_sender.js new file mode 100644 index 0000000..c7ba7e8 --- /dev/null +++ b/m3u_sender.js @@ -0,0 +1,45 @@ +async function sendM3UToServer(targetUrlOverride = null) { + if (typeof showLoading !== 'function' || typeof currentM3UContent === 'undefined' || typeof userSettings === 'undefined' || typeof currentM3UName === 'undefined' || typeof showNotification !== 'function' || typeof escapeHtml !== 'function') { + console.error("M3U Sender: Funciones o variables esenciales no están disponibles."); + if(typeof showNotification === 'function') showNotification("Error interno al intentar enviar M3U.", "error"); + return; + } + + if (!currentM3UContent) { + showNotification('No hay lista M3U cargada para enviar.', 'info'); + return; + } + + const effectiveUrl = targetUrlOverride || userSettings.m3uUploadServerUrl; + + if (!effectiveUrl || !effectiveUrl.trim().startsWith('http')) { + showNotification('La URL del servidor para enviar M3U no está configurada o es inválida. Configúrala en Ajustes (guarda si es necesario) o introduce una URL válida en la pestaña "Enviar M3U" y pulsa el botón allí.', 'warning'); + return; + } + + showLoading(true, 'Enviando lista M3U al servidor...'); + + try { + const formData = new FormData(); + formData.append('m3u_content', currentM3UContent); + formData.append('m3u_name', currentM3UName || 'lista_player_desconocida'); + + const response = await fetch(effectiveUrl, { + method: 'POST', + body: formData, + }); + + const responseData = await response.json(); + + if (response.ok && responseData.success) { + showNotification(`M3U enviado con éxito al servidor. Guardado como: ${escapeHtml(responseData.filename || 'nombre_desconocido')}`, 'success'); + } else { + throw new Error(responseData.message || `Error del servidor: ${response.status}`); + } + } catch (error) { + console.error("Error enviando M3U al servidor:", error); + showNotification(`Error al enviar M3U: ${error.message}`, 'error'); + } finally { + showLoading(false); + } +} \ No newline at end of file diff --git a/m3u_utils.js b/m3u_utils.js new file mode 100644 index 0000000..598ce6d --- /dev/null +++ b/m3u_utils.js @@ -0,0 +1,286 @@ +function parseM3U(content, sourceOrigin = null) { + const lines = content.split(/\r\n?|\n/).map(line => line.trim()).filter(Boolean); + const parsedChannels = []; + let currentChannel = null; + const seenGroups = new Set(); + const orderedGroups = []; + + if (lines.length > 0 && !lines[0].startsWith('#EXTM3U')) { + } + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + if (line.startsWith('#EXTINF:')) { + if (currentChannel && !currentChannel.url) { + } + currentChannel = { + name: `Canal ${parsedChannels.length + 1}`, + url: null, + attributes: {}, + kodiProps: {}, + vlcOptions: {}, + extHttp: {}, + effectiveEpgId: null, + sourceOrigin: sourceOrigin + }; + try { + const extinfMatch = line.match(/^#EXTINF:(-?\d*(?:\.\d+)?)([^,]*),(.*)$/); + if (extinfMatch) { + currentChannel.attributes.duration = extinfMatch[1]; + + const attrString = extinfMatch[2].trim(); + const channelName = extinfMatch[3].trim(); + currentChannel.name = channelName || `Canal ${parsedChannels.length + 1}`; + + const attributeMatchRegex = /([a-zA-Z0-9_-]+)=("([^"]*)"|'([^']*)'|([^"\s',]+))/g; + let attrMatch; + while ((attrMatch = attributeMatchRegex.exec(attrString)) !== null) { + const attrName = attrMatch[1].toLowerCase(); + const attrValue = attrMatch[3] || attrMatch[4] || attrMatch[5] || ''; + currentChannel.attributes[attrName] = attrValue.trim(); + } + currentChannel['tvg-id'] = currentChannel.attributes['tvg-id'] || ''; + currentChannel['tvg-name'] = currentChannel.attributes['tvg-name'] || ''; + currentChannel['tvg-logo'] = currentChannel.attributes['tvg-logo'] || ''; + currentChannel['group-title'] = currentChannel.attributes['group-title'] || ''; + currentChannel.attributes['ch-number'] = currentChannel.attributes['ch-number'] || currentChannel.attributes['tvg-chno'] || ''; + + if (currentChannel.attributes['source-origin']) { + currentChannel.sourceOrigin = currentChannel.attributes['source-origin']; + } + + const groupTitle = currentChannel['group-title']; + if (groupTitle && groupTitle.trim() !== '' && !seenGroups.has(groupTitle)) { + seenGroups.add(groupTitle); orderedGroups.push(groupTitle); + } + + } else { + const commaIndex = line.indexOf(','); + if (commaIndex !== -1) { + currentChannel.name = line.substring(commaIndex + 1).trim() || `Canal ${parsedChannels.length + 1}`; + currentChannel.attributes.duration = line.substring("#EXTINF:".length, commaIndex).trim(); + } else { currentChannel = null; } + } + } catch (e) { console.warn("Error parsing #EXTINF line:", line, e); currentChannel = null; } + + } else if (currentChannel && line.startsWith('#KODIPROP:')) { + const propMatch = line.match(/^#KODIPROP:([^=]+)=(.*)$/); + if (propMatch && propMatch[1] && typeof propMatch[2] === 'string') { + currentChannel.kodiProps[propMatch[1].trim()] = propMatch[2].trim(); + } + } else if (currentChannel && line.startsWith('#EXTVLCOPT:')) { + const propMatch = line.match(/^#EXTVLCOPT:([^=]+)=(.*)$/); + if (propMatch && propMatch[1] && typeof propMatch[2] === 'string') { + const key = propMatch[1].trim(); + let value = propMatch[2].trim(); + if (key === 'http-user-agent' && value.includes('&Referer=')) { + const parts = value.split('&Referer='); + currentChannel.vlcOptions['http-user-agent'] = parts[0]; + if (parts.length > 1 && parts[1]) { + currentChannel.vlcOptions['http-referrer'] = parts[1]; + } + } else if (key === 'http-user-agent' && value.includes('&referer=')) { + const parts = value.split('&referer='); + currentChannel.vlcOptions['http-user-agent'] = parts[0]; + if (parts.length > 1 && parts[1]) { + currentChannel.vlcOptions['http-referrer'] = parts[1]; + } + } + else { + currentChannel.vlcOptions[key] = value; + } + } + } else if (currentChannel && line.startsWith('#EXTHTTP:')) { + try { + const httpJson = line.substring('#EXTHTTP:'.length).trim(); + if (httpJson) { currentChannel.extHttp = JSON.parse(httpJson); } + } catch (e) { console.warn("Error parsing #EXTHTTP JSON:", line, e); } + } else if (currentChannel && line.startsWith('#EXTGRP:')) { + const groupName = line.substring('#EXTGRP:'.length).trim(); + if (!currentChannel['group-title'] && groupName) { + currentChannel['group-title'] = groupName; + if (!seenGroups.has(groupName)) { seenGroups.add(groupName); orderedGroups.push(groupName); } + } else if (groupName && groupName.trim() !== '' && !seenGroups.has(groupName)) { + seenGroups.add(groupName); orderedGroups.push(groupName); + } + } else if (!line.startsWith('#') && currentChannel && !currentChannel.url) { + const url = line.trim(); + if (url) { + currentChannel.url = url; + + if (!currentChannel.attributes['source-origin']) { + if (url.includes('atres-live.atresmedia.com')) { + currentChannel.sourceOrigin = 'Atresplayer'; + } else if (url.includes('orangetv.orange.es')) { + currentChannel.sourceOrigin = 'OrangeTV'; + } else if (url.toLowerCase().includes('dazn')) { + currentChannel.sourceOrigin = 'DAZN'; + } else if (url.toLowerCase().includes('telefonica.com') || url.toLowerCase().includes('movistarplus.es')) { + currentChannel.sourceOrigin = 'Movistar+'; + } + } + if (currentChannel.attributes['source-origin']) { + currentChannel.sourceOrigin = currentChannel.attributes['source-origin']; + } + + + parsedChannels.push(currentChannel); + currentChannel = null; + } else { + currentChannel = null; + } + } else if (!line.startsWith('#') && !currentChannel) { + } + } + if (currentChannel && !currentChannel.url) { + } + + const finalOrderedGroups = Array.from(new Set(orderedGroups)); + return { channels: parsedChannels, groupOrder: finalOrderedGroups }; +} + +function normalizeStringForComparison(str) { + if (typeof str !== 'string') return ''; + return str.toLowerCase() + .normalize("NFD").replace(/[\u0300-\u036f]/g, "") + .replace(/[hd|sd|fhd|uhd|4k|8k|(\(\d+p\))|[,.:;\-_\s()\[\]&+'!¡¿?]/g, '') + .replace(/\s+/g, ''); +} + +function getStringSimilarity(str1, str2) { + const s1 = normalizeStringForComparison(str1); + const s2 = normalizeStringForComparison(str2); + if (s1 === s2) return 1.0; + if (s1.length < 2 || s2.length < 2) return 0.0; + + const profile1 = {}; + for (let i = 0; i < s1.length - 1; i++) { + const bigram = s1.substring(i, i + 2); + profile1[bigram] = (profile1[bigram] || 0) + 1; + } + const profile2 = {}; + for (let i = 0; i < s2.length - 1; i++) { + const bigram = s2.substring(i, i + 2); + profile2[bigram] = (profile2[bigram] || 0) + 1; + } + const union = new Set([...Object.keys(profile1), ...Object.keys(profile2)]); + let intersectionSize = 0; + for (const bigram of union) { + if (profile1[bigram] && profile2[bigram]) { + intersectionSize += Math.min(profile1[bigram], profile2[bigram]); + } + } + return (2.0 * intersectionSize) / (s1.length - 1 + s2.length - 1); +} + +function base64ToHex(base64) { + try { + const b64Str = String(base64 || ''); + const binary = atob(b64Str.replace(/-/g, '+').replace(/_/g, '/')); + let hex = ''; + for (let i = 0; i < binary.length; i++) { + const byte = binary.charCodeAt(i).toString(16).padStart(2, '0'); + hex += byte; + } + return hex.toLowerCase(); + } catch (e) { + return null; + } +} + +function parseClearKey(keyString) { + if (!keyString || typeof keyString !== 'string') { + return null; + } + keyString = keyString.trim(); + const clearKeys = {}; + try { + if (keyString.startsWith('{') && keyString.endsWith('}')) { + try { + const parsed = JSON.parse(keyString); + if (parsed.keys && Array.isArray(parsed.keys)) { + for (const keyObj of parsed.keys) { + if (keyObj.kty !== 'oct') { continue; } + if (!keyObj.k || !keyObj.kid) { continue; } + const kidHex = base64ToHex(keyObj.kid); + const keyHex = base64ToHex(keyObj.k); + if (kidHex && keyHex && /^[0-9a-f]{32}$/.test(kidHex) && /^[0-9a-f]{32}$/.test(keyHex)) { + clearKeys[kidHex] = keyHex; + } + } + } else { + for (const kid_orig in parsed) { + if (Object.prototype.hasOwnProperty.call(parsed, kid_orig)) { + const key_orig = parsed[kid_orig]; + if (typeof kid_orig !== 'string' || typeof key_orig !== 'string') { + continue; + } + let kidHexStr, keyHexStr; + + if (!/^[0-9a-fA-F]{32}$/.test(kid_orig)) { + const converted = base64ToHex(kid_orig); + kidHexStr = converted ? converted : ''; + } else { + kidHexStr = kid_orig.toLowerCase(); + } + if (!/^[0-9a-fA-F]{32}$/.test(key_orig)) { + const converted = base64ToHex(key_orig); + keyHexStr = converted ? converted : ''; + } else { + keyHexStr = key_orig.toLowerCase(); + } + + if (/^[0-9a-f]{32}$/.test(kidHexStr) && /^[0-9a-f]{32}$/.test(keyHexStr)) { + clearKeys[kidHexStr] = keyHexStr; + } + } + } + } + } catch (jsonParseError) { + const compactObjectMatch = keyString.match(/^\{([0-9a-fA-F]{32}):([0-9a-fA-F]{32})\}$/); + if (compactObjectMatch) { + clearKeys[compactObjectMatch[1].toLowerCase()] = compactObjectMatch[2].toLowerCase(); + } + } + } + + if (Object.keys(clearKeys).length === 0) { + const simpleHexMatch = keyString.match(/^([0-9a-fA-F]{32}):([0-9a-fA-F]{32})$/); + if (simpleHexMatch) { + clearKeys[simpleHexMatch[1].toLowerCase()] = simpleHexMatch[2].toLowerCase(); + return clearKeys; + } + const simpleBase64Match = keyString.match(/^([A-Za-z0-9+/_-]+={0,2}):([A-Za-z0-9+/_-]+={0,2})$/); + if (simpleBase64Match) { + const kidHex = base64ToHex(simpleBase64Match[1]); + const keyHex = base64ToHex(simpleBase64Match[2]); + if (kidHex && keyHex && /^[0-9a-f]{32}$/.test(kidHex) && /^[0-9a-f]{32}$/.test(keyHex)) { + clearKeys[kidHex] = keyHex; + return clearKeys; + } + } + } + + if (Object.keys(clearKeys).length === 0) { + return null; + } + return clearKeys; + } catch (e) { + console.error("Error parsing clearkey string:", e, keyString); + return null; + } +} + +function safeParseInt(value, defaultValue = 0) { + const parsed = parseInt(value, 10); + return isNaN(parsed) ? defaultValue : parsed; +} + +function detectMimeType(url) { + if (typeof url !== 'string') return ''; + const u = url.toLowerCase(); + const urlWithoutQuery = u.split('?')[0]; + if (urlWithoutQuery.endsWith('.m3u8')) return 'application/x-mpegURL'; + if (urlWithoutQuery.endsWith('.mpd')) return 'application/dash+xml'; + return ''; +} \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..9666548 --- /dev/null +++ b/manifest.json @@ -0,0 +1,91 @@ +{ + "manifest_version": 3, + "name": "DRM Player Avanzado", + "version": "2", + "description": "Reproductor avanzado de M3U/M3U8 con soporte para EPG y DRM (KodiProps), y carga de OrangeTV.", + "default_locale": "es", + "permissions": [ + "storage", + "declarativeNetRequest", + "cookies" + ], + "host_permissions": [ + "" + ], + "background": { + "service_worker": "background.js" + }, + "action": { + "default_title": "Abrir DRM Player", + "default_icon": { + "16": "icons/icon16.png", + "48": "icons/icon48.png" + } + }, + "icons": { + "16": "icons/icon16.png", + "48": "icons/icon48.png", + "128": "icons/icon128.png" + }, + "web_accessible_resources": [ + { + "resources": [ + "libs/bootstrap.min.css", + "libs/controls.css", + "libs/jquery-3.7.0.min.js", + "libs/bootstrap.bundle.min.js", + "libs/particles.min.js", + "libs/shaka-player.compiled.js", + "libs/shaka-player.ui.js", + "libs/Sortable.min.js", + "player.js", + "ui_actions.js", + "m3u_operations.js", + "channel_ui.js", + "player_interaction.js", + "user_session.js", + "movistar_vod_ui.js", + "epg.js", + "orange_tv_client.js", + "settings_manager.js", + "db_manager.js", + "m3u_utils.js", + "shaka_handler.js", + "xtream_handler.js", + "xcodec_handler.js", + "dazn_handler.js", + "movistar_handler.js", + "atresplayer_handler.js", + "bartv_handler.js", + "m3u_sender.js", + "php_handler.js", + "draggable_modals.js", + "editor_handler.js", + "_locales/es/messages.json", + "_locales/en/messages.json", + "css/base.css", + "css/layout.css", + "css/sidebar.css", + "css/header.css", + "css/channel_grid.css", + "css/channel_card.css", + "css/modals_general.css", + "css/player_modal.css", + "css/epg_modal.css", + "css/movistar_vod_modal.css", + "css/settings_modal.css", + "css/xtream_modal.css", + "css/generic_modals.css", + "css/components.css", + "css/responsive.css", + "css/editor.css" + ], + "matches": [ + "chrome-extension://*/*" + ] + } + ], + "content_security_policy": { + "extension_pages": "script-src 'self'; style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com; font-src 'self' https://fonts.gstatic.com https://cdnjs.cloudflare.com data:; object-src 'self'; media-src * blob: data:; connect-src * blob: data: https://*.orange.es https://*.dof6.com https://*.atresplayer.com https://*.bartv.es;" + } +} \ No newline at end of file diff --git a/movistar_handler.js b/movistar_handler.js new file mode 100644 index 0000000..778ce9a --- /dev/null +++ b/movistar_handler.js @@ -0,0 +1,648 @@ +const MOVISTAR_API_BASE = 'https://auth.dof6.com'; +const MOVISTAR_API_CLIENTSERVICES = 'https://clientservices.dof6.com'; +const MOVISTAR_API_IDSERVER = 'https://idserver.dof6.com'; +const MOVISTAR_UI_VERSION = '2.45.20'; +const MOVISTAR_API_DEVICES_ENDPOINT = `${MOVISTAR_API_CLIENTSERVICES}/movistarplus/accounts/{ACCOUNTNUMBER}/devices?qspVersion=ssp`; +const MOVISTAR_API_REGISTER_DEVICE_ENDPOINT = `${MOVISTAR_API_BASE}/movistarplus/android.tv/accounts/{ACCOUNTNUMBER}/devices/?qspVersion=ssp`; + +const M_SHORT_TOKEN_KEY = 'movistar_shortToken'; +const M_SHORT_TOKEN_EXPIRY_KEY = 'movistar_shortTokenExpiry'; +const M_LONG_TOKEN_PREFIX = 'movistar_longToken_'; +const M_LAST_USED_TOKEN_ID_KEY = 'movistar_lastUsedLongTokenId'; +const M_LAST_ROTATION_DATE_KEY = 'movistar_lastRotationDate'; +const M_REFRESH_LONG_TOKEN_WITHIN_DAYS = 2; + +let movistarLogCallback = (message, type = 'info') => { console.log(`[MovistarHandler Log|${type}]: ${message}`); }; + +function setMovistarLogCallback(callback) { + if (typeof callback === 'function') { + movistarLogCallback = callback; + } +} + +function _log(message, type = 'info') { + movistarLogCallback(message, type); +} + +function _parseJwtPayload(token) { + if (!token || typeof token !== 'string') return null; + try { + const base64Url = token.split('.')[1]; + if (!base64Url) return null; + const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); + const paddedBase64 = base64 + '==='.slice((base64.length + 3) % 4); + const jsonPayload = decodeURIComponent(atob(paddedBase64).split('').map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join('')); + return JSON.parse(jsonPayload); + } catch (e) { + _log(`Error decodificando JWT: ${e.message}`, 'error'); + return null; + } +} + +async function _getAllLongTokensFromDB() { + _log('Obteniendo todos los tokens largos de la DB...'); + if (typeof getAllAppConfigValues !== 'function') { + _log('Función getAllAppConfigValues no disponible en db_manager.js. No se pueden listar tokens largos.', 'error'); + return []; + } + try { + const allConfig = await getAllAppConfigValues(); + const longTokens = []; + for (const key in allConfig) { + if (key.startsWith(M_LONG_TOKEN_PREFIX) && allConfig[key] && typeof allConfig[key] === 'object') { + longTokens.push(allConfig[key]); + } + } + _log(`Se encontraron ${longTokens.length} tokens largos en la DB.`); + return longTokens; + } catch (error) { + _log(`Error cargando todos los tokens largos: ${error.message}`, 'error'); + return []; + } +} + +async function _saveLongTokenToDB(tokenData) { + if (!tokenData || !tokenData.id || !tokenData.id.startsWith(M_LONG_TOKEN_PREFIX)) { + _log(`Intento de guardar token largo con ID inválido o faltante: ${JSON.stringify(tokenData)}`, 'error'); + throw new Error("ID de token largo inválido o faltante."); + } + _log(`Guardando token largo ID: ${tokenData.id.slice(-12)}`); + return saveAppConfigValue(tokenData.id, tokenData); +} + +async function _deleteLongTokenFromDB(tokenId) { + _log(`Eliminando token largo ID: ${tokenId.slice(-12)}`); + return deleteAppConfigValue(tokenId); +} + +async function _getOrCreateFunctionalDeviceId(longTokenData) { + _log("Buscando/Creando Device ID funcional...", 'info'); + if (!longTokenData || !longTokenData.login_token || !longTokenData.account_nbr) { + throw new Error("Datos de token insuficientes para buscar/crear Device ID."); + } + const url = MOVISTAR_API_DEVICES_ENDPOINT.replace('{ACCOUNTNUMBER}', longTokenData.account_nbr); + const headers = { + 'Authorization': `Bearer ${longTokenData.login_token}`, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', + 'Accept': 'application/json, text/javascript, */*; q=0.01', 'x-movistarplus-ui': MOVISTAR_UI_VERSION, + 'x-movistarplus-os': 'Windows10', 'Origin': 'https://ver.movistarplus.es', 'Referer': 'https://ver.movistarplus.es/' + }; + + try { + _log("Consultando /devices...", 'info'); + const response = await fetch(url, { method: 'GET', headers: headers }); + const responseText = await response.text(); + _log(`Respuesta /devices: ${response.status}`, 'debug'); + if (!response.ok) { throw new Error(`Fallo consulta /devices: ${response.status} ${responseText.substring(0,100)}`); } + + const devices = JSON.parse(responseText); + if (!Array.isArray(devices)) throw new Error("Respuesta /devices no es array."); + + const validDevices = devices.filter(d => d && d.Id && d.Id !== '-'); + _log(`Encontrados ${validDevices.length} dispositivos válidos.`, 'info'); + + const preferredTypes = ["WP_DASH", "ANTV"]; + for (const type of preferredTypes) { + const device = validDevices.find(d => d.DeviceTypeCode === type); + if (device) { _log(`Reutilizando device tipo ${type}: ...${device.Id.slice(-6)}`, 'info'); return device.Id; } + } + if (validDevices.length > 0) { _log(`Reutilizando primer device válido (tipo ${validDevices[0].DeviceTypeCode}): ...${validDevices[0].Id.slice(-6)}`, 'info'); return validDevices[0].Id; } + + _log("No hay devices válidos, registrando nuevo...", 'info'); + const registerUrl = MOVISTAR_API_REGISTER_DEVICE_ENDPOINT.replace('{ACCOUNTNUMBER}', longTokenData.account_nbr); + const registerHeaders = { ...headers, 'Content-Type': 'application/json' }; + delete registerHeaders.Origin; delete registerHeaders.Referer; + + const registerResponse = await fetch(registerUrl, { method: 'POST', headers: registerHeaders }); + const newDeviceIdText = await registerResponse.text(); + const newDeviceId = newDeviceIdText.trim().replace(/^"|"$/g, ''); + _log(`Respuesta registro: ${registerResponse.status}`, 'debug'); + + if (!registerResponse.ok || !newDeviceId || newDeviceId.length < 10) { + let errorMsg = `Fallo registro: ${registerResponse.status}`; + if (newDeviceIdText.length < 200 && !newDeviceIdText.includes('<')) errorMsg += ` - ${newDeviceIdText}`; + if (registerResponse.status === 403 || newDeviceIdText.toLowerCase().includes('limit')) errorMsg = "Límite de dispositivos alcanzado."; + throw new Error(errorMsg); + } + _log(`Nuevo device registrado: ...${newDeviceId.slice(-6)}`, 'success'); + return newDeviceId; + + } catch (error) { + _log(`Error en flujo Device ID: ${error.message}`, 'error'); throw error; + } +} + +async function _refreshMovistarLongToken(currentTokenData) { + _log(`Intentando renovar token largo ID: ${currentTokenData?.id?.slice(-12)}`, 'info'); + if (!currentTokenData?.login_token || !currentTokenData?.account_nbr || !currentTokenData?.device_id) { + _log("Datos insuficientes para renovación.", 'error'); return null; + } + const { login_token, account_nbr, device_id } = currentTokenData; + try { + const sdpUrl = `${MOVISTAR_API_CLIENTSERVICES}/movistarplus/android.tv/sdp/mediaPlayers/${device_id}/initData?qspVersion=ssp&version=8&status=login`; + const sdpHeaders = { + 'x-movistarplus-ui': MOVISTAR_UI_VERSION, 'Authorization': `Bearer ${login_token}`, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 'Content-Type': 'application/json', 'Accept': 'application/json, text/javascript, */*; q=0.01', + 'x-movistarplus-deviceid': device_id, 'x-movistarplus-os': 'Windows10' + }; + const sdpPayload = { 'accountNumber': account_nbr, 'sessionUserProfile': 0, 'streamMiscellanea': 'HTTPS', 'deviceType': 'WP_OTT', 'deviceManufacturerProduct': 'Chrome', 'streamDRM': 'Widevine', 'streamFormat': 'DASH' }; + + _log("Solicitando initData para refrescar token largo...", 'info'); + const sdpResponse = await fetch(sdpUrl, { method: 'POST', headers: sdpHeaders, body: JSON.stringify(sdpPayload) }); + const sdpRespJson = await sdpResponse.json(); + if (!sdpResponse.ok || !sdpRespJson.accessToken) { throw new Error(`Fallo SDP (refresh long): ${sdpRespJson.message || sdpResponse.status}`); } + + const refreshed_login_token = sdpRespJson.accessToken; + const newJwtPayload = _parseJwtPayload(refreshed_login_token); + if (!newJwtPayload || !newJwtPayload.exp) { throw new Error("Token largo refrescado inválido."); } + + _log("Token largo renovado con éxito.", 'success'); + return { ...currentTokenData, login_token: refreshed_login_token, expiry_tstamp: newJwtPayload.exp }; + } catch (error) { + _log(`Error renovando token largo: ${error.message}`, 'error'); return null; + } +} + +async function _getValidLongTokenForCdnGeneration() { + _log("Buscando token largo válido para generar CDN...", 'info'); + const now = Math.floor(Date.now() / 1000); + const currentDateStr = new Date().toISOString().slice(0, 10); + + const allLongTokens = await _getAllLongTokensFromDB(); + const validFunctionalTokens = allLongTokens.filter(t => t.expiry_tstamp > now && t.device_id); + + if (validFunctionalTokens.length === 0) { + _log("No se encontraron tokens largos válidos CON Device ID.", 'error'); + return null; + } + _log(`Encontrados ${validFunctionalTokens.length} tokens largos funcionales.`, 'info'); + + const lastUsedId = await getAppConfigValue(M_LAST_USED_TOKEN_ID_KEY); + const lastRotationDate = await getAppConfigValue(M_LAST_ROTATION_DATE_KEY); + let selectedToken = null; + let needsRotation = false; + + if (!lastRotationDate || currentDateStr > lastRotationDate || !lastUsedId) { + needsRotation = true; + _log("Necesita rotación (fecha o último ID no encontrado).", 'info'); + } else { + selectedToken = validFunctionalTokens.find(t => t.id === lastUsedId); + if (!selectedToken) { + needsRotation = true; + _log("Necesita rotación (último ID usado ya no es válido/funcional).", 'info'); + } + } + + if (needsRotation) { + let nextTokenIndex = 0; + if (lastUsedId) { + const lastOriginalIndex = allLongTokens.findIndex(t => t.id === lastUsedId); + if (lastOriginalIndex !== -1) { + let foundNextValid = false; + for (let i = 1; i <= allLongTokens.length; i++) { + const potentialNextOriginalIndex = (lastOriginalIndex + i) % allLongTokens.length; + const potentialTokenId = allLongTokens[potentialNextOriginalIndex]?.id; + if(potentialTokenId) { + const validIndex = validFunctionalTokens.findIndex(vt => vt.id === potentialTokenId); + if (validIndex !== -1) { + nextTokenIndex = validIndex; + foundNextValid = true; + break; + } + } + } + if (!foundNextValid) nextTokenIndex = 0; + } + } + selectedToken = validFunctionalTokens[nextTokenIndex % validFunctionalTokens.length]; + _log(`Token rotado a: ${selectedToken.id.slice(-12)}`, 'info'); + await saveAppConfigValue(M_LAST_USED_TOKEN_ID_KEY, selectedToken.id); + await saveAppConfigValue(M_LAST_ROTATION_DATE_KEY, currentDateStr); + } else { + _log(`Reutilizando último token largo usado: ${selectedToken.id.slice(-12)}`, 'info'); + } + + const refreshThreshold = now + (M_REFRESH_LONG_TOKEN_WITHIN_DAYS * 24 * 60 * 60); + if (selectedToken.expiry_tstamp < refreshThreshold) { + _log(`Token ${selectedToken.id.slice(-12)} cerca de expirar, intentando refresco...`, 'info'); + try { + const refreshedData = await _refreshMovistarLongToken(selectedToken); + if (refreshedData) { + _log(`Refresco de token largo ${selectedToken.id.slice(-12)} exitoso.`, 'success'); + await _saveLongTokenToDB(refreshedData); + selectedToken = refreshedData; + } else { + _log(`Refresco de token largo ${selectedToken.id.slice(-12)} fallido. Usando el actual.`, 'warning'); + } + } catch (refreshError) { + _log(`Error durante el refresco oportunista: ${refreshError.message}`, 'error'); + } + } + return selectedToken; +} + +async function doMovistarLoginAndGetTokens(username, password) { + _log(`LOGIN: Iniciando para usuario ${username}...`, 'info'); + let result = { success: false, message: "Error desconocido", shortToken: null, shortTokenExpiry: 0, longTokenData: null }; + + if (!username || !password) { + result.message = "Usuario o contraseña vacíos."; + _log(result.message, 'error'); + return result; + } + + try { + _log(`Realizando login para usuario: ${username}...`, 'info'); + const loginUrl = `${MOVISTAR_API_BASE}/auth/oauth2/token?deviceClass=android.tv`; + const loginHeaders = { + 'x-movistarplus-ui': MOVISTAR_UI_VERSION, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', + 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json, text/javascript, */*; q=0.01', + 'x-movistarplus-os': 'Windows10' + }; + const loginBody = new URLSearchParams({'grant_type': 'password', 'deviceClass': 'android.tv', 'username': username, 'password': password }); + const response = await fetch(loginUrl, { method: 'POST', headers: loginHeaders, body: loginBody.toString() }); + const respJson = await response.json(); + + if (!response.ok || !respJson.access_token) { + throw new Error(`Fallo en login: ${respJson.error_description || respJson.message || `Error ${response.status}`}`); + } + + const new_login_token = respJson.access_token; + const jwtPayload = _parseJwtPayload(new_login_token); + if (!jwtPayload || !jwtPayload.accountNumber || !jwtPayload.exp) { + throw new Error('Token de login inválido o incompleto.'); + } + const loggedInAccountNumber = jwtPayload.accountNumber; + const loggedInExpiry = jwtPayload.exp; + _log(`Login OK para cuenta: ${loggedInAccountNumber}`, 'success'); + + const functional_device_id = await _getOrCreateFunctionalDeviceId({ login_token: new_login_token, account_nbr: loggedInAccountNumber }); + if (!functional_device_id) throw new Error("No se pudo obtener/registrar Device ID funcional."); + _log(`Device ID funcional: ...${functional_device_id.slice(-6)}`, 'info'); + + let existingTokenId = `${M_LONG_TOKEN_PREFIX}${Date.now()}_login_${Math.random().toString(16).slice(2,8)}`; + const allExistingTokens = await _getAllLongTokensFromDB(); + const existingTokenForAccount = allExistingTokens.find(t => t.account_nbr === loggedInAccountNumber); + if (existingTokenForAccount) { + existingTokenId = existingTokenForAccount.id; + _log(`Token existente encontrado para ${loggedInAccountNumber} (ID: ...${existingTokenId.slice(-12)}). Se actualizará.`, 'info'); + } else { + _log(`Creando nuevo token para ${loggedInAccountNumber} (ID: ...${existingTokenId.slice(-12)}).`, 'info'); + } + + result.longTokenData = { + id: existingTokenId, login_token: new_login_token, account_nbr: loggedInAccountNumber, + expiry_tstamp: loggedInExpiry, device_id: functional_device_id + }; + await _saveLongTokenToDB(result.longTokenData); + await saveAppConfigValue(M_LAST_USED_TOKEN_ID_KEY, result.longTokenData.id); + await saveAppConfigValue(M_LAST_ROTATION_DATE_KEY, new Date().toISOString().slice(0, 10)); + _log(`Token largo ${existingTokenForAccount ? 'actualizado' : 'guardado'} en DB.`, 'info'); + + _log('Generando token CDN...', 'info'); + const sdpUrl = `${MOVISTAR_API_CLIENTSERVICES}/movistarplus/android.tv/sdp/mediaPlayers/${result.longTokenData.device_id}/initData?qspVersion=ssp&version=8&status=login`; + const sdpHeaders = { + 'x-movistarplus-ui': MOVISTAR_UI_VERSION, 'Authorization': `Bearer ${result.longTokenData.login_token}`, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 'Content-Type': 'application/json', 'Accept': 'application/json, text/javascript, */*; q=0.01', + 'x-movistarplus-deviceid': result.longTokenData.device_id, 'x-movistarplus-os': 'Windows10' + }; + const sdpPayload = { + 'accountNumber': result.longTokenData.account_nbr, 'sessionUserProfile': 0, 'streamMiscellanea': 'HTTPS', 'deviceType': 'WP_OTT', + 'deviceManufacturerProduct': 'Chrome', 'streamDRM': 'Widevine', 'streamFormat': 'DASH' + }; + const responseSDP = await fetch(sdpUrl, { method: 'POST', headers: sdpHeaders, body: JSON.stringify(sdpPayload) }); + const respJsonSDP = await responseSDP.json(); + if (!responseSDP.ok || !respJsonSDP.accessToken || !respJsonSDP.token) { throw new Error(`Fallo al obtener SDP init data: ${respJsonSDP.message || `Error ${responseSDP.status}`}.`); } + + const sdp_access_token = respJsonSDP.accessToken; + const hzid_token = respJsonSDP.token; + + const cdnTokenUrl = `${MOVISTAR_API_IDSERVER}/${result.longTokenData.account_nbr}/devices/android.tv/cdn/token/refresh`; + const cdnHeaders = { + 'Authorization': `Bearer ${sdp_access_token}`, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', + 'Content-Type': 'application/json', 'Accept': 'application/vnd.miviewtv.v1+json', 'X-HZId': hzid_token + }; + const responseCdn = await fetch(cdnTokenUrl, { method: 'POST', headers: cdnHeaders }); + const responseCdnText = await responseCdn.text(); + if (!responseCdn.ok) { throw new Error(`Fallo al obtener Token CDN: Error ${responseCdn.status} - ${responseCdnText.substring(0, 100)}`); } + let respJsonCdn; + try { respJsonCdn = JSON.parse(responseCdnText); } catch (e) { throw new Error("Respuesta CDN OK pero no JSON."); } + if (!respJsonCdn || !respJsonCdn.access_token) { throw new Error(`Fallo al obtener Token CDN: ${respJsonCdn?.message || 'No access_token'}`); } + + result.shortToken = respJsonCdn.access_token; + const cdnPayload = _parseJwtPayload(result.shortToken); + result.shortTokenExpiry = (cdnPayload && cdnPayload.exp) ? cdnPayload.exp : 0; + + await saveAppConfigValue(M_SHORT_TOKEN_KEY, result.shortToken); + await saveAppConfigValue(M_SHORT_TOKEN_EXPIRY_KEY, result.shortTokenExpiry); + _log(`Nuevo Token CDN obtenido (expira: ${new Date(result.shortTokenExpiry * 1000).toLocaleString()}) y guardado.`, 'success'); + + result.success = true; + result.message = "Login y obtención de tokens completados con éxito."; + + } catch (error) { + result.message = error.message; + _log(`Error en Login Movistar: ${error.message}`, 'error'); + } + return result; +} + +async function refreshMovistarCdnToken(forceNew = false) { + _log("REFRESH CDN: Iniciando...", 'info'); + let result = { success: false, message: "Error desconocido al refrescar CDN", shortToken: null, shortTokenExpiry: 0 }; + const nowSeconds = Math.floor(Date.now() / 1000); + const bufferSeconds = 60; // 1 minuto de buffer + + if (!forceNew) { + try { + const cachedToken = await getAppConfigValue(M_SHORT_TOKEN_KEY); + let cachedExpiry = await getAppConfigValue(M_SHORT_TOKEN_EXPIRY_KEY) || 0; + if (typeof cachedExpiry !== 'number') cachedExpiry = 0; + + if (cachedToken && cachedExpiry > (nowSeconds + bufferSeconds)) { + _log(`Usando token CDN cacheado (expira: ${new Date(cachedExpiry * 1000).toLocaleString()})`, 'info'); + result.shortToken = cachedToken; + result.shortTokenExpiry = cachedExpiry; + result.success = true; + result.message = "Token CDN obtenido de la caché."; + return result; + } else { + _log("Token CDN cacheado no válido o expirado. Procediendo a generar uno nuevo.", 'info'); + await deleteAppConfigValue(M_SHORT_TOKEN_KEY); + await deleteAppConfigValue(M_SHORT_TOKEN_EXPIRY_KEY); + } + } catch (cacheError) { + _log(`Error leyendo caché de token CDN: ${cacheError.message}. Generando nuevo.`, 'warning'); + } + } else { + _log("Forzando generación de nuevo token CDN.", 'info'); + } + + try { + const longTokenToUse = await _getValidLongTokenForCdnGeneration(); + if (!longTokenToUse) { + throw new Error("No se encontró token largo válido y funcional para generar CDN."); + } + _log(`Usando Token Largo ID: ...${longTokenToUse.id.slice(-12)} (Exp: ${new Date(longTokenToUse.expiry_tstamp * 1000).toLocaleDateString()})`, 'info'); + _log(`Con Device ID: ...${longTokenToUse.device_id.slice(-6)}`, 'info'); + + _log('Generando nuevo token CDN...', 'info'); + const sdpUrl = `${MOVISTAR_API_CLIENTSERVICES}/movistarplus/android.tv/sdp/mediaPlayers/${longTokenToUse.device_id}/initData?qspVersion=ssp&version=8&status=login`; + const sdpHeaders = { + 'x-movistarplus-ui': MOVISTAR_UI_VERSION, 'Authorization': `Bearer ${longTokenToUse.login_token}`, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 'Content-Type': 'application/json', 'Accept': 'application/json, text/javascript, */*; q=0.01', + 'x-movistarplus-deviceid': longTokenToUse.device_id, 'x-movistarplus-os': 'Windows10' + }; + const sdpPayload = { + 'accountNumber': longTokenToUse.account_nbr, 'sessionUserProfile': 0, 'streamMiscellanea': 'HTTPS', 'deviceType': 'WP_OTT', + 'deviceManufacturerProduct': 'Chrome', 'streamDRM': 'Widevine', 'streamFormat': 'DASH' + }; + const responseSDP = await fetch(sdpUrl, { method: 'POST', headers: sdpHeaders, body: JSON.stringify(sdpPayload) }); + const respJsonSDP = await responseSDP.json(); + if (!responseSDP.ok || !respJsonSDP.accessToken || !respJsonSDP.token) { throw new Error(`Fallo al obtener SDP init data (refresh): ${respJsonSDP.message || `Error ${responseSDP.status}`}.`); } + + const sdp_access_token = respJsonSDP.accessToken; + const hzid_token = respJsonSDP.token; + + const cdnTokenUrl = `${MOVISTAR_API_IDSERVER}/${longTokenToUse.account_nbr}/devices/android.tv/cdn/token/refresh`; + const cdnHeaders = { + 'Authorization': `Bearer ${sdp_access_token}`, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', + 'Content-Type': 'application/json', 'Accept': 'application/vnd.miviewtv.v1+json', 'X-HZId': hzid_token + }; + const responseCdn = await fetch(cdnTokenUrl, { method: 'POST', headers: cdnHeaders }); + const responseCdnText = await responseCdn.text(); + if (!responseCdn.ok) { throw new Error(`Fallo al obtener Token CDN (refresh): Error ${responseCdn.status} - ${responseCdnText.substring(0, 100)}`); } + let respJsonCdn; + try { respJsonCdn = JSON.parse(responseCdnText); } catch (e) { throw new Error("Respuesta CDN OK pero no JSON (refresh)."); } + if (!respJsonCdn || !respJsonCdn.access_token) { throw new Error(`Fallo al obtener Token CDN (refresh): ${respJsonCdn?.message || 'No access_token'}`); } + + result.shortToken = respJsonCdn.access_token; + const cdnPayload = _parseJwtPayload(result.shortToken); + result.shortTokenExpiry = (cdnPayload && cdnPayload.exp) ? cdnPayload.exp : 0; + + if (result.shortTokenExpiry <= Math.floor(Date.now() / 1000)) { + throw new Error("Token CDN generado (refresh) ya ha expirado."); + } + + await saveAppConfigValue(M_SHORT_TOKEN_KEY, result.shortToken); + await saveAppConfigValue(M_SHORT_TOKEN_EXPIRY_KEY, result.shortTokenExpiry); + _log(`Nuevo Token CDN obtenido vía refresh (expira: ${new Date(result.shortTokenExpiry * 1000).toLocaleString()}) y guardado.`, 'success'); + + result.success = true; + result.message = "Token CDN refrescado y guardado con éxito."; + + } catch (error) { + result.message = error.message; + _log(`Error refrescando token CDN: ${error.message}`, 'error'); + } + return result; +} + +async function getAllLongTokens() { + return _getAllLongTokensFromDB(); +} + +async function deleteLongToken(tokenId) { + _log(`Eliminando token largo (handler): ${tokenId.slice(-12)}`, 'info'); + await _deleteLongTokenFromDB(tokenId); + const lastUsedId = await getAppConfigValue(M_LAST_USED_TOKEN_ID_KEY); + if (lastUsedId === tokenId) { + await deleteAppConfigValue(M_LAST_USED_TOKEN_ID_KEY); + _log("Referencia a último token usado eliminada.", 'info'); + } +} + +async function validateAllLongTokens() { + _log("Validando todos los tokens largos...", 'info'); + const nowSeconds = Math.floor(Date.now() / 1000); + const refreshThresholdSeconds = M_REFRESH_LONG_TOKEN_WITHIN_DAYS * 24 * 60 * 60; + let report = { validated: 0, functional: 0, expired: 0, refreshed: 0, refreshErrors: 0, noDeviceId: 0 }; + + const tokens = await _getAllLongTokensFromDB(); + report.validated = tokens.length; + + for (const token of tokens) { + if (!token || !token.expiry_tstamp) continue; + + if (token.expiry_tstamp < nowSeconds) { + report.expired++; + } else { + if (!token.device_id) { + report.noDeviceId++; + } else { + report.functional++; + if (token.expiry_tstamp < (nowSeconds + refreshThresholdSeconds)) { + _log(`Token ${token.id.slice(-12)} cerca de expirar. Intentando refresco...`, 'info'); + try { + const refreshedData = await _refreshMovistarLongToken(token); + if (refreshedData) { + await _saveLongTokenToDB(refreshedData); + report.refreshed++; + _log(`Token ${token.id.slice(-12)} refrescado.`, 'success'); + } else { + report.refreshErrors++; + _log(`Fallo al refrescar token ${token.id.slice(-12)}.`, 'warning'); + } + } catch (e) { + report.refreshErrors++; + _log(`Error crítico al refrescar ${token.id.slice(-12)}: ${e.message}`, 'error'); + } + } + } + } + } + _log(`Validación completa: ${JSON.stringify(report)}`, 'info'); + return report; +} + +async function deleteExpiredLongTokens() { + _log("Eliminando tokens largos expirados...", 'info'); + const tokens = await _getAllLongTokensFromDB(); + const nowSeconds = Math.floor(Date.now() / 1000); + const expiredTokens = tokens.filter(t => !t || !t.expiry_tstamp || t.expiry_tstamp < nowSeconds); + let deletedCount = 0; + + if (expiredTokens.length === 0) { + _log("No hay tokens expirados para eliminar.", 'info'); + return 0; + } + + for (const token of expiredTokens) { + if (token && token.id) { + try { + await _deleteLongTokenFromDB(token.id); + const lastUsedId = await getAppConfigValue(M_LAST_USED_TOKEN_ID_KEY); + if(lastUsedId === token.id) await deleteAppConfigValue(M_LAST_USED_TOKEN_ID_KEY); + deletedCount++; + } catch (e) { + _log(`Error eliminando token expirado ${token.id.slice(-12)}: ${e.message}`, 'error'); + } + } + } + _log(`${deletedCount} tokens expirados eliminados.`, 'info'); + return deletedCount; +} + +async function addLongTokenManually(jwtTokenString, deviceId = null) { + _log(`Añadiendo token manualmente: ${jwtTokenString.substring(0,20)}...`, 'info'); + const payload = _parseJwtPayload(jwtTokenString); + if (!payload || !payload.accountNumber || !payload.exp) { + throw new Error('Token JWT inválido o no contiene accountNumber/exp.'); + } + + let deviceIdToUse = deviceId; + if (!deviceIdToUse) { + _log("No se proveyó Device ID, intentando obtener/registrar uno...", 'info'); + deviceIdToUse = await _getOrCreateFunctionalDeviceId({ + login_token: jwtTokenString, + account_nbr: payload.accountNumber + }); + if (!deviceIdToUse) throw new Error("Fallo al obtener/registrar Device ID automáticamente."); + _log(`Device ID obtenido/registrado: ...${deviceIdToUse.slice(-6)}`, 'info'); + } + + const newTokenData = { + id: `${M_LONG_TOKEN_PREFIX}${Date.now()}_manual_${Math.random().toString(16).slice(2)}`, + login_token: jwtTokenString, + account_nbr: payload.accountNumber, + expiry_tstamp: payload.exp, + device_id: deviceIdToUse + }; + await _saveLongTokenToDB(newTokenData); + _log(`Token manual guardado con ID: ${newTokenData.id.slice(-12)}`, 'success'); + return newTokenData; +} + +async function getMovistarDevicesForToken(longTokenId) { + _log(`Obteniendo dispositivos para token ID ${longTokenId.slice(-12)}...`, 'info'); + const tokenData = await getAppConfigValue(longTokenId); + if (!tokenData || !tokenData.login_token || !tokenData.account_nbr) { + throw new Error("Token largo no encontrado o inválido para obtener dispositivos."); + } + + const url = MOVISTAR_API_DEVICES_ENDPOINT.replace('{ACCOUNTNUMBER}', tokenData.account_nbr); + const headers = { + 'Authorization': `Bearer ${tokenData.login_token}`, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', + 'Accept': 'application/json, text/javascript, */*; q=0.01', 'x-movistarplus-ui': MOVISTAR_UI_VERSION, + 'x-movistarplus-os': 'Windows10', 'Origin': 'https://ver.movistarplus.es', 'Referer': 'https://ver.movistarplus.es/' + }; + const response = await fetch(url, { method: 'GET', headers: headers }); + const responseText = await response.text(); + if (!response.ok) { throw new Error(`Fallo al obtener dispositivos: ${response.status} ${responseText.substring(0,100)}`); } + const devicesApi = JSON.parse(responseText); + if (!Array.isArray(devicesApi)) { throw new Error("Respuesta de API de dispositivos inesperada."); } + + return devicesApi.filter(d => d && d.Id && d.Id !== '-').map(d => ({ + id: d.Id, + name: d.Name || `Dispositivo ${d.DeviceTypeCode || '?'}`, + type: d.DeviceTypeCode || '?', + reg_date: d.RegistrationDate ? new Date(d.RegistrationDate).toLocaleDateString() : 'N/D', + is_associated: d.Id === tokenData.device_id + })); +} + +async function associateDeviceToLongToken(longTokenId, deviceIdToAssociate) { + _log(`Asociando Device ID ${deviceIdToAssociate.slice(-6)} a Token ID ${longTokenId.slice(-12)}...`, 'info'); + const tokenData = await getAppConfigValue(longTokenId); + if (!tokenData) throw new Error("Token largo no encontrado para asociar dispositivo."); + if (tokenData.device_id === deviceIdToAssociate) { + _log("El dispositivo ya está asociado a este token.", 'info'); + return tokenData; + } + tokenData.device_id = deviceIdToAssociate; + await _saveLongTokenToDB(tokenData); + _log("Device ID asociado y token guardado.", 'success'); + return tokenData; +} + +async function registerAndAssociateNewDevice(longTokenId) { + _log(`Registrando nuevo dispositivo para Token ID ${longTokenId.slice(-12)}...`, 'info'); + const tokenData = await getAppConfigValue(longTokenId); + if (!tokenData || !tokenData.login_token || !tokenData.account_nbr) { + throw new Error("Token largo no encontrado o inválido para registrar nuevo dispositivo."); + } + + const url = MOVISTAR_API_REGISTER_DEVICE_ENDPOINT.replace('{ACCOUNTNUMBER}', tokenData.account_nbr); + const headers = { + 'Authorization': `Bearer ${tokenData.login_token}`, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', + 'Accept': 'application/json, text/javascript, */*; q=0.01', 'x-movistarplus-ui': MOVISTAR_UI_VERSION, + 'x-movistarplus-os': 'Windows10', 'Content-Type': 'application/json' + }; + const response = await fetch(url, { method: 'POST', headers: headers }); + const newDeviceIdText = await response.text(); + const newDeviceId = newDeviceIdText.trim().replace(/^"|"$/g, ''); + if (!response.ok || !newDeviceId || newDeviceId.length < 10) { + let errorMsg = `Fallo registro: ${response.status}`; + if (newDeviceIdText.length < 200 && !newDeviceIdText.includes('

    '); + + const yyyy = movistarVodSelectedDate.getFullYear(); + const mm = String(movistarVodSelectedDate.getMonth() + 1).padStart(2, '0'); + const dd = String(movistarVodSelectedDate.getDate()).padStart(2, '0'); + const dateString = `${yyyy}-${mm}-${dd}`; + + let jsonDataFromCache = null; + try { + const cachedRecord = await getMovistarVodData(dateString); + if (cachedRecord && cachedRecord.data && cachedRecord.timestamp) { + if ((new Date().getTime() - cachedRecord.timestamp) < MOVISTAR_VOD_CACHE_MAX_AGE_MS) { + jsonDataFromCache = cachedRecord.data; + showNotification("Datos VOD cargados desde caché local.", "info"); + } else { + showNotification("Datos VOD en caché expirados, obteniendo nuevos...", "info"); + } + } + } catch (e) { + console.warn("Error al cargar VOD desde caché:", e); + } + + try { + let processedDataForDisplay; + if (jsonDataFromCache) { + processedDataForDisplay = jsonDataFromCache; + } else { + const apiUrl = `${MOVISTAR_VOD_API_BASE_URL}?from=${dateString}T06:00:00&span=1&channel=&network=movistarplus&version=8.2&mdrm=true&tlsstream=true&demarcation=1`; + const response = await fetch(apiUrl); + if (!response.ok) { + throw new Error(`Error HTTP ${response.status} al cargar VOD.`); + } + const rawJsonData = await response.json(); + + let processedProgramsToCache = []; + if (Array.isArray(rawJsonData)) { + rawJsonData.forEach(channelProgramArray => { + if (Array.isArray(channelProgramArray)) { + channelProgramArray.forEach(prog => { + processedProgramsToCache.push({ + Titulo: prog.Titulo, + CanalNombre: prog.Canal?.Nombre, + CanalServiceUid2: prog.Canal?.ServiceUid2, + FechaHoraInicio: prog.FechaHoraInicio, + FechaHoraFin: prog.FechaHoraFin, + Duracion: prog.Duracion, + GeneroComAntena: prog.GeneroComAntena, + Ficha: prog.Ficha, + IdPrograma: prog.IdPrograma, + ImagenMiniatura: prog.ImagenMiniatura + }); + }); + } + }); + } + processedDataForDisplay = processedProgramsToCache; + + try { + await saveMovistarVodData(dateString, { data: processedProgramsToCache, timestamp: new Date().getTime() }); + const deletedOldCount = await deleteOldMovistarVodData(userSettings.movistarVodCacheDaysToKeep); + if (deletedOldCount > 0) { + console.log(`Se eliminaron ${deletedOldCount} registros VOD antiguos de la caché.`); + if (typeof updateMovistarVodCacheStatsUI === 'function') { + updateMovistarVodCacheStatsUI(); + } + } + } catch(dbError) { + console.warn("Error guardando/limpiando VOD en DB:", dbError); + showNotification("Error guardando datos VOD en caché local.", "warning"); + } + } + + movistarVodData = Array.isArray(processedDataForDisplay) ? processedDataForDisplay : []; + + movistarVodChannelMap = {}; + movistarVodGenreMap = {}; + const seenChannelIds = new Set(); + movistarVodOrderedChannels = []; + + if (movistarVodData.length === 0) { + noResultsP.removeClass('d-none'); + programsContainer.empty(); + } else { + movistarVodData.forEach(prog => { + if (prog.CanalServiceUid2 && prog.CanalNombre) { + if (!seenChannelIds.has(prog.CanalServiceUid2)) { + movistarVodOrderedChannels.push({ id: prog.CanalServiceUid2, name: prog.CanalNombre }); + seenChannelIds.add(prog.CanalServiceUid2); + } + movistarVodChannelMap[prog.CanalServiceUid2] = prog.CanalNombre; + } + if (prog.GeneroComAntena && !movistarVodGenreMap[prog.GeneroComAntena]) { + movistarVodGenreMap[prog.GeneroComAntena] = prog.GeneroComAntena; + } + }); + } + + if (userSettings.useMovistarVodAsEpg && typeof updateEpgWithMovistarVodData === 'function') { + await updateEpgWithMovistarVodData(dateString, movistarVodData); + } + + movistarVodCurrentPage = 1; + populateMovistarVODFilters(); + renderMovistarVODPrograms(); + + } catch (error) { + console.error("Error al cargar Movistar VOD data:", error); + showNotification(`Error cargando EPG VOD: ${error.message}`, 'error'); + programsContainer.empty(); + noResultsP.removeClass('d-none'); + movistarVodData = []; + movistarVodChannelMap = {}; + movistarVodGenreMap = {}; + populateMovistarVODFilters(); + } finally { + showLoading(false); + } +} + +function populateMovistarVODFilters() { + const channelFilter = $('#movistarVODModal-channel-filter').empty().append(''); + const genreFilter = $('#movistarVODModal-genre-filter').empty().append(''); + + movistarVodOrderedChannels.forEach(ch => { + channelFilter.append(``); + }); + + if (movistarVodSelectedChannelId && movistarVodChannelMap[movistarVodSelectedChannelId]) { + channelFilter.val(movistarVodSelectedChannelId); + } + + const sortedGenres = Object.keys(movistarVodGenreMap).sort((a,b) => a.localeCompare(b)); + sortedGenres.forEach(genre => { + genreFilter.append(``); + }); + if (movistarVodSelectedGenre && movistarVodGenreMap[movistarVodSelectedGenre]) { + genreFilter.val(movistarVodSelectedGenre); + } +} + +function renderMovistarVODPrograms() { + movistarVodSelectedChannelId = $('#movistarVODModal-channel-filter').val(); + movistarVodSelectedGenre = $('#movistarVODModal-genre-filter').val(); + movistarVodSearchTerm = $('#movistarVODModal-search-input').val().toLowerCase().trim(); + + movistarVodFilteredPrograms = movistarVodData.filter(prog => { + if (movistarVodSelectedChannelId && prog.CanalServiceUid2 !== movistarVodSelectedChannelId) return false; + if (movistarVodSelectedGenre && prog.GeneroComAntena !== movistarVodSelectedGenre) return false; + if (movistarVodSearchTerm && !prog.Titulo?.toLowerCase().includes(movistarVodSearchTerm)) return false; + return true; + }); + + movistarVodCurrentPage = 1; + displayCurrentMovistarVODPage(); + updateMovistarVODPaginationControls(); +} + +async function displayCurrentMovistarVODPage() { + const programsContainer = $('#movistarVODModal-programs').empty(); + const noResultsP = $('#movistarVODModal-no-results'); + + const startIndex = (movistarVodCurrentPage - 1) * MOVISTAR_VOD_ITEMS_PER_PAGE; + const endIndex = startIndex + MOVISTAR_VOD_ITEMS_PER_PAGE; + const programsToDisplay = movistarVodFilteredPrograms.slice(startIndex, endIndex); + + if (programsToDisplay.length > 0) { + noResultsP.addClass('d-none'); + const fragment = document.createDocumentFragment(); + + const imageFetchPromises = programsToDisplay.map(async (prog) => { + let finalImageUrl = prog.ImagenMiniatura || 'icons/icon128.png'; + if (prog.Ficha) { + try { + const response = await fetch(prog.Ficha); + if (response.ok) { + const fichaData = await response.json(); + if (fichaData && fichaData.Imagen) { + finalImageUrl = fichaData.Imagen; + } + } + } catch (e) { + console.error(`Error en fetch a ${prog.Ficha} para ${prog.Titulo}: ${e}`); + } + } + return finalImageUrl; + }); + + const imageUrls = await Promise.all(imageFetchPromises); + + programsToDisplay.forEach((prog, index) => { + const imageUrl = imageUrls[index]; + const card = document.createElement('div'); + card.className = 'movistar-vod-card'; + card.dataset.programArrayIndex = startIndex + index; + + const startTime = new Date(parseInt(prog.FechaHoraInicio)).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); + const endTime = new Date(parseInt(prog.FechaHoraFin)).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); + + card.innerHTML = ` +
    + ${escapeHtml(prog.Titulo || '')} +
    +
    +
    ${escapeHtml(prog.Titulo || 'Sin título')}
    +

    ${escapeHtml(prog.CanalNombre || 'Desconocido')}

    +

    ${startTime} - ${endTime} (${prog.Duracion} min)

    + ${prog.GeneroComAntena ? `

    ${escapeHtml(prog.GeneroComAntena)}

    ` : ''} +
    + `; + fragment.appendChild(card); + }); + programsContainer.append(fragment); + } else { + noResultsP.removeClass('d-none'); + } +} + +function updateMovistarVODPaginationControls() { + const totalItems = movistarVodFilteredPrograms.length; + const totalPages = Math.max(1, Math.ceil(totalItems / MOVISTAR_VOD_ITEMS_PER_PAGE)); + const controlsContainer = $('#movistarVODModal-pagination-controls'); + const pageInfoSpan = $('#movistarVODModal-page-info'); + const prevButton = $('#movistarVODModal-prev-page'); + const nextButton = $('#movistarVODModal-next-page'); + + if (totalPages <= 1) { + controlsContainer.hide(); + return; + } + + controlsContainer.show(); + pageInfoSpan.text(`Página ${movistarVodCurrentPage} de ${totalPages} (${totalItems} resultados)`); + prevButton.prop('disabled', movistarVodCurrentPage === 1); + nextButton.prop('disabled', movistarVodCurrentPage === totalPages); +} + +function handleMovistarVODProgramClick(programData) { + showMovistarVODProgramDetailsModal(programData); +} + +async function showMovistarVODProgramDetailsModal(programData) { + const modalBody = $('#movistarVODProgramDetailsBody').empty(); + const modalLabel = $('#movistarVODProgramDetailsModalLabel'); + const playButton = $('#playMovistarVODProgramFromDetailsBtn').off('click'); + const addButton = $('#addMovistarVODToM3UFromDetailsBtn').off('click'); + + modalLabel.text(escapeHtml(programData.Titulo || 'Detalles del Programa')); + + let imageUrl = programData.ImagenMiniatura || 'icons/icon128.png'; + let fichaData = null; + + if (programData.Ficha) { + try { + showLoading(true, "Cargando detalles..."); + const response = await fetch(programData.Ficha); + if (response.ok) { + fichaData = await response.json(); + if (fichaData && fichaData.Imagen) { + imageUrl = fichaData.Imagen; + } + } + } catch (e) { + console.error(`Error obteniendo ficha para ${programData.Titulo}: ${e}`); + showNotification("Error cargando detalles adicionales del programa.", "warning"); + } finally { + showLoading(false); + } + } + + let detailsHtml = `
    ${escapeHtml(programData.Titulo)}
    `; + + detailsHtml += `
    ${escapeHtml(programData.Titulo || 'Sin título')}
    `; + detailsHtml += `

    Canal: ${escapeHtml(programData.CanalNombre || 'Desconocido')}

    `; + detailsHtml += `

    Duración: ${escapeHtml(formatVodDuration(programData.Duracion))}

    `; + if (fichaData?.Anno) detailsHtml += `

    Año: ${escapeHtml(fichaData.Anno)}

    `; + if (fichaData?.Nacionalidad) detailsHtml += `

    Nacionalidad: ${escapeHtml(fichaData.Nacionalidad)}

    `; + + const description = fichaData?.Descripcion || fichaData?.Sinopsis; + if (description) detailsHtml += `

    Descripción: ${escapeHtml(description)}

    `; + if (fichaData?.Actores) detailsHtml += `

    Actores: ${escapeHtml(fichaData.Actores)}

    `; + if (fichaData?.Directores) detailsHtml += `

    Directores: ${escapeHtml(fichaData.Directores)}

    `; + if (fichaData?.Valoracion?.Valoracion) { + detailsHtml += `

    Valoración: ${escapeHtml(fichaData.Valoracion.Valoracion.toFixed(1))}⭐ (${escapeHtml(fichaData.Valoracion.Valoraciones)} votos)

    `; + } + detailsHtml += `
    `; + modalBody.html(detailsHtml); + + playButton.on('click', () => { + handlePlayCatchup(null, programData); + $('#movistarVODProgramDetailsModal').modal('hide'); + }); + + addButton.on('click', () => { + addMovistarVODToM3U(programData, fichaData); + }); + + $('#movistarVODProgramDetailsModal').modal('show'); +} + +function formatVodDuration(minutes) { + if (isNaN(minutes) || minutes <= 0) return 'N/D'; + const h = Math.floor(minutes / 60); + const m = minutes % 60; + let str = ''; + if (h > 0) str += `${h}h `; + if (m > 0) str += `${m}min`; + return str.trim() || `${minutes} min`; +} + +async function addMovistarVODToM3U(programData, fichaData) { + if (!channels || channels.length === 0) { + showNotification("Debes tener una lista M3U de Movistar+ cargada para añadir contenido VOD/Catchup.", "warning"); + return; + } + const serviceUid2 = programData.CanalServiceUid2; + if (!serviceUid2) { + showNotification("El programa seleccionado no tiene un ServiceUid2 válido para buscar el canal M3U base.", "error"); + return; + } + const m3uChannelBase = channels.find(ch => { + if (ch.url && (ch.url.includes(`/${serviceUid2}/`) || ch.url.includes(`/CVXCH${serviceUid2}/`))) return true; + const tvgIdServiceUid = ch['tvg-id'] ? ch['tvg-id'].split('.').pop() : null; + if (tvgIdServiceUid === serviceUid2) return true; + if (ch.attributes && ch.attributes['ch-number'] && ch.attributes['ch-number'] === serviceUid2) return true; + return false; + }); + if (!m3uChannelBase) { + showNotification(`No se encontró el canal M3U base (${programData.CanalNombre || serviceUid2}) en tu lista actual para añadir el VOD.`, "warning"); + return; + } + + const programStartTime = new Date(parseInt(programData.FechaHoraInicio)); + const programEndTime = new Date(parseInt(programData.FechaHoraFin)); + const catchupUrl = buildMovistarCatchupUrl(m3uChannelBase, programStartTime, programEndTime); + + if (!catchupUrl) { + showNotification("No se pudo generar la URL de catchup para este programa/canal.", "error"); + return; + } + + const newVodChannelObject = { + name: `${programData.Titulo || 'Programa VOD'} (${m3uChannelBase.name})`, + url: catchupUrl, + 'tvg-id': `vod.${programData.IdPrograma}_${serviceUid2}`, + 'tvg-logo': fichaData?.Imagen || programData.ImagenMiniatura || m3uChannelBase['tvg-logo'] || '', + 'group-title': `VOD - ${m3uChannelBase['group-title'] || programData.CanalNombre || 'Movistar'}`, + attributes: { + 'tvg-id': `vod.${programData.IdPrograma}_${serviceUid2}`, + 'tvg-logo': fichaData?.Imagen || programData.ImagenMiniatura || m3uChannelBase['tvg-logo'] || '', + 'group-title': `VOD - ${m3uChannelBase['group-title'] || programData.CanalNombre || 'Movistar'}`, + duration: programData.Duracion || -1, + }, + kodiProps: { ...m3uChannelBase.kodiProps, 'inputstream.adaptive.play_timeshift_buffer': 'true' }, + vlcOptions: { ...m3uChannelBase.vlcOptions }, + extHttp: { ...m3uChannelBase.extHttp }, + sourceOrigin: m3uChannelBase.sourceOrigin || `movistar-vod-${serviceUid2}` + }; + + channels.push(newVodChannelObject); + const newGroup = newVodChannelObject['group-title']; + if (currentGroupOrder && !currentGroupOrder.includes(newGroup)) { + currentGroupOrder.push(newGroup); + } + if (typeof regenerateCurrentM3UContentFromString === 'function') regenerateCurrentM3UContentFromString(); + if (typeof filterAndRenderChannels === 'function') filterAndRenderChannels(); + + showNotification(`"${escapeHtml(programData.Titulo)}" añadido a la lista M3U.`, "success"); + $('#movistarVODProgramDetailsModal').modal('hide'); +} + +function toISOUTCString(date) { + if (!(date instanceof Date) || isNaN(date.getTime())) return null; + + const year = date.getUTCFullYear(); + const month = String(date.getUTCMonth() + 1).padStart(2, '0'); + const day = String(date.getUTCDate()).padStart(2, '0'); + const hours = String(date.getUTCHours()).padStart(2, '0'); + const minutes = String(date.getUTCMinutes()).padStart(2, '0'); + const seconds = String(date.getUTCSeconds()).padStart(2, '0'); + + return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}Z`; +} + +function buildMovistarCatchupUrl(originalM3UChannel, programStartDt, programEndDt) { + if (!originalM3UChannel || !originalM3UChannel.url || !programStartDt || !programEndDt) { + console.error("buildMovistarCatchupUrl: Parámetros inválidos."); + return null; + } + + const originalUrlStr = originalM3UChannel.url; + if (!originalUrlStr.toLowerCase().includes('.cdn.telefonica.com/') && !originalUrlStr.toLowerCase().includes('.movistarplus.es/')) { + console.warn("buildMovistarCatchupUrl: La URL no parece ser de Movistar CDN:", originalUrlStr); + return null; + } + + let serviceIdFromM3U = null; + const serviceIdRegexes = [ + /\/(\d{3,6})\/vxfmt=dp\//i, + /\/CVXCH(\d{3,6})\//i, + /\/([A-Za-z0-9_-]+)\.MS\/vxfmt=dp/i + ]; + + let serviceIdFromUrl = null; + for (const regex of serviceIdRegexes) { + const match = originalUrlStr.match(regex); + if (match && match[1]) { + serviceIdFromUrl = match[1]; + break; + } + } + + if (originalM3UChannel['tvg-id']) { + const tvgId = String(originalM3UChannel['tvg-id']); + const idParts = tvgId.split('.'); + const potentialIdFromTvg = idParts[idParts.length - 1]; + if (/^\d+$/.test(potentialIdFromTvg) || potentialIdFromTvg.includes('.MS')) { + serviceIdFromM3U = potentialIdFromTvg; + } else if (originalM3UChannel.attributes && originalM3UChannel.attributes['ch-number'] && /^\d+$/.test(originalM3UChannel.attributes['ch-number'])) { + serviceIdFromM3U = originalM3UChannel.attributes['ch-number']; + } + } else if (originalM3UChannel.attributes && originalM3UChannel.attributes['ch-number'] && /^\d+$/.test(originalM3UChannel.attributes['ch-number'])) { + serviceIdFromM3U = originalM3UChannel.attributes['ch-number']; + } + + const effectiveServiceIdForPath = serviceIdFromUrl || serviceIdFromM3U; + + if (!effectiveServiceIdForPath) { + console.warn("buildMovistarCatchupUrl: No se pudo extraer un Service ID válido de la URL del canal o del M3U:", originalUrlStr, "tvg-id:", originalM3UChannel['tvg-id']); + return null; + } + + const domainMatch = originalUrlStr.match(/https?:\/\/([^/]+)/); + if (!domainMatch || !domainMatch[1]) { + console.warn("buildMovistarCatchupUrl: No se pudo extraer el dominio de la URL del canal:", originalUrlStr); + return null; + } + const domain = domainMatch[1]; + + const startTimeStr = toISOUTCString(programStartDt); + const endTimeStr = toISOUTCString(programEndDt); + + if (!startTimeStr || !endTimeStr) { + console.warn("buildMovistarCatchupUrl: Fechas de inicio o fin del programa inválidas para catchup."); + return null; + } + + let originalUrlObj; + try { + originalUrlObj = new URL(originalUrlStr); + } catch (e) { + console.error("buildMovistarCatchupUrl: URL original inválida:", originalUrlStr, e); + return null; + } + + let basePathForCatchup; + const originalPath = originalUrlObj.pathname; + const liveStreamSuffix = "/vxfmt=dp/Manifest.mpd"; + const indexOfLiveSuffix = originalPath.lastIndexOf(liveStreamSuffix); + + if (indexOfLiveSuffix !== -1) { + const channelPathPrefix = originalPath.substring(0, indexOfLiveSuffix); + basePathForCatchup = `${channelPathPrefix}${liveStreamSuffix}`; + } else { + basePathForCatchup = `/${effectiveServiceIdForPath}${liveStreamSuffix}`; + } + + basePathForCatchup = basePathForCatchup.replace(/\/\//g, '/'); + if (!basePathForCatchup.startsWith('/')) { + basePathForCatchup = '/' + basePathForCatchup; + } + + const queryParamsToEncode = new URLSearchParams(); + originalUrlObj.searchParams.forEach((value, key) => { + const lowerKey = key.toLowerCase(); + if (lowerKey !== 'start_time' && lowerKey !== 'end_time' && lowerKey !== 'token') { + queryParamsToEncode.set(key, value); + } + }); + + if (!queryParamsToEncode.has('device_profile')) { + queryParamsToEncode.set('device_profile', 'DASH_TV_WIDEVINE'); + } + + let encodedQueryPart = queryParamsToEncode.toString(); + let timeParamsStringPart = `start_time=${startTimeStr}&end_time=${endTimeStr}`; + + let finalQueryString; + if (encodedQueryPart) { + finalQueryString = `${encodedQueryPart}&${timeParamsStringPart}`; + } else { + finalQueryString = timeParamsStringPart; + } + + const finalCatchupUrl = `https://${domain}${basePathForCatchup}?${finalQueryString}`; + return finalCatchupUrl; +} \ No newline at end of file diff --git a/orange_tv_client.js b/orange_tv_client.js new file mode 100644 index 0000000..7b61e87 --- /dev/null +++ b/orange_tv_client.js @@ -0,0 +1,675 @@ +const ORANGE_IDENTITY_KEY = "orangeTvIdentityCookie"; + +const URL_BASE_API_MOB_JS = 'https://android.orangetv.orange.es/mob/api/rtv/v1'; +const URL_BASE_API_PC_JS = 'https://pc.orangetv.orange.es/pc/api/rtv/v1'; +const URL_BASE_IMAGES_PC_JS = `${URL_BASE_API_PC_JS}/images`; + +const MODEL_EXTERNAL_IDS_FOR_TERMINALS_JS = ['AKS19', 'HUM18', 'SAG22']; +const BOUQUET_ID_FOR_CHANNELS_PC_JS = '1'; +const MODEL_ID_FOR_CHANNELS_PC_JS = 'PC'; + +const MAX_WORKERS_CHANNELS_JS = 10; + +const ORANGE_TV_API_HOST_MOB = "android.orangetv.orange.es"; +const ORANGE_TV_API_HOST_PC = "pc.orangetv.orange.es"; + + +const CHANNEL_SPECIFIC_CLEARKEYS_JS = { + "r11_la1": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_la2": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_antena3": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_cuatro": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_telecinco": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_lasexta": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r13_selekt": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_starchannel": {"kid": "MD7N7urJAQtF5oTryeF1lA", "k": "BxIdiu1Rx7vYBGGUUXw/Eg"}, + "r11_amc": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_tnt": {"kid": "VypQBxqrMWM4PmRW+hcBdQ", "k": "hj7H6C6K0HjZ4ICxwLpi0g"}, + "r11_axn": {"kid": "DhwwYB1i4nchlODT7uz1Xw", "k": "D314t8hAHWaGkMSTCwhh+Q"}, + "r11_comedy": {"kid": "Z8AqZy5+h+KXz6dQPeew4g", "k": "YK2xLXIvkk7cGhow+MNJ1Q"}, + "r11_calle13": {"kid": "MW3cMBCG06kSHBrb1nIXyA", "k": "J6EXwkkHdU+L1+iTe3IQxg"}, + "r11_xtrm": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_scifi": {"kid": "MW3cMBCG06kSHBrb1nIXyA", "k": "J6EXwkkHdU+L1+iTe3IQxg"}, + "r11_cosmo": {"kid": "6XvuzxKLh3MNzpOFl2+PAQ", "k": "loe9Tcqr+hlepdH88g7nKg"}, + "r13_enfamilia": {"kid": "F2gY9e6GDV4KP0kErIgBKg", "k": "BZEt/FNCoTx8YSZS72Tgig"}, + "r13_fdf": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_neox": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_energy": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_atreseries": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r13_divinity": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_nova": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_hollywood": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_axnwhite": {"kid": "DhwwYB1i4nchlODT7uz1Xw", "k": "D314t8hAHWaGkMSTCwhh+Q"}, + "r11_somos": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r13_bomcine": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r13_squirrel": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r11_tcm": {"kid": "VypQBxqrMWM4PmRW+hcBdQ", "k": "hj7H6C6K0HjZ4ICxwLpi0g"}, + "r11_sundance": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_dark": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_paramount": {"kid": "IsjmUI4McB6wmNGYoR8rEA", "k": "Mzk+KGJVxi5ho9Xtk40vHg"}, + "r11_bemad": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_historia": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_nat_geo": {"kid": "MD7N7urJAQtF5oTryeF1lA", "k": "BxIdiu1Rx7vYBGGUUXw/Eg"}, + "r11_blaze": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_odisea": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_discovery": {"kid": "vB3XOgolNBAnPnx3RaJhCQ", "k": "jkxJcB1cWDLDKMmdIoLdqQ"}, + "r11_natgeowild": {"kid": "MD7N7urJAQtF5oTryeF1lA", "k": "BxIdiu1Rx7vYBGGUUXw/Eg"}, + "r11_crimeninvestigacion": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_cocina": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_decasahd": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r13_solmusica": {"kid": "27o7zoN8t7LH7Jq5VycTMg", "k": "+fxpwwObxHptQxQms4C+LA"}, + "r11_mega": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r13_dmax": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r13_ten": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_disneychan": {"kid": "j1CZ9MDi/2+moKofzwo2TA", "k": "ImOtSX+6rDn7Ca1RSCS3GA"}, + "r11_disney_jr": {"kid": "j1CZ9MDi/2+moKofzwo2TA", "k": "ImOtSX+6rDn7Ca1RSCS3GA"}, + "r11_nick": {"kid": "Z8AqZy5+h+KXz6dQPeew4g", "k": "YK2xLXIvkk7cGhow+MNJ1Q"}, + "r11_nickjr": {"kid": "Z8AqZy5+h+KXz6dQPeew4g", "k": "YK2xLXIvkk7cGhow+MNJ1Q"}, + "r11_dreamworks": {"kid": "MW3cMBCG06kSHBrb1nIXyA", "k": "J6EXwkkHdU+L1+iTe3IQxg"}, + "r11_boing": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r11_clanhd": {"kid": "IsjmUI4McB6wmNGYoR8rEA", "k": "Mzk+KGJVxi5ho9Xtk40vHg"}, + "r12_eurosport": {"kid": "vB3XOgolNBAnPnx3RaJhCQ", "k": "jkxJcB1cWDLDKMmdIoLdqQ"}, + "r12_eurosport2": {"kid": "vB3XOgolNBAnPnx3RaJhCQ", "k": "jkxJcB1cWDLDKMmdIoLdqQ"}, + "r11_tdphd": {"kid": "IsjmUI4McB6wmNGYoR8rEA", "k": "Mzk+KGJVxi5ho9Xtk40vHg"}, + "r12_daznlaliga": {"kid": "Yemhb9f6RnnLUcgfyqhynw", "k": "kpmfl/9O5uxSpg1JD7PxTA"}, + "r14ll_mlaliga": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mlaliga": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_daznlaliga2": {"kid": "Yemhb9f6RnnLUcgfyqhynw", "k": "kpmfl/9O5uxSpg1JD7PxTA"}, + "r12_mlaliga2": {"kid": "Yemhb9f6RnnLUcgfyqhynw", "k": "kpmfl/9O5uxSpg1JD7PxTA"}, + "r12_mlaliga3": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mlaliga4": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones7": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mlaliga6": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones5": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones6": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones4": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r14ll_mcampeones": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones-hdr": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones2-hdr": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones2": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones3": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_laligasmartbank": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_laligasmartbank2": {"kid": "AiSxNfL5UCr/+cszVRwIgQ", "k": "URcFiCvQispOGhKKfZuoEw"}, + "r12_laligasmartbank3": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_laligaplus": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r13_nautical": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r12_gol": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r13_realmadridconti": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r12_betis": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r13_motoadv": {"kid": "iukRwhaDykixDta5JRJyGA", "k": "IPzNiyCJIrIMclkEWZCKVg"}, + "r11_mtv": {"kid": "Z8AqZy5+h+KXz6dQPeew4g", "k": "YK2xLXIvkk7cGhow+MNJ1Q"}, + "r13_ubeat": {"kid": "JjJYKDacD2UbHQKAMWcWeA", "k": "2oVeLpuI43GyrGj4W5VgaQ"}, + "r13_gametoon": {"kid": "JjJYKDacD2UbHQKAMWcWeA", "k": "2oVeLpuI43GyrGj4W5VgaQ"}, + "r13_dkiss": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r13_myzen": {"kid": "3J1au8Je3Q/LRcXw3k/p5A", "k": "tVbv93kAFfDl+F8zk+zOqg"}, + "r13_outtv": {"kid": "3J1au8Je3Q/LRcXw3k/p5A", "k": "tVbv93kAFfDl+F8zk+zOqg"}, + "r11_mtvlive": {"kid": "Z8AqZy5+h+KXz6dQPeew4g", "k": "YK2xLXIvkk7cGhow+MNJ1Q"}, + "r11_vh1": {"kid": "Z8AqZy5+h+KXz6dQPeew4g", "k": "YK2xLXIvkk7cGhow+MNJ1Q"}, + "r13_mezzo": {"kid": "6di3sjutuhXFL8S3Uqiw8Q", "k": "1sFtN5OtzTjtxLuRRc4gIA"}, + "r13_tr3ce": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r13_intereconomia": {"kid": "IsjmUI4McB6wmNGYoR8rEA", "k": "Mzk+KGJVxi5ho9Xtk40vHg"}, + "r13_ewtn": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r13_andalucia": {"kid": "IsjmUI4McB6wmNGYoR8rEA", "k": "Mzk+KGJVxi5ho9Xtk40vHg"}, + "r12_realmadrid": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r13_tv3i": {"kid": "IsjmUI4McB6wmNGYoR8rEA", "k": "Mzk+KGJVxi5ho9Xtk40vHg"}, + "r13_tvgi": {"kid": "IsjmUI4McB6wmNGYoR8rEA", "k": "Mzk+KGJVxi5ho9Xtk40vHg"}, + "r13_eitb": {"kid": "IsjmUI4McB6wmNGYoR8rEA", "k": "Mzk+KGJVxi5ho9Xtk40vHg"}, + "r11_24h": {"kid": "9nV6vfcUs6Qjf/R3niFDXA", "k": "+Hf9yEn6OF2o4ornglSp0g"}, + "r13_euronews": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r13_bbc": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r13_11internacional": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r13_aljazeera": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r13_caracoltv": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r13_protv": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r13_tv5": {"kid": "WwxMD+1K/NItX7qazKZ4ig", "k": "NmFTcN1vRo26EkWPoOOq/Q"}, + "r12_daznlaliga3": {"kid": "Yemhb9f6RnnLUcgfyqhynw", "k": "kpmfl/9O5uxSpg1JD7PxTA"}, + "r12_mcampeones8": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones9": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones10": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones11": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones12": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones13": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones14": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones15": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones16": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones17": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones18": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"}, + "r12_mcampeones19": {"kid": "hQwaQwOWzkJV85Ar8fTolw", "k": "KVsduXf5Tfu6ASBzkBoBmw"} +}; + +class NotAuthenticatedError extends Error { + constructor(message) { + super(message); + this.name = "NotAuthenticatedError"; + } +} + +async function setDynamicHeaders(headersArray, targetHost = null) { + if (!chrome.runtime?.id) { + return; + } + try { + const message = { + cmd: "updateHeadersRules", + requestHeaders: headersArray + }; + if (targetHost) { + message.urlFilter = `*://${targetHost}/*`; + } else { + message.urlFilter = `*://${ORANGE_TV_API_HOST_MOB}/*,*://${ORANGE_TV_API_HOST_PC}/*`; + } + + const response = await chrome.runtime.sendMessage(message); + if (!response || !response.success) { + console.error("Error al configurar cabeceras dinámicas:", response?.error || "Respuesta no exitosa."); + showNotification("Error crítico configurando cabeceras de red.", "error"); + } + } catch (e) { + console.error("Excepción al enviar mensaje para configurar cabeceras dinámicas:", e); + showNotification("Excepción configurando cabeceras de red.", "error"); + } +} + +async function clearAllDynamicHeaders() { + if (!chrome.runtime?.id) return; + try { + await chrome.runtime.sendMessage({ cmd: "clearAllDnrHeaders" }); + } catch (e) { + console.error("Excepción al limpiar cabeceras dinámicas:", e); + } +} + + +async function loginOrangeMob() { + console.log("Paso 1: Intentando iniciar sesión (Mob API)..."); + showNotification("Iniciando sesión en OrangeTV (Mob API)...", "info"); + + await clearAllDynamicHeaders(); + + const orangeUsername = userSettings.orangeTvUsername; + const orangePassword = userSettings.orangeTvPassword; + + const fetchHeaders = { + 'Content-Type': 'application/x-www-form-urlencoded', + 'User-Agent': 'okhttp/4.10.0' + }; + const loginUrl = `${URL_BASE_API_MOB_JS}/Login?username=${orangeUsername}`; + const loginDataStr = `client=json&username=${orangeUsername}&password=${orangePassword}`; + + try { + const response = await fetch(loginUrl, { + method: 'POST', + headers: fetchHeaders, + body: loginDataStr, + credentials: 'omit' + }); + + if (!response.ok) { + const errorText = await response.text(); + console.error(`Paso 1: HTTP error en Login (Mob API): ${response.status}`, errorText.substring(0,500)); + showNotification(`Error en login (Mob): ${response.status}`, "error"); + return null; + } + + const responseJson = await response.json(); + if (responseJson?.response?.status === 'SUCCESS' && responseJson?.response?.message?.startsWith('identity=')) { + const identityCookieStr = responseJson.response.message; + console.log(`Paso 1: ¡Login (Mob API) exitoso! Cookie: ${identityCookieStr.substring(0, 20)}...`); + showNotification("Login (Mob API) exitoso.", "success"); + await saveAppConfigValue(ORANGE_IDENTITY_KEY, identityCookieStr); + return identityCookieStr; + } else { + console.error("Paso 1: Login (Mob API) fallido o formato inesperado.", responseJson); + showNotification("Login (Mob API) fallido. Revisa las credenciales.", "error"); + return null; + } + } catch (e) { + console.error("Error de red o JSON en Login (Mob API):", e); + showNotification("Error de red en login (Mob).", "error"); + return null; + } +} + +async function loadIdentityFromDB() { + try { + const identityStr = await getAppConfigValue(ORANGE_IDENTITY_KEY); + if (identityStr && identityStr.startsWith("identity=")) { + console.log(`Cookie '${identityStr.substring(0,20)}...' cargada desde IndexedDB.`); + return identityStr; + } + } catch (e) { + console.error("Error al cargar cookie desde IndexedDB:", e); + } + return null; +} + +async function getIdentityCookie() { + let identity = await loadIdentityFromDB(); + if (identity) { + return identity; + } + + console.warn("Cookie no válida/inexistente. Iniciando sesión (Mob API)..."); + showNotification("Cookie de OrangeTV no encontrada, intentando nuevo login...", "info"); + return await loginOrangeMob(); +} + +async function apiRequestMob(method, endpoint, identityCookieStr, params = null, bodyData = null, includeHouseholdId = false) { + let url = `${URL_BASE_API_MOB_JS}${endpoint}`; + if (params) { + url += `?${new URLSearchParams(params).toString()}`; + } + + const dnrHeadersToSet = [ + { header: 'User-Agent', value: 'okhttp/4.10.0' }, + { header: 'Cookie', value: identityCookieStr } + ]; + if (includeHouseholdId) { + dnrHeadersToSet.push({ header: 'HouseholdID', value: '1' }); + } + await setDynamicHeaders(dnrHeadersToSet, ORANGE_TV_API_HOST_MOB); + + const fetchOptions = { + method: method, + headers: {}, + credentials: 'omit' + }; + + if (bodyData && (method === 'POST' || method === 'PUT')) { + fetchOptions.body = bodyData; + if (typeof bodyData === 'string' && bodyData.includes('=')) { + fetchOptions.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + } + } + + try { + await new Promise(resolve => setTimeout(resolve, 150)); + const response = await fetch(url, fetchOptions); + + if (response.status === 401) { + throw new NotAuthenticatedError("401 Auth Error (Mob API). Cookie expirada?"); + } + if (!response.ok) { + const errorText = await response.text(); + console.error(`Error en API Mob (${endpoint}): ${response.status}`, errorText.substring(0,200)); + return null; + } + + if (response.status === 204 || response.headers.get("content-length") === "0") { + return { success_no_content: true, status: response.status }; + } + + const contentType = response.headers.get("content-type"); + if (contentType && contentType.includes("application/json")) { + return await response.json(); + } else { + console.warn(`Respuesta de API Mob (${endpoint}) no es JSON. Tipo: ${contentType}`); + return { raw_text: await response.text(), status_code: response.status }; + } + + } catch (e) { + if (e instanceof NotAuthenticatedError) throw e; + console.error(`Excepción en API Mob (${endpoint}):`, e); + return null; + } +} + + +async function getSerialAndModelMob(identityCookieStr) { + if (!identityCookieStr) return { serial: null, model: null }; + console.log("Paso 2: Obteniendo terminales (Mob API)..."); + showNotification("Obteniendo información de terminales (Mob)...", "info"); + + const responseData = await apiRequestMob('GET', '/GetTerminalList?client=json', identityCookieStr, null, null, false); + + if (responseData?.response?.terminals) { + const terminals = responseData.response.terminals; + if (terminals && terminals.length > 0) { + for (const modelIdFilter of MODEL_EXTERNAL_IDS_FOR_TERMINALS_JS) { + for (const t of terminals) { + if (t?.model?.externalId === modelIdFilter) { + const serial = t.serialNumber; + console.log(`Paso 2: ¡Terminal encontrado! Modelo: ${modelIdFilter}, Serial: ${serial}`); + showNotification("Terminal (Mob) encontrado.", "success"); + return { serial: serial, model: modelIdFilter }; + } + } + } + console.warn(`Paso 2: No se encontró descodificador con modelos: ${MODEL_EXTERNAL_IDS_FOR_TERMINALS_JS.join(', ')}`); + showNotification("No se encontró terminal compatible (Mob).", "warning"); + } else { + console.warn("Paso 2: No se encontraron terminales."); + showNotification("No hay terminales registrados (Mob).", "warning"); + } + } else { + console.error("Paso 2: Fallo al obtener terminales (Mob API) o formato inesperado."); + if (responseData) console.error("Respuesta GetTerminalList:", responseData); + showNotification("Error obteniendo terminales (Mob).", "error"); + } + return { serial: null, model: null }; +} + +async function getChannelListPc(identityCookieMobStr) { + if (!identityCookieMobStr) return null; + console.log(`Paso 3.1: Obteniendo canales (PC API) para modelo ${MODEL_ID_FOR_CHANNELS_PC_JS}...`); + showNotification("Obteniendo lista de canales (PC API)...", "info"); + + const dnrHeadersForPc = [ + { header: 'User-Agent', value: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36' }, + { header: 'Cookie', value: identityCookieMobStr }, + { header: 'Accept', value: 'application/json, text/plain, */*'} + ]; + await setDynamicHeaders(dnrHeadersForPc, ORANGE_TV_API_HOST_PC); + + + const params = { + 'bouquet_id': BOUQUET_ID_FOR_CHANNELS_PC_JS, + 'model_external_id': MODEL_ID_FOR_CHANNELS_PC_JS, + 'filter_unsupported_channels': 'false', + 'client': 'json' + }; + const urlPcChannelList = `${URL_BASE_API_PC_JS}/GetChannelList?${new URLSearchParams(params).toString()}`; + + try { + await new Promise(resolve => setTimeout(resolve, 150)); + const response = await fetch(urlPcChannelList, { + method: 'GET', + headers: {}, + credentials: 'omit' + }); + + if (response.status === 401) { + console.error(`Paso 3.1: Error de autenticación (401) en GetChannelList (PC API).`); + showNotification("Autenticación fallida para PC API (canales).", "error"); + return null; + } + if (!response.ok) { + const errorText = await response.text(); + console.error(`Paso 3.1: HTTP error en GetChannelList (PC API): ${response.status}`, errorText.substring(0,500)); + showNotification(`Error obteniendo canales (PC API): ${response.status}`, "error"); + return null; + } + + const responseJson = await response.json(); + if (responseJson && Array.isArray(responseJson.response)) { + const channelsData = responseJson.response; + console.log(`Paso 3.1: ¡${channelsData.length} canales (PC API) obtenidos!`); + showNotification(`${channelsData.length} canales (PC API) obtenidos.`, "success"); + return channelsData; + } else { + console.error("Paso 3.1: Fallo al obtener canales (PC API) o formato inesperado.", responseJson); + showNotification("Formato de respuesta de canales (PC API) inesperado.", "error"); + return null; + } + } catch (e) { + console.error("Error de red o JSON en GetChannelList (PC API):", e); + showNotification("Error de red obteniendo canales (PC API).", "error"); + return null; + } +} + +async function getLivePlayingInfoMob(identityCookieStr, serialNumber, channelExternalId) { + if (!identityCookieStr || !serialNumber || !channelExternalId) return null; + + const params = { + 'client': 'json', + 'serial_number': serialNumber, + 'include_cas_token': 'true', + 'channel_external_id': channelExternalId + }; + const responseData = await apiRequestMob('GET', '/GetLivePlayingInfo', identityCookieStr, params, null, true); + + if (responseData?.response?.playingUrl) { + return responseData.response; + } + console.warn(`No se obtuvo playingUrl para ${channelExternalId}. Respuesta:`, responseData); + return null; +} + +function extractStreamIdentifier(mpdUrl) { + if (!mpdUrl || typeof mpdUrl !== 'string') return null; + const regex = /\/([a-zA-Z0-9_.-]+)\/dash_(?:high|medium|low)\.mpd/i; + let match = mpdUrl.match(regex); + if (match && match[1]) { + const candidate = match[1]; + if (/^r\d{1,2}_/i.test(candidate)) return candidate; + } + + const pathParts = mpdUrl.split('/'); + for (let i = pathParts.length - 2; i >= 0; i--) { + const part = pathParts[i]; + if (part.toLowerCase() === 'cmaf' || part.toLowerCase() === 'std' || part.includes('.')) continue; + if (part && /^r\d{1,2}_/i.test(part)) return part; + } + if (match && match[1] && (match[1].toLowerCase() !== 'cmaf' && match[1].toLowerCase() !== 'std')) return match[1]; + + return null; +} + + +async function processSingleChannel(channelDataPc, serialNumberMob, identityCookieMob) { + const name = channelDataPc.name || 'Nombre Desconocido'; + const externalId = channelDataPc.externalChannelId; + const category = channelDataPc.category || 'Desconocido'; + const number = channelDataPc.number || ''; + const attachments = channelDataPc.attachments || []; + const encodingType = channelDataPc.encoding; + const sourceType = channelDataPc.sourceType; + const channelUrlField = channelDataPc.url; + + if (!externalId) { + console.warn("Canal sin externalChannelId:", channelDataPc); + return null; + } + + if (userSettings.orangeTvSelectedGroups && userSettings.orangeTvSelectedGroups.length > 0) { + const normalizedCategoryApi = category.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase(); + const selectedGroupsNormalized = userSettings.orangeTvSelectedGroups.map(g => g.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase()); + + let groupMatch = selectedGroupsNormalized.includes(normalizedCategoryApi); + if (!groupMatch) { + if ((normalizedCategoryApi === "general" || normalizedCategoryApi === "generalistas") && selectedGroupsNormalized.includes("generalista")) { + groupMatch = true; + } else if ((normalizedCategoryApi === "noticias") && selectedGroupsNormalized.includes("informacion")) { + groupMatch = true; + } else if ((normalizedCategoryApi === "infanti") && selectedGroupsNormalized.includes("infantil")) { + groupMatch = true; + } + } + if (!groupMatch) { + return null; + } + } + + + let streamUrl = null; + let isExternalHls = false; + let kodiPropsArray = []; + + if (encodingType === "EXTERNAL" && sourceType === "HLS" && channelUrlField === "externalURL") { + const extrafields = channelDataPc.extrafields || []; + const extStreamField = extrafields.find(ef => ef.name === "externalStreamingUrl"); + if (extStreamField && extStreamField.value) { + try { + const externalStreamingData = JSON.parse(extStreamField.value); + const hlsUrl = externalStreamingData.externalURL; + if (hlsUrl) { + streamUrl = hlsUrl; + isExternalHls = true; + } + } catch (e) { + console.warn(`Error parseando externalStreamingUrl para ${name}: ${e}`); + } + } + if (!streamUrl) isExternalHls = false; + } + + if (!isExternalHls) { + const playingInfoMob = await getLivePlayingInfoMob(identityCookieMob, serialNumberMob, externalId); + if (playingInfoMob && playingInfoMob.playingUrl) { + let tempUrl = playingInfoMob.playingUrl; + if (!tempUrl.endsWith('/externalURL')) { + streamUrl = tempUrl; + if (streamUrl.toLowerCase().endsWith(".mpd")) { + streamUrl = streamUrl.replace(/dash_medium\.mpd/i, "dash_high.mpd").replace(/dash_low\.mpd/i, "dash_high.mpd"); + kodiPropsArray.push("inputstream.adaptive.manifest_type=mpd"); + + const streamIdForClearkey = extractStreamIdentifier(streamUrl); + if (streamIdForClearkey && CHANNEL_SPECIFIC_CLEARKEYS_JS[streamIdForClearkey]) { + const keys = CHANNEL_SPECIFIC_CLEARKEYS_JS[streamIdForClearkey]; + if (keys.k && keys.kid) { + const licenseKeyJsonObj = { keys: [{ kty: "oct", k: keys.k, kid: keys.kid }], type: "temporary" }; + const licenseKeyJsonStr = JSON.stringify(licenseKeyJsonObj); + kodiPropsArray.push(`inputstream.adaptive.license_type=clearkey`); + kodiPropsArray.push(`inputstream.adaptive.license_key=${licenseKeyJsonStr}`); + } + } + } + } + } + } + + if (streamUrl) { + let m3uEntry = ""; + const logoAttachment = attachments.find(att => att.name === "LOGO" && att.value); + const logoPath = logoAttachment ? `${URL_BASE_IMAGES_PC_JS}${logoAttachment.value}` : ""; + + m3uEntry += `#EXTINF:-1 tvg-id="${externalId}" ch-number="${number}" tvg-name="${name}" tvg-logo="${logoPath}" group-title="OrangeTV | ${category}",${name}\n`; + + kodiPropsArray.forEach(prop => { + m3uEntry += `#KODIPROP:${prop}\n`; + }); + + m3uEntry += `${streamUrl}\n`; + return m3uEntry; + } + return null; +} + + +async function generateM3uOrangeTv() { + showLoading(true, "Iniciando proceso OrangeTV..."); + console.log("--- Iniciando generación M3U OrangeTV (JS) ---"); + const orangeTvSourceName = "OrangeTV"; + + let identityCookieMob = null; + let serialNumberMob = null; + + try { + identityCookieMob = await getIdentityCookie(); + if (!identityCookieMob) { + throw new Error("CRÍTICO: No se pudo obtener cookie (Mob API)."); + } + + const terminalInfo = await getSerialAndModelMob(identityCookieMob); + serialNumberMob = terminalInfo.serial; + + if (!serialNumberMob) { + console.warn("Fallo al obtener terminales (Mob API). La cookie podría haber expirado. Re-intentando login..."); + showNotification("Información de terminal no obtenida, reintentando login...", "warning"); + await deleteAppConfigValue(ORANGE_IDENTITY_KEY); + + identityCookieMob = await loginOrangeMob(); + if (!identityCookieMob) { + throw new Error("CRÍTICO: No se pudo obtener cookie (Mob API) tras re-login."); + } + const newTerminalInfo = await getSerialAndModelMob(identityCookieMob); + serialNumberMob = newTerminalInfo.serial; + if (!serialNumberMob) { + throw new Error("CRÍTICO: No se pudo obtener serial (Mob API) tras re-login."); + } + } + + const listaCanalesPcApi = await getChannelListPc(identityCookieMob); + if (!listaCanalesPcApi || listaCanalesPcApi.length === 0) { + throw new Error("CRÍTICO: No se pudo obtener la lista de canales (PC API)."); + } + + showNotification(`Procesando ${listaCanalesPcApi.length} canales... Esto puede tardar.`, "info", 10000); + + let m3uLinesForFile = ["#EXTM3U"]; + let canalesExitosos = 0; + let canalesConError = 0; + const resultsInOrder = new Array(listaCanalesPcApi.length).fill(null); + let processedCount = 0; + + for (let i = 0; i < listaCanalesPcApi.length; i += MAX_WORKERS_CHANNELS_JS) { + const batch = listaCanalesPcApi.slice(i, i + MAX_WORKERS_CHANNELS_JS); + const promises = batch.map((channelPc, indexInBatch) => + processSingleChannel(channelPc, serialNumberMob, identityCookieMob) + .then(result => ({ status: 'fulfilled', value: result, originalIndex: i + indexInBatch })) + .catch(error => ({ status: 'rejected', reason: error, originalIndex: i + indexInBatch })) + ); + + const settledResults = await Promise.all(promises); + + for (const result of settledResults) { + if (result.status === 'fulfilled' && result.value) { + resultsInOrder[result.originalIndex] = result.value; + canalesExitosos++; + } else { + canalesConError++; + if (result.status === 'rejected') { + const channelNameForError = listaCanalesPcApi[result.originalIndex]?.name || `Índice ${result.originalIndex}`; + console.error(`Error procesando canal '${channelNameForError}':`, result.reason); + } + } + processedCount++; + if (processedCount % 10 === 0 || processedCount === listaCanalesPcApi.length) { + showNotification(`Procesados ${processedCount}/${listaCanalesPcApi.length} canales...`, "info", 3000); + } + } + if (i + MAX_WORKERS_CHANNELS_JS < listaCanalesPcApi.length) { + await new Promise(resolve => setTimeout(resolve, 200)); + } + } + + resultsInOrder.forEach(entry => { + if (entry) { + m3uLinesForFile.push(entry); + } + }); + + console.log("Proceso de URLs (concurrente) finalizado."); + console.log(`Canales con URL exitosa: ${canalesExitosos}`); + console.log(`Canales con error/omitidos: ${canalesConError}`); + showNotification(`Proceso completado. Éxito: ${canalesExitosos}, Fallos/Omitidos: ${canalesConError}`, "info"); + + if (canalesExitosos > 0) { + let finalM3uContent = m3uLinesForFile.join("\n"); + if (!finalM3uContent.endsWith("\n\n") && finalM3uContent.split('\n').length > 1) { + finalM3uContent += "\n"; + } + console.log("M3U Generado (primeros 500 caracteres):", finalM3uContent.substring(0,500)); + + if (typeof removeChannelsBySourceOrigin === 'function') { + removeChannelsBySourceOrigin(orangeTvSourceName); + } + if (typeof appendM3UContent === 'function') { + appendM3UContent(finalM3uContent, orangeTvSourceName); + } else { + console.error("appendM3UContent no disponible. Usando fallback processM3UContent."); + processM3UContent(finalM3uContent, orangeTvSourceName, channels.length === 0); + } + return finalM3uContent; + } else { + showNotification("No se generó M3U (no se obtuvieron URLs o no coincidieron con grupos seleccionados).", "warning"); + return "#EXTM3U\n#EXTINF:-1,No se pudieron obtener canales\nerror.ts"; + } + + } catch (e) { + console.error("Error en generateM3uOrangeTv:", e.message, e); + if (e instanceof NotAuthenticatedError || e.message.toLowerCase().includes("cookie")) { + showNotification("Error de autenticación con OrangeTV. Intenta de nuevo.", "error"); + await deleteAppConfigValue(ORANGE_IDENTITY_KEY); + } else { + showNotification(`Error generando lista OrangeTV: ${e.message.substring(0,100)}`, "error"); + } + return "#EXTM3U\n#EXTINF:-1,Error general en el proceso\nerror.ts"; + } finally { + showLoading(false); + await clearAllDynamicHeaders(); + console.log("--- Proceso OrangeTV (JS) Finalizado ---"); + } +} \ No newline at end of file diff --git a/php_handler.js b/php_handler.js new file mode 100644 index 0000000..f280b5c --- /dev/null +++ b/php_handler.js @@ -0,0 +1,212 @@ +const phpGenerator = (() => { + let dom = {}; + + function cacheDom() { + const settingsModal = document.getElementById('settingsModal'); + if (!settingsModal) return false; + + dom.secretKeyCheck = settingsModal.querySelector('#phpSecretKeyCheck'); + dom.secretKey = settingsModal.querySelector('#phpSecretKey'); + dom.restrictExtIdCheck = settingsModal.querySelector('#phpRestrictToExtensionIdCheck'); + dom.savePath = settingsModal.querySelector('#phpSavePath'); + dom.filenameOriginalRadio = settingsModal.querySelector('#phpFilenameOriginal'); + dom.filenameFixedRadio = settingsModal.querySelector('#phpFilenameFixed'); + dom.fixedFilename = settingsModal.querySelector('#phpFixedFilename'); + dom.addTimestampCheck = settingsModal.querySelector('#phpAddTimestamp'); + dom.overwriteCheck = settingsModal.querySelector('#phpOverwrite'); + dom.generatedCode = settingsModal.querySelector('#generatedPhpCode'); + dom.generateBtn = settingsModal.querySelector('#generatePhpScriptBtn'); + dom.copyBtn = settingsModal.querySelector('#copyPhpScriptBtn'); + + return dom.generateBtn && dom.copyBtn; + } + + function init() { + if (!cacheDom()) { + console.error("No se pudieron cachear los elementos del DOM para el generador PHP."); + return; + } + dom.generateBtn.addEventListener('click', generatePhpScript); + dom.copyBtn.addEventListener('click', copyScript); + } + + function generatePhpScript() { + const useSecretKey = dom.secretKeyCheck.checked; + const secretKey = dom.secretKey.value.trim(); + const useExtensionIdCheck = dom.restrictExtIdCheck.checked; + const extensionId = chrome.runtime.id; + + const savePath = dom.savePath.value.trim(); + const useFixedFilename = dom.filenameFixedRadio.checked; + const fixedFilename = dom.fixedFilename.value.trim(); + const addTimestamp = dom.addTimestampCheck.checked; + const allowOverwrite = dom.overwriteCheck.checked; + + let script = ` false, 'message' => '', 'filename' => '']; + +// Verificar el método de la solicitud +if ($_SERVER['REQUEST_METHOD'] !== 'POST') { + $response['message'] = 'Error: Método no permitido. Solo se acepta POST.'; + http_response_code(405); + echo json_encode($response); + exit; +} + +// Verificar la clave secreta si está configurada +`; + if (useSecretKey) { + script += ` +if (defined('SECRET_KEY') && SECRET_KEY !== '') { + $submittedKey = isset($_POST['secret']) ? $_POST['secret'] : ''; + if ($submittedKey !== SECRET_KEY) { + $response['message'] = 'Error: Clave secreta inválida.'; + http_response_code(403); + echo json_encode($response); + exit; + } +} +`; + } + + if (useExtensionIdCheck) { + script += ` +// Verificar el origen de la extensión de Chrome si está configurado +if (defined('ALLOWED_EXTENSION_ID') && ALLOWED_EXTENSION_ID !== '') { + $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : ''; + if ($origin !== 'chrome-extension://' . ALLOWED_EXTENSION_ID) { + $response['message'] = 'Error: Solicitud desde un origen no permitido.'; + http_response_code(403); + echo json_encode($response); + exit; + } +} +`; + } + + script += ` +// Obtener datos del POST +$m3uContent = isset($_POST['m3u_content']) ? $_POST['m3u_content'] : null; +$originalM3uName = isset($_POST['m3u_name']) ? $_POST['m3u_name'] : 'lista_subida.m3u'; + +if (empty($m3uContent)) { + $response['message'] = 'Error: No se recibió contenido M3U (m3u_content).'; + http_response_code(400); + echo json_encode($response); + exit; +} + +// Determinar el directorio de destino +$targetDir = TARGET_DIRECTORY !== '' ? rtrim(TARGET_DIRECTORY, '/\\\\') : __DIR__; + +if (!is_dir($targetDir) || !is_writable($targetDir)) { + $response['message'] = 'Error: El directorio de destino no existe o no tiene permisos de escritura.'; + http_response_code(500); + echo json_encode($response); + exit; +} + +// Determinar el nombre del archivo final +$filename = ''; +if (USE_FIXED_FILENAME && FIXED_FILENAME !== '') { + $filename = FIXED_FILENAME; +} else { + $filename = empty(trim($originalM3uName)) ? 'lista_sin_nombre.m3u' : $originalM3uName; +} + +// Asegurarse de que el nombre del archivo tiene la extensión .m3u +if (strtolower(substr($filename, -4)) !== '.m3u') { + $filename .= '.m3u'; +} + +// Sanitizar el nombre del archivo para seguridad +$baseFilename = basename($filename); +$safeFilename = preg_replace('/[^\w\s._-]/', '_', $baseFilename); +$safeFilename = preg_replace('/\s+/', '_', $safeFilename); + +// Añadir timestamp si está configurado +if (ADD_TIMESTAMP) { + $nameWithoutExt = pathinfo($safeFilename, PATHINFO_FILENAME); + $extension = pathinfo($safeFilename, PATHINFO_EXTENSION); + $timestamp = date('Ymd_His'); + $safeFilename = "{$nameWithoutExt}_{$timestamp}.{$extension}"; +} + +$targetFilePath = $targetDir . DIRECTORY_SEPARATOR . $safeFilename; + +// Comprobar si se permite sobrescribir (solo si no se añade timestamp) +if (!ADD_TIMESTAMP && !ALLOW_OVERWRITE && file_exists($targetFilePath)) { + $response['message'] = 'Error: El archivo ya existe y no está permitida la sobrescritura.'; + http_response_code(409); + echo json_encode($response); + exit; +} + +// Guardar el archivo +if (file_put_contents($targetFilePath, $m3uContent) !== false) { + $response['success'] = true; + $response['message'] = 'Archivo M3U guardado correctamente en el servidor.'; + $response['filename'] = $safeFilename; + http_response_code(200); +} else { + $response['message'] = 'Error: No se pudo escribir el archivo en el servidor.'; + http_response_code(500); +} + +// Enviar la respuesta final +echo json_encode($response); +?> +`; + dom.generatedCode.value = script; + showNotification("Script PHP generado.", "success"); + } + + function copyScript() { + if (!dom.generatedCode.value || dom.generatedCode.value.startsWith('Configura')) { + showNotification("Primero genera un script para poder copiarlo.", "warning"); + return; + } + navigator.clipboard.writeText(dom.generatedCode.value).then(() => { + showNotification("Script PHP copiado al portapapeles.", "success"); + }).catch(err => { + showNotification("Error al copiar el script. Revisa la consola.", "error"); + console.error('Error al copiar: ', err); + }); + } + + return { + init: init + }; +})(); \ No newline at end of file diff --git a/player.html b/player.html new file mode 100644 index 0000000..9fec71c --- /dev/null +++ b/player.html @@ -0,0 +1,1267 @@ + + + + + + DRM player | Player Avanzado + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    + + + +
    +
    + +

    Canales Disponibles

    +
    +
    + + +
    +
    +
    + +
    +
    + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/player.js b/player.js new file mode 100644 index 0000000..83b4fd0 --- /dev/null +++ b/player.js @@ -0,0 +1,1458 @@ +let channels = []; +let favorites = []; +let appHistory = []; +let currentFilter = 'all'; +let currentPage = 1; +let currentM3UContent = null; +let currentM3UName = null; +let notificationTimeout = null; +let currentGroupOrder = []; +let selectedMovistarLongTokenIdForSettings = null; +let currentView = { type: 'main' }; +let navigationHistory = []; + +let playerInstances = {}; +let activePlayerId = null; +let highestZIndex = 1950; + +let hoverPlayTimeout = null; +const HOVER_PLAY_DELAY = 700; +let activeCardPreviewPlayer = null; +let activeCardPreviewElement = null; + +let currentTranslations = {}; + +async function loadLanguage(lang) { + try { + const response = await fetch(chrome.runtime.getURL(`_locales/${lang}/messages.json`)); + if (!response.ok) throw new Error(`Could not load ${lang}.json`); + const messages = await response.json(); + currentTranslations = {}; + for (const key in messages) { + if (Object.hasOwnProperty.call(messages, key)) { + currentTranslations[key] = messages[key].message; + } + } + document.documentElement.lang = lang; + } catch (error) { + console.error("Error loading language file:", error); + if (lang !== 'es') { + await loadLanguage('es'); + } + } +} + +function applyTranslations() { + document.querySelectorAll('[data-lang-key]').forEach(element => { + const key = element.getAttribute('data-lang-key'); + const message = currentTranslations[key]; + + if (message) { + let finalMessage = message; + if (element.hasAttribute('data-lang-vars')) { + try { + const varsAttr = element.getAttribute('data-lang-vars'); + const vars = JSON.parse(varsAttr); + for (const varKey in vars) { + const selector = vars[varKey]; + const varElement = document.querySelector(selector); + if (varElement) { + finalMessage = finalMessage.replace(`{${varKey}}`, varElement.innerHTML); + } + } + } catch(e) { console.error(`Error parsing data-lang-vars for key ${key}:`, e)} + } + + const attr = element.getAttribute('data-lang-attr'); + if (attr) { + element.setAttribute(attr, finalMessage); + } else { + element.innerHTML = finalMessage; + } + } + }); +} + +async function showLoadFromDBModal() { + if (typeof dbPromise === 'undefined' || !dbPromise) { + showLoading(true, currentTranslations['loading'] || 'Iniciando base de datos local...'); + try { if (typeof openDB === 'function') await openDB(); } catch (error) { showNotification(`Error DB: ${error.message}`, 'error'); showLoading(false); return; } + finally { showLoading(false); } + } + showLoading(true, currentTranslations['loadingLists'] || 'Cargando listas guardadas...'); + try { + const files = typeof getAllFilesFromDB === 'function' ? await getAllFilesFromDB() : []; + const $list = $('#dbFilesList').empty(); + if (!files || files.length === 0) { + $list.append(`
  • ${currentTranslations['noFileLoaded'] || "No hay listas guardadas."}
  • `); + } else { + files.sort((a,b) => new Date(b.timestamp) - new Date(a.timestamp)); + files.forEach(file => { + const date = file.timestamp ? new Date(file.timestamp).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }) : 'Fecha desconocida'; + const time = file.timestamp ? new Date(file.timestamp).toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit'}) : ''; + const count = typeof file.channelCount === 'number' ? file.channelCount : (typeof countChannels === 'function' ? countChannels(file.content) : 0); + $list.append(` +
  • +
    + ${escapeHtml(file.name)} + ${count} canales | ${date} ${time} +
    +
    + + +
    +
  • `); + }); + $list.off('click', '.load-file-btn').on('click', '.load-file-btn', function () { loadFileToPlayer($(this).data('name')); $('#loadFromDBModal').modal('hide'); }); + $list.off('click', '.delete-file-btn').on('click', '.delete-file-btn', function () { handleDeleteFromDB($(this).data('name')); }); + } + $('#loadFromDBModal').modal('show'); + } catch (error) { + showNotification(`Error cargando listas guardadas: ${error.message}`, 'error'); + $('#dbFilesList').empty().append('
  • Error al cargar listas.
  • '); + } + finally { showLoading(false); } +} + +async function loadFileToPlayer(name) { + showLoading(true, `Cargando "${escapeHtml(name)}" desde BD...`); + currentGroupOrder = []; + try { + const file = typeof getFileFromDB === 'function' ? await getFileFromDB(name) : null; + if (!file || !file.content) throw new Error('Lista no encontrada en la base de datos.'); + processM3UContent(file.content, file.name, true); + + if (userSettings.autoSaveM3U) { + if (file.content.length < 4 * 1024 * 1024) { + await saveAppConfigValue('lastM3UFileContent', file.content); + await saveAppConfigValue('lastM3UFileName', file.name); + await deleteAppConfigValue('lastM3UUrl'); + await deleteAppConfigValue('currentXtreamServerInfo'); + } else { + await deleteAppConfigValue('lastM3UFileContent'); + await deleteAppConfigValue('lastM3UFileName'); + await deleteAppConfigValue('lastM3UUrl'); + await deleteAppConfigValue('currentXtreamServerInfo'); + showNotification('Lista cargada pero demasiado grande para guardado automático futuro.', 'info'); + } + } + showNotification(`Lista "${escapeHtml(name)}" cargada (${channels.length} canales).`, 'success'); + } catch (error) { + showNotification(`Error cargando "${escapeHtml(name)}": ${error.message}`, 'error'); + channels = []; currentM3UContent = null; currentM3UName = null; currentGroupOrder = []; + filterAndRenderChannels(); + } finally { showLoading(false); } +} + +async function handleDeleteFromDB(name) { + const confirmed = await showConfirmationModal(`¿Estás seguro de eliminar la lista "${escapeHtml(name)}" de forma permanente?`, "Confirmar Eliminación", "Sí, Eliminar", "btn-danger"); + if (!confirmed) return; + + showLoading(true, `Eliminando "${escapeHtml(name)}"...`); + try { + if (typeof deleteFileFromDB === 'function') await deleteFileFromDB(name); else throw new Error("deleteFileFromDB no definido"); + showNotification(`Lista "${escapeHtml(name)}" eliminada.`, 'success'); + $(`#dbFilesList li button[data-name="${escapeHtml(name)}"]`).closest('li').fadeOut(300, function() { + $(this).remove(); + if ($('#dbFilesList li').length === 0) { + $('#dbFilesList').append(`
  • ${currentTranslations['noFileLoaded'] || "No hay listas guardadas."}
  • `); + } + }); + + const lastM3UFileName = await getAppConfigValue('lastM3UFileName'); + if (lastM3UFileName === name) { + channels = []; currentM3UContent = null; currentM3UName = null; currentGroupOrder = []; + filterAndRenderChannels(); + await deleteAppConfigValue('lastM3UFileContent'); + await deleteAppConfigValue('lastM3UFileName'); + showNotification('La lista actualmente cargada fue eliminada.', 'info'); + } + } catch (error) { + showNotification(`Error al eliminar "${escapeHtml(name)}": ${error.message}`, 'error'); + } + finally { showLoading(false); } +} + +$(document).ready(async function () { + shaka.polyfill.installAll(); + if (typeof loadUserSettings === 'function') { + await loadUserSettings(); + } + if (typeof applyUISettings === 'function') { + await applyUISettings(); + } + + makeWindowsDraggableAndResizable(); + bindEvents(); + if (typeof bindEpgEvents === 'function') { + bindEpgEvents(); + } + if (typeof MovistarTokenHandler !== 'undefined' && typeof MovistarTokenHandler.setLogCallback === 'function') { + MovistarTokenHandler.setLogCallback(logToMovistarSettingsUI); + loadAndDisplayInitialMovistarStatus(); + } + if (typeof initXCodecPanelManagement === 'function') { + initXCodecPanelManagement(); + } + if (typeof phpGenerator !== 'undefined' && typeof phpGenerator.init === 'function') { + phpGenerator.init(); + } + + + if (userSettings.persistFilters && userSettings.lastSelectedFilterTab) { + currentFilter = userSettings.lastSelectedFilterTab; + } + updateActiveFilterButton(); + checkIfChannelsExist(); + + const urlParams = new URLSearchParams(window.location.search); + const channelNameFromUrl = urlParams.get('name'); + const channelStreamUrl = urlParams.get('url'); + const autoPlayFromUrl = (channelNameFromUrl && channelStreamUrl); + + if (autoPlayFromUrl) { + showNotification(`Cargando ${escapeHtml(channelNameFromUrl)} desde editor...`, 'info'); + const channelDataForPlayer = { + name: channelNameFromUrl, + url: channelStreamUrl, + 'tvg-logo': urlParams.get('logo') || '', + 'tvg-id': urlParams.get('tvgid') || '', + 'group-title': urlParams.get('group') || 'Externo', + attributes: { + 'tvg-id': urlParams.get('tvgid') || '', + 'tvg-logo': urlParams.get('logo') || '', + 'group-title': urlParams.get('group') || 'Externo', + 'ch-number': urlParams.get('chnumber') || '', + ...(urlParams.has('player-buffer') && { 'player-buffer': urlParams.get('player-buffer') }) + }, + kodiProps: {}, vlcOptions: {}, extHttp: {} + }; + + const licenseType = urlParams.get('licenseType'); + const licenseKey = urlParams.get('licenseKey'); + const serverCertBase64 = urlParams.get('serverCert'); + + if (licenseType) channelDataForPlayer.kodiProps['inputstream.adaptive.license_type'] = licenseType; + if (licenseKey) channelDataForPlayer.kodiProps['inputstream.adaptive.license_key'] = licenseKey; + if (serverCertBase64) channelDataForPlayer.kodiProps['inputstream.adaptive.server_certificate'] = serverCertBase64; + + const streamHeaders = urlParams.get('streamHeaders'); + if (streamHeaders) channelDataForPlayer.kodiProps['inputstream.adaptive.stream_headers'] = streamHeaders; + + const userAgent = urlParams.get('userAgent'); + const referrer = urlParams.get('referrer'); + const origin = urlParams.get('origin'); + if (userAgent) channelDataForPlayer.vlcOptions['http-user-agent'] = userAgent; + if (referrer) channelDataForPlayer.vlcOptions['http-referrer'] = referrer; + if (origin) channelDataForPlayer.vlcOptions['http-origin'] = origin; + + const extHttpJson = urlParams.get('extHttp'); + if (extHttpJson) { + try { channelDataForPlayer.extHttp = JSON.parse(extHttpJson); } catch (e) { } + } + + if (typeof createPlayerWindow === 'function') { + createPlayerWindow(channelDataForPlayer); + } + + } else { + await loadLastM3U(); + if (userSettings.useMovistarVodAsEpg && typeof updateEpgWithMovistarVodData === 'function') { + const today = new Date(); + const yyyy = today.getFullYear(); + const mm = String(today.getMonth() + 1).padStart(2, '0'); + const dd = String(today.getDate()).padStart(2, '0'); + await updateEpgWithMovistarVodData(`${yyyy}-${mm}-${dd}`); + } + if (typeof startDynamicEpgUpdaters === 'function') { + startDynamicEpgUpdaters(); + } + setTimeout(() => { + $(window).one('scroll mousemove touchstart', initParticles); + setTimeout(initParticles, 5000); + }, 100); + } +}); + +function launchEditor() { + if (!channels || channels.length === 0) { + showNotification("No hay ninguna lista M3U cargada para editar.", "warning"); + return; + } + if (typeof editorHandler === 'undefined' || typeof editorHandler.init !== 'function') { + showNotification("El módulo del editor no está disponible.", "error"); + return; + } + + editorHandler.init(channels, currentM3UName); + + const editorModal = new bootstrap.Modal(document.getElementById('editorModal')); + editorModal.show(); +} + +async function handleChannelCardClick(event) { + if ($(event.target).closest('.favorite-btn').length && userSettings.cardShowFavButton) { + return; + } + + clearTimeout(hoverPlayTimeout); + if (typeof destroyActiveCardPreviewPlayer === 'function' && typeof activeCardPreviewPlayer !== 'undefined' && activeCardPreviewPlayer) { + await destroyActiveCardPreviewPlayer(); + } + + const card = $(this); + let channelUrl, seriesChannel, seasonData, episodeData; + + try { + const seasonDataAttr = card.data('season-data'); + if (seasonDataAttr) { + seasonData = (typeof seasonDataAttr === 'string') ? JSON.parse(seasonDataAttr) : seasonDataAttr; + const episodes = await loadXtreamSeasonEpisodes(seasonData.series_id, seasonData.season_number); + if (episodes && episodes.length > 0) { + pushNavigationState(); + currentView = { type: 'episode_list', data: episodes, title: `${seasonData['group-title']} - ${seasonData.name}` }; + renderCurrentView(); + } else { + showNotification('No se encontraron episodios para esta temporada.', 'info'); + } + return; + } + + const episodeDataAttr = card.data('episode-data'); + if (episodeDataAttr) { + episodeData = (typeof episodeDataAttr === 'string') ? JSON.parse(episodeDataAttr) : episodeDataAttr; + createPlayerWindow(episodeData); + return; + } + + channelUrl = card.data('url'); + seriesChannel = channels.find(c => c.url === channelUrl); + if (seriesChannel && seriesChannel.attributes && seriesChannel.attributes['xtream-type'] === 'series') { + const seriesId = seriesChannel.attributes['xtream-series-id']; + const seasons = await loadXtreamSeasons(seriesId, seriesChannel.name); + if (seasons && seasons.length > 0) { + pushNavigationState(); + currentView = { type: 'season_list', data: seasons, title: seriesChannel.name }; + renderCurrentView(); + } else { + showNotification('No se encontraron temporadas para esta serie.', 'info'); + } + return; + } + + if (seriesChannel) { + const isMovistarStream = seriesChannel.url && (seriesChannel.url.toLowerCase().includes('telefonica.com') || seriesChannel.url.toLowerCase().includes('movistarplus.es')); + const existingMovistarWindow = isMovistarStream + ? Object.values(playerInstances).find(inst => + inst.channel && + (inst.channel.url.toLowerCase().includes('telefonica.com') || inst.channel.url.toLowerCase().includes('movistarplus.es')) + ) + : null; + + if (existingMovistarWindow) { + const existingId = Object.keys(playerInstances).find(key => playerInstances[key] === existingMovistarWindow); + if (existingId) { + showNotification("Reutilizando la ventana de Movistar+ para el nuevo canal.", "info"); + playChannelInShaka(seriesChannel, existingId); + const instance = playerInstances[existingId]; + instance.container.querySelector('.player-window-title').textContent = seriesChannel.name; + setActivePlayer(existingId); + } + } else { + createPlayerWindow(seriesChannel); + } + } else { + showNotification('Error: Canal no encontrado para reproducir.', 'error'); + } + + } catch (e) { + showNotification('Error al procesar la acción: ' + e.message, 'error'); + } +} + +function handleGlobalKeyPress(e) { + if (!activePlayerId || !playerInstances[activePlayerId]) return; + + const instance = playerInstances[activePlayerId]; + if (instance.container.style.display === 'none') return; + + const player = instance.player; + const ui = instance.ui; + const video = instance.videoElement; + + if (!video) return; + + if ($(e.target).is('input, textarea, [contenteditable="true"], .shaka-text-input')) return; + + let currentChannelIndex = -1; + const currentFilteredChannels = getFilteredChannels(); + if (instance.channel && instance.channel.url) { + currentChannelIndex = currentFilteredChannels.findIndex(ch => ch.url === instance.channel.url); + } + + + switch (e.key.toLowerCase()) { + case ' ': + e.preventDefault(); + video.paused ? video.play() : video.pause(); + break; + case 'f': + e.preventDefault(); + if (ui) ui.toggleFullScreen(); + break; + case 'i': + e.preventDefault(); + showPlayerInfobar(instance.channel, instance.container.querySelector('.player-infobar')); + break; + case 'm': + e.preventDefault(); + video.muted = !video.muted; + break; + case 'arrowleft': + e.preventDefault(); + if (video.duration && video.currentTime > 0) { + video.currentTime = Math.max(0, video.currentTime - (e.shiftKey ? 15 : 5)); + } + break; + case 'arrowright': + e.preventDefault(); + if (video.duration && video.currentTime < video.duration) { + video.currentTime = Math.min(video.duration, video.currentTime + (e.shiftKey ? 15 : 5)); + } + break; + case 'arrowup': + e.preventDefault(); + video.volume = Math.min(1, video.volume + 0.05); + break; + case 'arrowdown': + e.preventDefault(); + video.volume = Math.max(0, video.volume - 0.05); + break; + case 'pageup': + e.preventDefault(); + if (currentChannelIndex > 0 && currentFilteredChannels.length > 0) { + const prevChannel = currentFilteredChannels[currentChannelIndex - 1]; + playChannelInShaka(prevChannel, activePlayerId); + } + break; + case 'pagedown': + e.preventDefault(); + if (currentChannelIndex !== -1 && currentChannelIndex < currentFilteredChannels.length - 1) { + const nextChannel = currentFilteredChannels[currentChannelIndex + 1]; + playChannelInShaka(nextChannel, activePlayerId); + } + break; + case 'escape': + if (ui && ui.isFullScreen()) { + e.preventDefault(); + ui.toggleFullScreen(); + } + break; + } +} + +function bindEvents() { + $('#sidebarToggleBtn').on('click', async () => { + const sidebar = $('#sidebar'); + const appContainer = $('#app-container'); + sidebar.toggleClass('collapsed expanded'); + appContainer.toggleClass('sidebar-collapsed'); + userSettings.sidebarCollapsed = sidebar.hasClass('collapsed'); + if(userSettings.persistFilters) await saveAppConfigValue('userSettings', userSettings); + }); + + $('#loadUrl').on('click', () => { + const url = $('#urlInput').val().trim(); + if (url) { + if (typeof isXtreamUrl === 'function' && isXtreamUrl(url)) { + if (typeof handleXtreamUrl === 'function') handleXtreamUrl(url); + } else { + loadUrl(url); + } + } else { + showNotification('Introduce una URL válida.', 'info'); + } + }); + $('#fileInput').on('change', loadFile); + + $('#loadFromDBBtnHeader').on('click', showLoadFromDBModal); + $('#saveToDBBtnHeader').on('click', () => { + if (!currentM3UContent) { + showNotification('No hay lista cargada para guardar.', 'info'); + return; + } + let defaultName = currentM3UName || 'mi_lista'; + defaultName = defaultName.replace(/\.(m3u8?|txt|pls|m3uplus)$/i, '').replace(/^\/|\/$/g, ''); + if(defaultName.includes('/')) { defaultName = defaultName.substring(defaultName.lastIndexOf('/') + 1); } + defaultName = defaultName.replace(/[^\w\s._-]/g, '_').replace(/\s+/g, '_'); + if (!defaultName || defaultName === '_') defaultName = 'lista_guardada'; + + $('#saveM3UNameInput').val(defaultName); + const saveModal = new bootstrap.Modal(document.getElementById('saveM3UModal')); + saveModal.show(); + }); + $('#confirmSaveM3UBtn').on('click', handleSaveToDB); + + $('#openEditorBtn').on('click', launchEditor); + $('#applyEditorChangesBtn').on('click', () => { + if (typeof editorHandler !== 'undefined' && typeof editorHandler.getFinalData === 'function') { + const editorResult = editorHandler.getFinalData(); + channels = editorResult.channels; + currentGroupOrder = editorResult.groupOrder; + + regenerateCurrentM3UContentFromString(); + filterAndRenderChannels(); + + showNotification("Cambios del editor aplicados y guardados.", "success"); + const editorModalInstance = bootstrap.Modal.getInstance(document.getElementById('editorModal')); + if (editorModalInstance) { + editorModalInstance.hide(); + } + } else { + showNotification("Error: No se pudieron aplicar los cambios del editor.", "error"); + } + }); + + $('#downloadM3UBtnHeader').on('click', downloadCurrentM3U); + $('#loadOrangeTvBtnHeader').on('click', async () => { + if (typeof generateM3uOrangeTv === 'function') { + const orangeTvSourceName = "OrangeTV"; + if (typeof removeChannelsBySourceOrigin === 'function') { + removeChannelsBySourceOrigin(orangeTvSourceName); + } + + const m3uString = await generateM3uOrangeTv(); + if (m3uString && !m3uString.includes("Error general en el proceso") && !m3uString.includes("No se pudieron obtener canales")) { + if (typeof appendM3UContent === 'function') { + appendM3UContent(m3uString, orangeTvSourceName); + } + } else { + showNotification('No se generaron canales de OrangeTV o hubo un error durante el proceso.', 'warning'); + if (channels.length === 0) { + if (typeof filterAndRenderChannels === 'function') filterAndRenderChannels(); + } + } + } else { + showNotification("Función para cargar OrangeTV no encontrada.", "error"); + } + }); + $('#loadAtresplayerBtnHeader').on('click', async () => { + if (typeof generateM3UAtresplayer === 'function') { + await generateM3UAtresplayer(); + } else { + if (typeof showNotification === 'function') showNotification("Funcionalidad Atresplayer no cargada.", "error"); + } + }); + $('#loadBarTvBtnHeader').on('click', async () => { + if (typeof generateM3uBarTv === 'function') { + await generateM3uBarTv(); + } else { + if (typeof showNotification === 'function') showNotification("Funcionalidad BarTV no cargada.", "error"); + } + }); + + + $('#searchInput').on('input', debounce(filterAndRenderChannels, 300)); + + $('#groupFilterSidebar').on('change', async function() { + const selectedGroup = $(this).val(); + currentPage = 1; + filterAndRenderChannels(); + if (userSettings.persistFilters) { + userSettings.lastSelectedGroup = selectedGroup; + await saveAppConfigValue('userSettings', userSettings); + } + }); + + $('#sidebarGroupList').on('click', '.list-group-item', function () { + const groupName = $(this).data('group-name'); + $('#groupFilterSidebar').val(groupName).trigger('change'); + }); + + $('#showAllChannels').on('click', () => switchFilter('all')); + $('#showFavorites').on('click', () => switchFilter('favorites')); + $('#showHistory').on('click', () => switchFilter('history')); + + $('#openEpgModalBtn').on('click', () => $('#epgModal').modal('show')); + $('#openMovistarVODModalBtn').on('click', openMovistarVODModal); + $('#xtreamBackButton').on('click', popNavigationState); + + $('#updateDaznBtn').on('click', async () => { + if (typeof orchestrateDaznUpdate === 'function') { + if (!channels || channels.length === 0) { + showNotification('Carga una lista M3U que contenga canales de DAZN primero.', 'info'); + return; + } + let daznM3uUserAgent = null; + const daznChannelInM3U = channels.find(ch => + (ch.sourceOrigin && ch.sourceOrigin.toLowerCase() === 'dazn') || + (ch.url && ch.url.toLowerCase().includes('dazn')) || + (ch['tvg-id'] && ch['tvg-id'].toLowerCase().includes('dazn')) + ); + if (daznChannelInM3U && daznChannelInM3U.vlcOptions && daznChannelInM3U.vlcOptions['http-user-agent']) { + daznM3uUserAgent = daznChannelInM3U.vlcOptions['http-user-agent']; + } + await orchestrateDaznUpdate(daznM3uUserAgent); + } else { + showNotification('Error: Funcionalidad DAZN no cargada.', 'error'); + } + }); + $('#openXtreamModalBtn').on('click', () => { + if (typeof showXtreamConnectionModal === 'function') showXtreamConnectionModal(); + }); + $('#openManageXCodecPanelsModalBtn').on('click', () => { + if (typeof bootstrap !== 'undefined' && typeof bootstrap.Modal !== 'undefined') { + const xcodecModalEl = document.getElementById('manageXCodecPanelsModal'); + if (xcodecModalEl) { + const xcodecModalInstance = bootstrap.Modal.getOrCreateInstance(xcodecModalEl); + xcodecModalInstance.show(); + if (typeof loadSavedXCodecPanels === 'function') loadSavedXCodecPanels(); + } else { + showNotification("Error: Modal XCodec no encontrado.", "error"); + } + } else { + showNotification("Error: Bootstrap no cargado, no se puede abrir modal XCodec.", "error"); + } + }); + + $('#openSettingsModalBtn').on('click', () => { + $('#settingsModal').modal('show'); + if (typeof updateMovistarVodCacheStatsUI === 'function') { + updateMovistarVodCacheStatsUI(); + } + }); + + $(document).on('keydown', handleGlobalKeyPress); + + $('#player-taskbar').on('click', '.taskbar-item', function() { + const windowId = $(this).data('windowId'); + if (windowId) { + setActivePlayer(windowId); + } + }); + + $('#prevPage').on('click', () => changePage(currentPage - 1)); + $('#nextPage').on('click', () => changePage(currentPage + 1)); + $('#channelGrid').on('click', '.channel-card', handleChannelCardClick); + + $('#channelGrid').on('mouseenter', '.channel-card', function() { + if (!userSettings.enableHoverPreview) return; + const card = $(this); + if (Object.keys(playerInstances).length > 0) return; + + if (activeCardPreviewPlayer && activeCardPreviewElement && activeCardPreviewElement[0] !== card[0]) { + if (typeof destroyActiveCardPreviewPlayer === 'function') destroyActiveCardPreviewPlayer(); + } + + clearTimeout(hoverPlayTimeout); + + hoverPlayTimeout = setTimeout(async () => { + const channelUrl = card.data('url'); + if (!channelUrl) return; + + const channel = channels.find(c => c.url === channelUrl); + if (channel) { + if (channel.attributes && channel.attributes['xtream-type'] === 'series') { + return; + } + if (typeof playChannelInCardPreview === 'function') { + activeCardPreviewElement = card; + card.addClass('is-playing-preview'); + await playChannelInCardPreview(channel, card.find('.card-video-preview-container')[0]); + } + } + }, HOVER_PLAY_DELAY); + }); + + $('#channelGrid').on('mouseleave', '.channel-card', function() { + clearTimeout(hoverPlayTimeout); + if (activeCardPreviewElement && activeCardPreviewElement[0] === $(this)[0]) { + if (typeof destroyActiveCardPreviewPlayer === 'function') destroyActiveCardPreviewPlayer(); + } + }); + + + $('#channelGrid').on('click', '.favorite-btn', handleFavoriteButtonClick); + $('#channelGrid').on('error', '.channel-logo', function () { + this.classList.add('error'); + this.style.display = 'none'; + const placeholder = $(this).siblings('.epg-icon-placeholder'); + if (placeholder.length) { placeholder.show(); } + else { $(this).parent().addClass('no-logo-fallback'); } + }); + + $('#saveSettingsBtn').on('click', () => { if(typeof saveUserSettings === 'function') saveUserSettings(); }); + + const rangeInputsSelector = '#epgNameMatchThreshold, #playerBufferInput, #channelCardSizeInput, #abrDefaultBandwidthEstimateInput, #manifestRetryMaxAttemptsInput, #manifestRetryTimeoutInput, #segmentRetryMaxAttemptsInput, #segmentRetryTimeoutInput, #epgDensityInput, #channelsPerPageInput, #particleOpacityInput, #shakaDefaultPresentationDelayInput, #shakaAudioVideoSyncThresholdInput, #playerWindowOpacityInput'; + $(rangeInputsSelector).on('input', function () { + const id = this.id; + const value = $(this).val(); + if(id === 'epgNameMatchThreshold') $('#epgNameMatchThresholdValue').text(value + '%'); + if(id === 'playerBufferInput') $('#playerBufferValue').text(value + 's'); + if(id === 'channelCardSizeInput') { + const size = value + 'px'; + $('#channelCardSizeValue').text(size); + document.documentElement.style.setProperty('--m3u-grid-minmax-size', size); + } + if(id === 'channelsPerPageInput') $('#channelsPerPageValue').text(value); + if(id === 'abrDefaultBandwidthEstimateInput') $('#abrDefaultBandwidthEstimateValue').text(value + ' Kbps'); + if(id === 'manifestRetryMaxAttemptsInput') $('#manifestRetryMaxAttemptsValue').text(value); + if(id === 'manifestRetryTimeoutInput') $('#manifestRetryTimeoutValue').text(value); + if(id === 'segmentRetryMaxAttemptsInput') $('#segmentRetryMaxAttemptsValue').text(value); + if(id === 'segmentRetryTimeoutInput') $('#segmentRetryTimeoutValue').text(value); + if(id === 'epgDensityInput') $('#epgDensityValue').text(value + 'px/h'); + if(id === 'particleOpacityInput') $('#particleOpacityValue').text(value + '%'); + if(id === 'shakaDefaultPresentationDelayInput') $('#shakaDefaultPresentationDelayValue').text(parseFloat(value).toFixed(parseFloat(value) % 1 === 0 ? 0 : 1) + 's'); + if(id === 'shakaAudioVideoSyncThresholdInput') $('#shakaAudioVideoSyncThresholdValue').text(parseFloat(value).toFixed(parseFloat(value) % 1 === 0 ? 0 : 2) + 's'); + if(id === 'playerWindowOpacityInput') { + $('#playerWindowOpacityValue').text(Math.round(value * 100) + '%'); + Object.values(playerInstances).forEach(instance => { + if (instance.container) { + instance.container.style.setProperty('--player-window-opacity', value); + } + }); + } + }); + + $('#exportSettingsBtn').on('click', () => { if(typeof exportSettings === 'function') exportSettings(); }); + $('#importSettingsInput').on('change', (event) => { if(typeof importSettings === 'function') importSettings(event); }); + $('#clearCacheBtn').on('click', clearCacheAndReload); + + $('#connectXtreamServerBtn').on('click', () => { + if (typeof handleConnectXtreamServer === 'function') handleConnectXtreamServer(); + }); + $('#xtreamConfirmGroupSelectionBtn').on('click', () => { + if (typeof handleXtreamGroupSelection === 'function') handleXtreamGroupSelection(); + }); + $('#saveXtreamServerBtn').on('click', () => { + if (typeof handleSaveXtreamServer === 'function') handleSaveXtreamServer(); + }); + $('#savedXtreamServersList').on('click', '.load-xtream-server-btn', function() { + const serverId = parseInt($(this).data('id'), 10); + if (typeof loadXtreamServerToForm === 'function') loadXtreamServerToForm(serverId); + }); + $('#savedXtreamServersList').on('click', '.delete-xtream-server-btn', function() { + const serverId = parseInt($(this).data('id'), 10); + if (typeof handleDeleteXtreamServer === 'function') handleDeleteXtreamServer(serverId); + }); + + $('#sendM3UToServerBtn').on('click', () => { + const urlFromInput = $('#m3uUploadServerUrlInput').val()?.trim(); + if (typeof sendM3UToServer === 'function') { + sendM3UToServer(urlFromInput); + } else { + showNotification("Error: Función para enviar M3U no encontrada.", "error"); + } + }); + + $('#movistarLoginBtnSettings').on('click', handleMovistarLogin); + $('#movistarValidateAllBtnSettings').on('click', handleMovistarValidateAllTokens); + $('#movistarDeleteExpiredBtnSettings').on('click', handleMovistarDeleteExpiredTokens); + $('#movistarAddManualTokenBtnSettings').on('click', handleMovistarAddManualToken); + $('#movistarLongTokensTableBodySettings').on('click', '.delete-long-token-btn-settings', function() { + const tokenId = $(this).closest('tr').data('tokenid'); + if (tokenId) handleMovistarDeleteSingleLongToken(tokenId); + }); + $('#movistarLongTokensTableBodySettings').on('click', '.validate-long-token-btn-settings', function() { + const tokenId = $(this).closest('tr').data('tokenid'); + if (tokenId) handleMovistarValidateSingleLongToken(tokenId); + }); + $('#movistarLongTokensTableBodySettings').on('click', 'tr', function(event) { + const tokenId = $(this).data('tokenid'); + if (tokenId && !$(event.target).closest('button').length) { + selectedMovistarLongTokenIdForSettings = tokenId; + $('#movistarLongTokensTableBodySettings tr').removeClass('table-active'); + $(this).addClass('table-active'); + $('#selectedLongTokenIdDisplaySettings').text(`...${tokenId.slice(-12)}`); + $('#movistarDeviceManagementSectionSettings').show(); + $('#movistarLoadDevicesForSettingsBtn').prop('disabled', false); + $('#movistarDevicesListForSettings').html('
    Carga los dispositivos para el token seleccionado arriba.
    '); + $('#movistarAssociateDeviceForSettingsBtn').prop('disabled', true); + $('#movistarRegisterNewDeviceForSettingsBtn').prop('disabled', false); + } + }); + $('#movistarLoadDevicesForSettingsBtn').on('click', handleMovistarLoadDevicesForSettings); + $('#movistarAssociateDeviceForSettingsBtn').on('click', handleMovistarAssociateDeviceForSettings); + $('#movistarRegisterNewDeviceForSettingsBtn').on('click', handleMovistarRegisterNewDeviceForSettings); + $('#movistarRefreshCdnBtnSettings').on('click', handleMovistarRefreshCdnToken); + $('#movistarCopyCdnBtnSettings').on('click', handleMovistarCopyCdnToken); + $('#movistarApplyCdnToChannelsBtnSettings').on('click', handleMovistarApplyCdnToChannels); + $('#clearMovistarVodCacheBtnSettings').on('click', handleClearMovistarVodCache); + + + $('#loadMovistarVODBtn').on('click', loadMovistarVODData); + $('#movistarVODDateInput').on('change', function() { + movistarVodSelectedDate = new Date($(this).val() + 'T00:00:00'); + loadMovistarVODData(); + }); + $('#movistarVODModal-channel-filter, #movistarVODModal-genre-filter').on('change', renderMovistarVODPrograms); + $('#movistarVODModal-search-input').on('input', debounce(renderMovistarVODPrograms, 300)); + + $('#movistarVODModal-programs').on('click', '.movistar-vod-card', function() { + const programArrayIndex = parseInt($(this).data('program-array-index'), 10); + if (!isNaN(programArrayIndex) && movistarVodFilteredPrograms[programArrayIndex]) { + const program = movistarVodFilteredPrograms[programArrayIndex]; + if (program && typeof handleMovistarVODProgramClick === 'function') { + handleMovistarVODProgramClick(program); + } + } else { + showNotification("Error al seleccionar el programa VOD.", "error"); + } + }); + + $('#movistarVODModal-prev-page').on('click', function() { + if (movistarVodCurrentPage > 1) { + movistarVodCurrentPage--; + displayCurrentMovistarVODPage(); + updateMovistarVODPaginationControls(); + } + }); + $('#movistarVODModal-next-page').on('click', function() { + const totalPages = Math.ceil(movistarVodFilteredPrograms.length / MOVISTAR_VOD_ITEMS_PER_PAGE); + if (movistarVodCurrentPage < totalPages) { + movistarVodCurrentPage++; + displayCurrentMovistarVODPage(); + updateMovistarVODPaginationControls(); + } + }); +} + +async function applyUISettings() { + await loadLanguage(userSettings.language); + applyTranslations(); + + if (typeof populateUserSettingsForm === 'function') populateUserSettingsForm(); + if (typeof applyThemeAndFont === 'function') applyThemeAndFont(); + + const sidebar = $('#sidebar'); + const appContainer = $('#app-container'); + if (userSettings.sidebarCollapsed && window.innerWidth >= 992) { + sidebar.removeClass('expanded').addClass('collapsed'); + appContainer.addClass('sidebar-collapsed'); + } else if(window.innerWidth >= 992) { + sidebar.removeClass('collapsed').addClass('expanded'); + appContainer.removeClass('sidebar-collapsed'); + } else { + sidebar.removeClass('expanded').addClass('collapsed'); + appContainer.addClass('sidebar-collapsed'); + } + + document.documentElement.style.setProperty('--m3u-grid-minmax-size', userSettings.channelCardSize + 'px'); + document.documentElement.style.setProperty('--card-logo-aspect-ratio', userSettings.cardLogoAspectRatio === 'auto' ? '16/9' : userSettings.cardLogoAspectRatio); + Object.values(playerInstances).forEach(instance => { + if (typeof updatePlayerConfigFromSettings === 'function') { + updatePlayerConfigFromSettings(instance.player); + } + if (instance.container) { + instance.container.style.setProperty('--player-window-opacity', userSettings.playerWindowOpacity); + } + }); + if (typeof initParticles === 'function') initParticles(); + if (userSettings.persistFilters) { + if(userSettings.lastSelectedFilterTab) currentFilter = userSettings.lastSelectedFilterTab; + } + + if (channels.length > 0) filterAndRenderChannels(); +} + +function initParticles() { + if (typeof particlesJS === 'function' && document.getElementById('particles-js') && !document.getElementById('particles-js').dataset.initialized && userSettings.particlesEnabled) { + document.getElementById('particles-js').dataset.initialized = 'true'; + const particleColor = getComputedStyle(document.documentElement).getPropertyValue('--accent-secondary').trim(); + const particleLineColor = getComputedStyle(document.documentElement).getPropertyValue('--accent-primary').trim(); + document.documentElement.style.setProperty('--particle-opacity', userSettings.particleOpacity); + + + particlesJS('particles-js', { + "particles": { + "number": { "value": 30, "density": { "enable": true, "value_area": 1200 } }, + "color": { "value": particleColor }, + "shape": { "type": "circle" }, + "opacity": { "value": 1, "random": true, "anim": { "enable": true, "speed": 0.15, "opacity_min": 0.3, "sync": false } }, + "size": { "value": 1.5, "random": true }, + "line_linked": { "enable": true, "distance": 160, "color": particleLineColor, "opacity": 0.5, "width": 1 }, + "move": { "enable": true, "speed": 0.8, "direction": "none", "random": true, "straight": false, "out_mode": "out" } + }, + "interactivity": { "detect_on": "canvas", "events": { "onhover": { "enable": false }, "onclick": { "enable": false }, "resize": true } }, + "retina_detect": true + }); + const particlesCanvas = document.querySelector('#particles-js canvas'); + if(particlesCanvas && particlesCanvas.style) { + particlesCanvas.style.setProperty('opacity', '1', 'important'); + } + $('#particles-js').removeClass('disabled'); + } else if (!userSettings.particlesEnabled && document.getElementById('particles-js')) { + $('#particles-js').addClass('disabled'); + if(typeof pJSDom !== 'undefined' && pJSDom.length > 0 && pJSDom[0].pJS) { + pJSDom[0].pJS.fn.vendors.destroypJS(); + pJSDom = []; + if (document.getElementById('particles-js')) document.getElementById('particles-js').dataset.initialized = 'false'; + } + } +} + +window.updateM3UWithDaznData = function(daznChannelDetailsList) { + if (!channels || channels.length === 0) { + if(typeof showNotification === 'function') showNotification('DAZN: No hay lista M3U cargada para actualizar.', 'info'); + return; + } + if (!daznChannelDetailsList || daznChannelDetailsList.length === 0) { + if(typeof showNotification === 'function') showNotification('DAZN: No se recibieron datos de canales para la actualización.', 'info'); + return; + } + + let updatedCount = 0; + const daznDataMapByLinearId = new Map(); + daznChannelDetailsList.forEach(daznChannel => { + if (daznChannel.daznLinearId) { + daznDataMapByLinearId.set(daznChannel.daznLinearId, daznChannel); + } + }); + + channels.forEach(m3uChannel => { + let currentChannelLinearId = null; + if (m3uChannel.url) { + const urlMatch = m3uChannel.url.match(/dazn-linear-(\d+)/); + if (urlMatch && urlMatch[1]) { + currentChannelLinearId = urlMatch[1]; + } + } + + if (!currentChannelLinearId && m3uChannel['tvg-id']) { + const tvgIdMatch = String(m3uChannel['tvg-id']).match(/dazn-linear-(\d+)/i); + if (tvgIdMatch && tvgIdMatch[1]) { + currentChannelLinearId = tvgIdMatch[1]; + } + } + + if (currentChannelLinearId && daznDataMapByLinearId.has(currentChannelLinearId)) { + const daznUpdate = daznDataMapByLinearId.get(currentChannelLinearId); + + m3uChannel.url = daznUpdate.baseUrl; + + if (!m3uChannel.kodiProps) { + m3uChannel.kodiProps = {}; + } + if (!m3uChannel.vlcOptions) { + m3uChannel.vlcOptions = {}; + } + + if (daznUpdate.cdnTokenName && daznUpdate.cdnTokenValue) { + m3uChannel.kodiProps['inputstream.adaptive.stream_headers'] = `${daznUpdate.cdnTokenName}=${daznUpdate.cdnTokenValue}`; + } else { + delete m3uChannel.kodiProps['inputstream.adaptive.stream_headers']; + } + + if (daznUpdate.streamUserAgent) { + m3uChannel.vlcOptions['http-user-agent'] = daznUpdate.streamUserAgent; + } + m3uChannel.sourceOrigin = "DAZN"; + + updatedCount++; + } + }); + + if (updatedCount > 0) { + if(typeof showNotification === 'function') showNotification(`DAZN: ${updatedCount} canales actualizados en tu lista M3U.`, 'success'); + regenerateCurrentM3UContentFromString(); + filterAndRenderChannels(); + } else { + if(typeof showNotification === 'function') showNotification('DAZN: No se encontraron canales en tu M3U que coincidieran con los datos de DAZN para actualizar.', 'info'); + } +}; + +function logToMovistarSettingsUI(message, type = 'info') { + const logArea = $('#movistarLogAreaSettings'); + if (logArea.length) { + const timestamp = new Date().toLocaleTimeString(); + const existingLog = logArea.val(); + const newLog = `[${timestamp}] ${message}\n`; + logArea.val(existingLog + newLog); + logArea.scrollTop(logArea[0].scrollHeight); + } +} + +async function loadAndDisplayInitialMovistarStatus() { + if (!window.MovistarTokenHandler) return; + logToMovistarSettingsUI("Cargando estado inicial de Movistar+...", "info"); + try { + const status = await window.MovistarTokenHandler.getShortTokenStatus(); + updateMovistarCdnTokenUI(status.token, status.expiry); + await loadAndRenderLongTokensListSettings(); + } catch (error) { + logToMovistarSettingsUI(`Error cargando estado inicial: ${error.message}`, "error"); + } +} + +function updateMovistarCdnTokenUI(token, expiryTimestamp) { + $('#movistarCdnTokenDisplaySettings').val(token || ""); + const expiryDate = expiryTimestamp ? new Date(expiryTimestamp * 1000) : null; + if (expiryDate && expiryTimestamp > Math.floor(Date.now() / 1000)) { + $('#movistarCdnTokenExpirySettings').text(`${chrome.i18n.getMessage("movistarExpiresHeader") || "Expira"}: ${expiryDate.toLocaleString()}`); + $('#movistarCdnTokenExpirySettings').removeClass('text-danger').addClass('text-success'); + } else if (expiryDate) { + $('#movistarCdnTokenExpirySettings').text(`Expirado: ${expiryDate.toLocaleString()}`); + $('#movistarCdnTokenExpirySettings').removeClass('text-success').addClass('text-danger'); + } else { + $('#movistarCdnTokenExpirySettings').text(`${chrome.i18n.getMessage("movistarExpiresHeader") || "Expira"}: -`); + $('#movistarCdnTokenExpirySettings').removeClass('text-success text-danger'); + } + $('#movistarCopyCdnBtnSettings').prop('disabled', !token); + $('#movistarApplyCdnToChannelsBtnSettings').prop('disabled', !token || (expiryTimestamp <= Math.floor(Date.now()/1000))); +} + +async function loadAndRenderLongTokensListSettings() { + if (!window.MovistarTokenHandler) return; + const tbody = $('#movistarLongTokensTableBodySettings'); + tbody.html(` ${chrome.i18n.getMessage("movistarLoading") || "Cargando..."}`); + selectedMovistarLongTokenIdForSettings = null; + $('#movistarDeviceManagementSectionSettings').hide(); + $('#movistarLoadDevicesForSettingsBtn').prop('disabled', true); + + try { + const tokens = await window.MovistarTokenHandler.getAllLongTokens(); + if (tokens.length === 0) { + tbody.html(`${chrome.i18n.getMessage("xtreamNoSavedServers") || "No hay tokens largos guardados."}`); + return; + } + tokens.sort((a, b) => (b.expiry_tstamp || 0) - (a.expiry_tstamp || 0)); + tbody.empty(); + const nowSeconds = Math.floor(Date.now() / 1000); + + tokens.forEach(token => { + const isExpired = (token.expiry_tstamp || 0) < nowSeconds; + const expiryDate = token.expiry_tstamp ? new Date(token.expiry_tstamp * 1000) : null; + const expiryString = expiryDate ? expiryDate.toLocaleDateString() : 'N/D'; + let statusText = isExpired ? 'Expirado' : (token.device_id ? 'Válido' : 'Sin DeviceID'); + let statusClass = isExpired ? 'text-danger' : (token.device_id ? 'text-success' : 'text-warning'); + + const tr = $('').data('tokenid', token.id).css('cursor', 'pointer'); + tr.append($('').text(`...${token.id.slice(-12)}`).attr('title', token.id)); + tr.append($('').text(token.account_nbr || 'N/A')); + tr.append($('').text(token.device_id ? `...${token.device_id.slice(-6)}` : 'NULO').attr('title', token.device_id || 'Sin Device ID')); + tr.append($('').text(expiryString)); + tr.append($('').addClass(statusClass).text(statusText)); + tr.append($('') + .append($(' +
    + + + + + + `; + modalElement = wrapper.firstElementChild; + document.body.appendChild(modalElement); + } else { + $(modalElement).find('.modal-title').text(title); + $(modalElement).find('.modal-body p').text(message); + $(modalElement).find(`#${modalId}ConfirmBtn`).text(confirmText).attr('class', `btn ${confirmClass}`); + } + + const confirmBtn = document.getElementById(`${modalId}ConfirmBtn`); + const modalInstance = bootstrap.Modal.getOrCreateInstance(document.getElementById(modalId)); + + + const confirmHandler = () => { + confirmBtn.removeEventListener('click', confirmHandler); + modalInstance.hide(); + resolve(true); + }; + + $(modalElement).off('hidden.bs.modal.confirm').one('hidden.bs.modal.confirm', () => { + confirmBtn.removeEventListener('click', confirmHandler); + resolve(false); + }); + + $(confirmBtn).off('click.confirm').one('click.confirm', confirmHandler); + + modalInstance.show(); + }); +} \ No newline at end of file diff --git a/user_session.js b/user_session.js new file mode 100644 index 0000000..cccea83 --- /dev/null +++ b/user_session.js @@ -0,0 +1,178 @@ +async function loadLastM3U() { + const urlParams = new URLSearchParams(window.location.search); + if (urlParams.has('url') || urlParams.has('name')) { return; } + + if (!userSettings.autoSaveM3U) { + checkIfChannelsExist(); + return; + } + + const lastUrl = await getAppConfigValue('lastM3UUrl'); + const lastFileContent = await getAppConfigValue('lastM3UFileContent'); + const lastXtreamInfoStr = await getAppConfigValue('currentXtreamServerInfo'); + + if (lastXtreamInfoStr) { + try { + const lastXtreamInfo = JSON.parse(lastXtreamInfoStr); + if (lastXtreamInfo && lastXtreamInfo.host && lastXtreamInfo.username && lastXtreamInfo.password) { + showNotification(`Recargando última conexión Xtream: ${escapeHtml(lastXtreamInfo.name || lastXtreamInfo.host)}...`, 'info'); + if(typeof handleConnectXtreamServer === 'function') { + $('#xtreamServerNameInput').val(lastXtreamInfo.name || ''); + $('#xtreamHostInput').val(lastXtreamInfo.host); + $('#xtreamUsernameInput').val(lastXtreamInfo.username); + $('#xtreamPasswordInput').val(lastXtreamInfo.password); + $('#xtreamOutputTypeSelect').val(lastXtreamInfo.outputType || 'm3u_plus'); + $('#xtreamFetchEpgCheck').prop('checked', typeof lastXtreamInfo.fetchEpg === 'boolean' ? lastXtreamInfo.fetchEpg : true); + handleConnectXtreamServer(); + } else { + checkIfChannelsExist(); + } + return; + } else { + await deleteAppConfigValue('currentXtreamServerInfo'); + } + } catch (e) { + await deleteAppConfigValue('currentXtreamServerInfo'); + } + } + + if (lastUrl) { + showNotification('Cargando última lista URL...', 'info'); + loadUrl(lastUrl) + .catch(async () => { + await deleteAppConfigValue('lastM3UUrl'); + const lastFileContentAfterFail = await getAppConfigValue('lastM3UFileContent'); + if (lastFileContentAfterFail) loadLastM3U(); + else checkIfChannelsExist(); + }); + } else if (lastFileContent) { + showNotification('Cargando última lista local guardada...', 'info'); + try { + const m3uName = await getAppConfigValue('lastM3UFileName') || 'lista_local_guardada.m3u'; + processM3UContent(lastFileContent, m3uName, true); + } catch (err) { + showNotification(`Error recargando lista local: ${err.message}`, 'error'); + await deleteAppConfigValue('lastM3UFileContent'); + await deleteAppConfigValue('lastM3UFileName'); + channels = []; currentM3UContent = null; currentM3UName = null; currentGroupOrder = []; + filterAndRenderChannels(); + } + } else { + checkIfChannelsExist(); + let initialGroupToSelect = ""; + if (userSettings.persistFilters && userSettings.lastSelectedGroup) { + initialGroupToSelect = userSettings.lastSelectedGroup; + } + $('#groupFilterSidebar').val(initialGroupToSelect); + filterAndRenderChannels(); + } +} + +async function toggleFavorite(url) { + const index = favorites.indexOf(url); + const $button = $(`.favorite-btn[data-url="${escapeHtml(url)}"]`); + if (index > -1) { + favorites.splice(index, 1); + $button.removeClass('favorite').attr('title', 'Añadir favorito'); + showNotification('Quitado de favoritos.', 'info'); + } else { + favorites.push(url); + $button.addClass('favorite').attr('title', 'Quitar favorito'); + showNotification('Añadido a favoritos.', 'success'); + } + await saveAppConfigValue('favorites', favorites); + + if (currentFilter === 'favorites') { + currentPage = 1; + filterAndRenderChannels(); + } else { + updateGroupSelectors(); + } +} + +async function addToHistory(channel) { + if (!channel || !channel.url) { return; } + appHistory = appHistory.filter(hUrl => hUrl !== channel.url); + appHistory.unshift(channel.url); + appHistory = appHistory.slice(0, 50); + await saveAppConfigValue('history', appHistory); + + if (currentFilter === 'history') { + currentPage = 1; + filterAndRenderChannels(); + } else { + updateGroupSelectors(); + } +} + +async function clearCacheAndReload() { + const confirmed = await showConfirmationModal( + "¿Estás seguro de que quieres borrar TODOS los datos locales (historial, favoritos, listas guardadas, servidores Xtream, EPG, ajustes y tokens)? La página se recargará.", + "Confirmar Limpieza Completa", + "Sí, Borrar Todo", + "btn-danger" + ); + + if (!confirmed) { + showNotification("Operación cancelada.", "info"); + return; + } + + showLoading(true, "Limpiando datos..."); + try { + if (typeof dbPromise !== 'undefined' && dbPromise) { + const db = await dbPromise; + if (db) { + db.close(); + dbPromise = null; + } + } + + await new Promise((resolve, reject) => { + const deleteRequest = indexedDB.deleteDatabase(dbName); + deleteRequest.onsuccess = () => { + showNotification("Base de datos eliminada. La página se recargará.", "success"); + setTimeout(() => window.location.reload(), 1500); + resolve(); + }; + deleteRequest.onerror = (event) => { + reject(event.target.error); + }; + deleteRequest.onblocked = () => { + showNotification("Borrado de BD bloqueado. Cierra otras pestañas de la extensión y reintenta.", "warning"); + reject(new Error("Database deletion blocked")); + }; + }); + + } catch (error) { + showLoading(false); + showNotification("Error limpiando datos: " + error.message, "error"); + } +} + +function handleSaveToDB() { + const nameInput = $('#saveM3UNameInput').val(); + if (!nameInput || !nameInput.trim()) { + showNotification('Nombre de lista inválido o vacío. Guardado cancelado.', 'info'); + return; + } + const finalName = nameInput.trim(); + const saveModalInstance = bootstrap.Modal.getInstance(document.getElementById('saveM3UModal')); + if(saveModalInstance) saveModalInstance.hide(); + + showLoading(true, `Guardando "${escapeHtml(finalName)}"...`); + if (typeof saveFileToDB === 'function') { + saveFileToDB(finalName, currentM3UContent) + .then(() => showNotification(`Lista "${escapeHtml(finalName)}" guardada (${typeof countChannels === 'function' ? countChannels(currentM3UContent) : 0} canales).`, 'success')) + .catch(err => { + if (err.message.includes('cancelada')) { + showNotification('Guardado cancelado por el usuario.', 'info'); + } else { + showNotification(`Error al guardar "${escapeHtml(finalName)}": ${err.message}`, 'error'); + } + }) + .finally(() => showLoading(false)); + } else { + showLoading(false); + } +} \ No newline at end of file diff --git a/xcodec_handler.js b/xcodec_handler.js new file mode 100644 index 0000000..5680a23 --- /dev/null +++ b/xcodec_handler.js @@ -0,0 +1,819 @@ +const PRESET_XCODEC_PANELS = [ + { name: "Orange", serverUrl: "http://213.220.3.165/", apiToken: "iM4iIpjCWwNiOoL4EPEZV1xD" }, +]; + +let xcodecUi = { + manageModal: null, + panelNameInput: null, + panelServerUrlInput: null, + panelApiTokenInput: null, + editingPanelIdInput: null, + savePanelBtn: null, + clearFormBtn: null, + processPanelBtn: null, + processAllPanelsBtn: null, + importPresetBtn: null, + savedPanelsList: null, + status: null, + progressContainer: null, + progressBar: null, + previewModal: null, + previewModalLabel: null, + previewStats: null, + previewGroupList: null, + previewChannelList: null, + previewSelectAllGroupsBtn: null, + previewSelectAllChannelsInGroupBtn: null, + addSelectedBtn: null, + addAllValidBtn: null +}; + +let xcodecTotalApiCallsExpected = 0; +let xcodecApiCallsCompleted = 0; +let currentXCodecPanelDataForPreview = null; +let xcodecProcessedStreamsForPreview = []; + +function initXCodecPanelManagement() { + xcodecUi.manageModal = document.getElementById('manageXCodecPanelsModal'); + xcodecUi.panelNameInput = document.getElementById('xcodecPanelNameInput'); + xcodecUi.panelServerUrlInput = document.getElementById('xcodecPanelServerUrlInput'); + xcodecUi.panelApiTokenInput = document.getElementById('xcodecPanelApiTokenInput'); + xcodecUi.editingPanelIdInput = document.getElementById('xcodecEditingPanelIdInput'); + xcodecUi.savePanelBtn = document.getElementById('xcodecSavePanelBtn'); + xcodecUi.clearFormBtn = document.getElementById('xcodecClearFormBtn'); + xcodecUi.processPanelBtn = document.getElementById('xcodecProcessPanelBtn'); + xcodecUi.processAllPanelsBtn = document.getElementById('xcodecProcessAllPanelsBtn'); + xcodecUi.importPresetBtn = document.getElementById('xcodecImportPresetPanelsBtn'); + xcodecUi.savedPanelsList = document.getElementById('savedXCodecPanelsList'); + xcodecUi.status = document.getElementById('xcodecStatus'); + xcodecUi.progressContainer = document.getElementById('xcodecProgressContainer'); + xcodecUi.progressBar = document.getElementById('xcodecProgressBar'); + + xcodecUi.previewModal = document.getElementById('xcodecPreviewModal'); + xcodecUi.previewModalLabel = document.getElementById('xcodecPreviewModalLabel'); + xcodecUi.previewStats = document.getElementById('xcodecPreviewStats'); + xcodecUi.previewGroupList = document.getElementById('xcodecPreviewGroupList'); + xcodecUi.previewChannelList = document.getElementById('xcodecPreviewChannelList'); + xcodecUi.previewSelectAllGroupsBtn = document.getElementById('xcodecPreviewSelectAllGroupsBtn'); + xcodecUi.previewSelectAllChannelsInGroupBtn = document.getElementById('xcodecPreviewSelectAllChannelsInGroupBtn'); + xcodecUi.addSelectedBtn = document.getElementById('xcodecAddSelectedBtn'); + xcodecUi.addAllValidBtn = document.getElementById('xcodecAddAllValidBtn'); + + if (xcodecUi.savePanelBtn) xcodecUi.savePanelBtn.addEventListener('click', handleSaveXCodecPanel); + if (xcodecUi.clearFormBtn) xcodecUi.clearFormBtn.addEventListener('click', clearXCodecPanelForm); + if (xcodecUi.processPanelBtn) xcodecUi.processPanelBtn.addEventListener('click', () => processPanelFromForm(false)); + if (xcodecUi.processAllPanelsBtn) xcodecUi.processAllPanelsBtn.addEventListener('click', processAllSavedXCodecPanels); + if (xcodecUi.importPresetBtn) xcodecUi.importPresetBtn.addEventListener('click', importPresetXCodecPanels); + + if (xcodecUi.previewSelectAllGroupsBtn) xcodecUi.previewSelectAllGroupsBtn.addEventListener('click', toggleAllGroupsInPreview); + if (xcodecUi.previewSelectAllChannelsInGroupBtn) xcodecUi.previewSelectAllChannelsInGroupBtn.addEventListener('click', toggleAllChannelsInCurrentPreviewGroup); + if (xcodecUi.addSelectedBtn) xcodecUi.addSelectedBtn.addEventListener('click', addSelectedXCodecStreamsToM3U); + if (xcodecUi.addAllValidBtn) xcodecUi.addAllValidBtn.addEventListener('click', addAllValidXCodecStreamsToM3U); + + if (xcodecUi.savedPanelsList) { + xcodecUi.savedPanelsList.addEventListener('click', (event) => { + const target = event.target.closest('button'); + if (!target) return; + const panelId = parseInt(target.dataset.id, 10); + if (target.classList.contains('load-xcodec-panel-btn')) { + loadXCodecPanelToForm(panelId); + } else if (target.classList.contains('delete-xcodec-panel-btn')) { + handleDeleteXCodecPanel(panelId); + } else if (target.classList.contains('process-xcodec-panel-direct-btn')) { + loadXCodecPanelToForm(panelId).then(() => processPanelFromForm(true)); + } + }); + } + if (xcodecUi.previewGroupList) { + xcodecUi.previewGroupList.addEventListener('click', (event) => { + const groupItem = event.target.closest('.list-group-item'); + if (groupItem && groupItem.dataset.groupName) { + const groupName = groupItem.dataset.groupName; + renderXCodecPreviewChannels(groupName); + xcodecUi.previewGroupList.querySelectorAll('.list-group-item').forEach(item => item.classList.remove('active')); + groupItem.classList.add('active'); + xcodecUi.previewSelectAllChannelsInGroupBtn.disabled = false; + } + }); + } + loadSavedXCodecPanels(); +} + +function xcodecUpdateStatus(message, type = 'info', modal = 'manage') { + const statusEl = modal === 'manage' ? xcodecUi.status : xcodecUi.previewStats; + if (!statusEl) return; + statusEl.textContent = message; + statusEl.className = 'alert mt-2'; + statusEl.style.display = 'block'; + if (type) statusEl.classList.add(`alert-${type}`); +} + +function xcodecResetProgress(expectedCalls = 0) { + if (!xcodecUi) return; + xcodecApiCallsCompleted = 0; + xcodecTotalApiCallsExpected = expectedCalls; + xcodecUi.progressBar.style.width = '0%'; + xcodecUi.progressBar.textContent = '0%'; + xcodecUi.progressContainer.style.display = expectedCalls > 0 ? 'block' : 'none'; +} + +function xcodecUpdateProgress() { + if (!xcodecUi || xcodecTotalApiCallsExpected === 0) return; + xcodecApiCallsCompleted++; + const percentage = Math.min(100, Math.max(0, (xcodecApiCallsCompleted / xcodecTotalApiCallsExpected) * 100)); + xcodecUi.progressBar.style.width = percentage + '%'; + xcodecUi.progressBar.textContent = Math.round(percentage) + '%'; + if (percentage >= 100 && xcodecUi.progressContainer) { + setTimeout(() => { if (xcodecUi.progressContainer) xcodecUi.progressContainer.style.display = 'none'; }, 1500); + } +} + +function xcodecSetControlsDisabled(disabled, modal = 'manage') { + if (!xcodecUi) return; + if (modal === 'manage') { + xcodecUi.processPanelBtn.disabled = disabled; + if (xcodecUi.processAllPanelsBtn) xcodecUi.processAllPanelsBtn.disabled = disabled; + xcodecUi.panelServerUrlInput.disabled = disabled; + xcodecUi.panelApiTokenInput.disabled = disabled; + xcodecUi.savePanelBtn.disabled = disabled; + xcodecUi.clearFormBtn.disabled = disabled; + xcodecUi.importPresetBtn.disabled = disabled; + + const processBtnIcon = xcodecUi.processPanelBtn.querySelector('i'); + if (processBtnIcon) processBtnIcon.className = disabled ? 'fas fa-spinner fa-spin me-1' : 'fas fa-cogs me-1'; + + const processAllBtnIcon = xcodecUi.processAllPanelsBtn ? xcodecUi.processAllPanelsBtn.querySelector('i') : null; + if (processAllBtnIcon) processAllBtnIcon.className = disabled ? 'fas fa-spinner fa-spin me-1' : 'fas fa-tasks me-1'; + + } else if (modal === 'preview') { + xcodecUi.addSelectedBtn.disabled = disabled; + xcodecUi.addAllValidBtn.disabled = disabled; + } +} + +function xcodecCleanUrl(url) { + try { + const urlObj = new URL(url); + urlObj.searchParams.delete('decryption_key'); + return urlObj.toString(); + } catch (e) { + return url.replace(/[?&]decryption_key=[^&]+/gi, ''); + } +} + +function getXCodecProxiedApiEndpoint(targetServerBaseUrl, apiPath) { + let base = targetServerBaseUrl.trim(); + if (!base.endsWith('/')) base += '/'; + let path = apiPath.trim(); + if (path.startsWith('/')) path = path.substring(1); + const proxy = userSettings.xcodecCorsProxyUrl ? userSettings.xcodecCorsProxyUrl.trim() : ''; + if (proxy) { + return proxy + base + path; + } + return base + path; +} + +async function fetchXCodecWithTimeout(resource, options = {}, timeout) { + const effectiveTimeout = timeout || userSettings.xcodecDefaultTimeout || 8000; + const controller = new AbortController(); + const id = setTimeout(() => controller.abort(), effectiveTimeout); + const response = await fetch(resource, { ...options, signal: controller.signal }); + clearTimeout(id); + return response; +} + +async function getXCodecStreamStats(targetServerUrl, apiToken) { + const apiUrl = getXCodecProxiedApiEndpoint(targetServerUrl, 'api/stream/stats'); + xcodecUpdateProgress(); + const headers = {}; + if (apiToken) headers['Authorization'] = `Token ${apiToken}`; + try { + const response = await fetchXCodecWithTimeout(apiUrl, { headers }); + if (!response.ok) throw new Error(`HTTP ${response.status}: ${response.statusText}`); + const stats = await response.json(); + if (!Array.isArray(stats)) throw new Error("La respuesta de estadísticas no es un array."); + return stats; + } catch (error) { + throw error; + } +} + +async function processXCodecStreamConfig(targetServerUrl, apiToken, streamId, streamNameFallback, serverHostForGroupTitle) { + const apiUrl = getXCodecProxiedApiEndpoint(targetServerUrl, `api/stream/${streamId}/config`); + const headers = {}; + if (apiToken) headers['Authorization'] = `Token ${apiToken}`; + const DEFAULT_KID_FOR_JSON_SINGLE_KEY = "00000000000000000000000000000000"; + try { + const response = await fetchXCodecWithTimeout(apiUrl, { headers }); + if (!response.ok) throw new Error(`HTTP ${response.status} para config ${streamId}`); + const config = await response.json(); + const streamName = config?.name || streamNameFallback || `Stream ${streamId}`; + + if (!config?.input_urls?.length) { + return { error: `Stream ${streamId} (${streamName}) sin input_urls.` }; + } + + let kodiProps = { + 'inputstreamaddon': 'inputstream.adaptive', + 'inputstream.adaptive.manifest_type': 'mpd' + }; + let vlcOpts = {}; + + const urlWithKey = config.input_urls.find(u => /[?&]decryption_key=([^&]+)/i.test(u)); + if (urlWithKey) { + const keyMatch = urlWithKey.match(/[?&]decryption_key=([^&]+)/i); + if (keyMatch && keyMatch[1]) { + const allKeyEntriesString = keyMatch[1]; + const keyEntriesArray = allKeyEntriesString.split(','); + let licenseKeyStringForKodi = ''; + + if (keyEntriesArray.length === 1) { + const singleEntry = keyEntriesArray[0].trim(); + if (singleEntry.indexOf(':') === -1 && singleEntry.length === 32 && /^[0-9a-fA-F]{32}$/.test(singleEntry)) { + licenseKeyStringForKodi = singleEntry; + } + } + if (!licenseKeyStringForKodi) { + const licenseKeysObject = {}; + let foundValidKeysForJson = false; + for (const entryStr of keyEntriesArray) { + const trimmedEntry = entryStr.trim(); + if (!trimmedEntry) continue; + const parts = trimmedEntry.split(':'); + if (parts.length === 2 && parts[0].trim() && parts[1].trim()) { + const kid = parts[0].trim(); + const key = parts[1].trim(); + if (kid.length === 32 && key.length === 32 && /^[0-9a-fA-F]+$/.test(kid) && /^[0-9a-fA-F]+$/.test(key)) { + licenseKeysObject[kid] = key; + foundValidKeysForJson = true; + } + } else if (parts.length === 1 && parts[0].trim()) { + const potentialKey = parts[0].trim(); + if (potentialKey.length === 32 && /^[0-9a-fA-F]{32}$/.test(potentialKey)) { + licenseKeysObject[DEFAULT_KID_FOR_JSON_SINGLE_KEY] = potentialKey; + foundValidKeysForJson = true; + } + } + } + if (foundValidKeysForJson) { + licenseKeyStringForKodi = JSON.stringify(licenseKeysObject); + } + } + if (licenseKeyStringForKodi) { + kodiProps['inputstream.adaptive.license_type'] = 'clearkey'; + kodiProps['inputstream.adaptive.license_key'] = licenseKeyStringForKodi; + } + } + } + + if (config.headers) { + try { + const formattedHeaders = config.headers.split('&').map(p => { + const eq = p.indexOf('='); + return eq > -1 ? `${p.substring(0, eq).trim()}=${encodeURIComponent(p.substring(eq + 1).trim())}` : p.trim(); + }).join('&'); + kodiProps['inputstream.adaptive.stream_headers'] = formattedHeaders; + } catch (e) { + } + } + + return { + name: streamName, + url: xcodecCleanUrl(config.input_urls[0]), + 'tvg-id': config.epg_id || `xcodec.${streamId}`, + 'tvg-logo': config.logo || '', + 'group-title': config.category_name || serverHostForGroupTitle || 'XCodec Streams', + attributes: { duration: -1 }, + kodiProps: kodiProps, + vlcOptions: vlcOpts, + sourceOrigin: `XCodec: ${serverHostForGroupTitle}` + }; + + } catch (error) { + return { error: `Fallo config Stream ${streamId} de ${targetServerUrl}: ${error.message}` }; + } +} + +async function processSingleXCodecPanelLogic(panelData, directAdd, isPartOfBatchOperation) { + let serverHostForGroupTitle; + try { + const urlObj = new URL(panelData.serverUrl); + serverHostForGroupTitle = panelData.name || urlObj.hostname; + } catch(e) { + serverHostForGroupTitle = panelData.name || panelData.serverUrl; + } + const serverBaseUrl = panelData.serverUrl.endsWith('/') ? panelData.serverUrl : panelData.serverUrl + '/'; + + if (!isPartOfBatchOperation) { + xcodecUpdateStatus(`Iniciando panel: ${escapeHtml(panelData.name || panelData.serverUrl)}...`, 'info', 'manage'); + } + + xcodecResetProgress(1); + let streamStats; + try { + streamStats = await getXCodecStreamStats(serverBaseUrl, panelData.apiToken); + } catch (error) { + const errorMsg = `Error obteniendo estadísticas de ${serverHostForGroupTitle}: ${error.message}`; + if (!isPartOfBatchOperation) { + xcodecUpdateStatus(errorMsg, 'danger', 'manage'); + xcodecSetControlsDisabled(false, 'manage'); + xcodecResetProgress(); + } + return { success: false, name: serverHostForGroupTitle, error: errorMsg, added: 0, errors: 1 }; + } + + if (!streamStats) { + if (!isPartOfBatchOperation) { + xcodecUpdateStatus(`No se obtuvieron estadísticas de ${serverHostForGroupTitle}.`, 'warning', 'manage'); + xcodecSetControlsDisabled(false, 'manage'); + xcodecResetProgress(); + } + return { success: false, name: serverHostForGroupTitle, error: "No stats returned", added: 0, errors: 1 }; + } + + if (streamStats.length === 0) { + if (!isPartOfBatchOperation) { + xcodecUpdateStatus(`No se encontraron streams activos en ${serverHostForGroupTitle}.`, 'info', 'manage'); + xcodecSetControlsDisabled(false, 'manage'); + xcodecResetProgress(); + } + return { success: true, name: serverHostForGroupTitle, added: 0, errors: 0, message: "No active streams" }; + } + + if (directAdd && userSettings.xcodecIgnorePanelsOverStreams > 0 && streamStats.length > userSettings.xcodecIgnorePanelsOverStreams) { + const ignoreMsg = `Panel ${serverHostForGroupTitle} ignorado: ${streamStats.length} streams (límite ${userSettings.xcodecIgnorePanelsOverStreams}).`; + if (!isPartOfBatchOperation) { + xcodecUpdateStatus(ignoreMsg, 'warning', 'manage'); + xcodecSetControlsDisabled(false, 'manage'); + xcodecResetProgress(); + } + return { success: true, name: serverHostForGroupTitle, added: 0, errors: 0, message: ignoreMsg }; + } + + xcodecTotalApiCallsExpected = 1 + streamStats.length; + if (!isPartOfBatchOperation) { + xcodecUi.progressBar.textContent = Math.round((1 / xcodecTotalApiCallsExpected) * 100) + '%'; + } + + if (!isPartOfBatchOperation) { + xcodecUpdateStatus(`Procesando ${streamStats.length} streams de ${serverHostForGroupTitle}...`, 'info', 'manage'); + } + if (streamStats.length > 0) xcodecUi.progressContainer.style.display = 'block'; + + const batchSize = userSettings.xcodecDefaultBatchSize || 15; + let processedStreams = []; + let streamsWithErrors = 0; + + for (let j = 0; j < streamStats.length; j += batchSize) { + const batch = streamStats.slice(j, j + batchSize); + const configPromises = batch.map(s => + processXCodecStreamConfig(serverBaseUrl, panelData.apiToken, s.id, s.name, serverHostForGroupTitle) + .finally(() => xcodecUpdateProgress()) + ); + const batchResults = await Promise.allSettled(configPromises); + + batchResults.forEach(r => { + if (r.status === 'fulfilled' && r.value && !r.value.error) { + processedStreams.push(r.value); + } else { + streamsWithErrors++; + } + }); + } + + currentXCodecPanelDataForPreview = panelData; + xcodecProcessedStreamsForPreview = processedStreams; + + if (directAdd) { + if (processedStreams.length > 0) { + const m3uString = streamsToM3U(processedStreams, serverHostForGroupTitle); + const sourceName = `XCodec: ${serverHostForGroupTitle}`; + if (typeof removeChannelsBySourceOrigin === 'function') removeChannelsBySourceOrigin(sourceName); + appendM3UContent(m3uString, sourceName); + if (!isPartOfBatchOperation) { + showNotification(`${processedStreams.length} canales de "${escapeHtml(serverHostForGroupTitle)}" añadidos/actualizados.`, 'success'); + } + } + + if (!isPartOfBatchOperation) { + xcodecUpdateStatus(`Proceso completado. Streams OK: ${processedStreams.length}. Errores: ${streamsWithErrors}.`, 'success', 'manage'); + const manageModalInstance = bootstrap.Modal.getInstance(xcodecUi.manageModal); + if (manageModalInstance) manageModalInstance.hide(); + } + + } else { + if (!isPartOfBatchOperation) { + openXCodecPreviewModal(serverHostForGroupTitle, processedStreams.length, streamsWithErrors); + } + } + + if (!isPartOfBatchOperation) { + xcodecSetControlsDisabled(false, 'manage'); + } + return { success: true, name: serverHostForGroupTitle, added: processedStreams.length, errors: streamsWithErrors }; +} + +async function processPanelFromForm(directAdd = false) { + if (!xcodecUi) return; + const panelData = { + id: xcodecUi.editingPanelIdInput.value ? parseInt(xcodecUi.editingPanelIdInput.value, 10) : null, + name: xcodecUi.panelNameInput.value.trim(), + serverUrl: xcodecUi.panelServerUrlInput.value.trim(), + apiToken: xcodecUi.panelApiTokenInput.value.trim() + }; + + if (!panelData.serverUrl) { + xcodecUpdateStatus('Por favor, introduce la URL del servidor X-UI/XC.', 'warning', 'manage'); + return; + } + try { + new URL(panelData.serverUrl); + } catch(e){ + xcodecUpdateStatus('La URL del servidor no es válida.', 'warning', 'manage'); + return; + } + if (!panelData.name) panelData.name = new URL(panelData.serverUrl).hostname; + + xcodecSetControlsDisabled(true, 'manage'); + try { + await processSingleXCodecPanelLogic(panelData, directAdd, false); + } catch (error) { + xcodecUpdateStatus(`Error procesando el panel ${escapeHtml(panelData.name)}: ${error.message}`, 'danger', 'manage'); + xcodecSetControlsDisabled(false, 'manage'); + xcodecResetProgress(); + } +} + +async function processAllSavedXCodecPanels() { + if (!xcodecUi) return; + + const userConfirmed = await showConfirmationModal( + "Esto procesará TODOS los paneles XCodec guardados y añadirá sus streams directamente a la lista M3U actual. Esta operación puede tardar y añadir muchos canales. ¿Continuar?", + "Confirmar Procesamiento Masivo de Paneles", + "Sí, Procesar Todos", + "btn-primary" + ); + + if (!userConfirmed) { + xcodecUpdateStatus('Procesamiento masivo cancelado por el usuario.', 'info', 'manage'); + return; + } + + xcodecSetControlsDisabled(true, 'manage'); + xcodecUpdateStatus('Iniciando procesamiento de todos los paneles guardados...', 'info', 'manage'); + + let savedPanels; + try { + savedPanels = await getAllXCodecPanelsFromDB(); + } catch (error) { + xcodecUpdateStatus(`Error al obtener paneles guardados: ${error.message}`, 'danger', 'manage'); + xcodecSetControlsDisabled(false, 'manage'); + return; + } + + if (!savedPanels || savedPanels.length === 0) { + xcodecUpdateStatus('No hay paneles guardados para procesar.', 'info', 'manage'); + xcodecSetControlsDisabled(false, 'manage'); + return; + } + + let totalPanels = savedPanels.length; + let panelsProcessedCount = 0; + let totalStreamsAdded = 0; + let totalErrorsAcrossPanels = 0; + let panelsWithErrorsCount = 0; + + xcodecUi.progressContainer.style.display = 'block'; + + for (const panel of savedPanels) { + panelsProcessedCount++; + const panelDisplayName = panel.name || panel.serverUrl; + + const overallPercentage = (panelsProcessedCount / totalPanels) * 100; + xcodecUi.progressBar.style.width = overallPercentage + '%'; + xcodecUi.progressBar.textContent = `Panel ${panelsProcessedCount}/${totalPanels}`; + + xcodecUpdateStatus(`Procesando panel ${panelsProcessedCount} de ${totalPanels}: "${escapeHtml(panelDisplayName)}"`, 'info', 'manage'); + + try { + const result = await processSingleXCodecPanelLogic(panel, true, true); + if (result) { + totalStreamsAdded += result.added || 0; + if (!result.success || (result.errors || 0) > 0) { + panelsWithErrorsCount++; + totalErrorsAcrossPanels += result.errors || 0; + } + } + } catch (error) { + xcodecUpdateStatus(`Error crítico procesando panel "${escapeHtml(panelDisplayName)}": ${error.message}. Saltando al siguiente.`, 'warning', 'manage'); + panelsWithErrorsCount++; + totalErrorsAcrossPanels++; + } + } + + xcodecUi.progressBar.style.width = '100%'; + xcodecUi.progressBar.textContent = `Completado ${totalPanels}/${totalPanels}`; + setTimeout(() => { + if (xcodecUi.progressContainer) xcodecUi.progressContainer.style.display = 'none'; + xcodecUi.progressBar.style.width = '0%'; + xcodecUi.progressBar.textContent = '0%'; + }, 3000); + + const summaryMessage = `Procesamiento masivo completado. ${panelsProcessedCount} paneles procesados. Total streams añadidos: ${totalStreamsAdded}. Paneles con errores: ${panelsWithErrorsCount}. Total errores individuales: ${totalErrorsAcrossPanels}.`; + xcodecUpdateStatus(summaryMessage, 'success', 'manage'); + showNotification(summaryMessage, 'success', 10000); + + xcodecSetControlsDisabled(false, 'manage'); +} + + +function streamsToM3U(streamsArray, panelName) { + let m3u = '#EXTM3U\n'; + m3u += `# ----- Inicio Panel: ${panelName} -----\n\n`; + streamsArray.forEach(ch => { + m3u += `#EXTINF:-1 tvg-id="${ch['tvg-id']}" tvg-logo="${ch['tvg-logo']}" group-title="${ch['group-title']}",${ch.name}\n`; + if (ch.kodiProps) { + for (const key in ch.kodiProps) { + m3u += `#KODIPROP:${key}=${ch.kodiProps[key]}\n`; + } + } + m3u += `${ch.url}\n\n`; + }); + m3u += `# ----- Fin Panel: ${panelName} -----\n\n`; + return m3u; +} + +function openXCodecPreviewModal(panelName, validCount, errorCount) { + xcodecUi.previewModalLabel.textContent = `Previsualización Panel: ${escapeHtml(panelName)}`; + xcodecUpdateStatus(`Streams válidos: ${validCount}. Con errores: ${errorCount}.`, 'info', 'preview'); + + const groups = {}; + xcodecProcessedStreamsForPreview.forEach(stream => { + const group = stream['group-title'] || 'Sin Grupo'; + if (!groups[group]) groups[group] = []; + groups[group].push(stream); + }); + + xcodecUi.previewGroupList.innerHTML = ''; + const sortedGroupNames = Object.keys(groups).sort((a, b) => a.localeCompare(b)); + + sortedGroupNames.forEach(groupName => { + const groupItem = document.createElement('li'); + groupItem.className = 'list-group-item list-group-item-action d-flex justify-content-between align-items-center'; + groupItem.dataset.groupName = groupName; + groupItem.style.cursor = 'pointer'; + groupItem.innerHTML = ` +
    + + +
    + ${groups[groupName].length} + `; + xcodecUi.previewGroupList.appendChild(groupItem); + }); + + xcodecUi.previewChannelList.innerHTML = '
  • Selecciona un grupo para ver los canales.
  • '; + xcodecUi.addSelectedBtn.disabled = false; + xcodecUi.addAllValidBtn.disabled = validCount === 0; + xcodecUi.previewSelectAllChannelsInGroupBtn.disabled = true; + + + const previewModalInstance = bootstrap.Modal.getOrCreateInstance(xcodecUi.previewModal); + previewModalInstance.show(); + const manageModalInstance = bootstrap.Modal.getInstance(xcodecUi.manageModal); + if (manageModalInstance) manageModalInstance.hide(); +} + +function renderXCodecPreviewChannels(groupName) { + xcodecUi.previewChannelList.innerHTML = ''; + const streamsInGroup = xcodecProcessedStreamsForPreview.filter(s => (s['group-title'] || 'Sin Grupo') === groupName); + if (streamsInGroup.length === 0) { + xcodecUi.previewChannelList.innerHTML = '
  • No hay canales en este grupo.
  • '; + return; + } + streamsInGroup.forEach(stream => { + const channelItem = document.createElement('li'); + channelItem.className = 'list-group-item'; + channelItem.innerHTML = ` +
    + + +
    + `; + xcodecUi.previewChannelList.appendChild(channelItem); + }); +} + +function toggleAllGroupsInPreview() { + const firstCheckbox = xcodecUi.previewGroupList.querySelector('.xcodec-group-checkbox'); + if (!firstCheckbox) return; + const currentlyChecked = firstCheckbox.checked; + xcodecUi.previewGroupList.querySelectorAll('.xcodec-group-checkbox').forEach(cb => cb.checked = !currentlyChecked); + + xcodecUi.previewChannelList.querySelectorAll('.xcodec-channel-checkbox').forEach(cb => cb.checked = !currentlyChecked); +} + +function toggleAllChannelsInCurrentPreviewGroup() { + const activeGroupItem = xcodecUi.previewGroupList.querySelector('.list-group-item.active'); + if (!activeGroupItem) return; + const groupName = activeGroupItem.dataset.groupName; + + const firstChannelCheckboxInGroup = xcodecUi.previewChannelList.querySelector(`.xcodec-channel-checkbox[data-group="${escapeHtml(groupName)}"]`); + if (!firstChannelCheckboxInGroup) return; + const currentlyChecked = firstChannelCheckboxInGroup.checked; + + xcodecUi.previewChannelList.querySelectorAll(`.xcodec-channel-checkbox[data-group="${escapeHtml(groupName)}"]`).forEach(cb => { + cb.checked = !currentlyChecked; + }); +} + + +function addSelectedXCodecStreamsToM3U() { + const selectedStreams = []; + const selectedGroupCheckboxes = xcodecUi.previewGroupList.querySelectorAll('.xcodec-group-checkbox:checked'); + const selectedGroups = Array.from(selectedGroupCheckboxes).map(cb => cb.value); + + xcodecUi.previewChannelList.querySelectorAll('.xcodec-channel-checkbox:checked').forEach(cb => { + const streamUrl = cb.value; + const streamGroup = cb.dataset.group; + if (selectedGroups.includes(streamGroup)) { + const streamData = xcodecProcessedStreamsForPreview.find(s => s.url === streamUrl && (s['group-title'] || 'Sin Grupo') === streamGroup); + if (streamData) selectedStreams.push(streamData); + } + }); + + if (selectedStreams.length > 0) { + const panelName = currentXCodecPanelDataForPreview.name || new URL(currentXCodecPanelDataForPreview.serverUrl).hostname; + const m3uString = streamsToM3U(selectedStreams, panelName); + const sourceName = `XCodec: ${panelName}`; + if (typeof removeChannelsBySourceOrigin === 'function') removeChannelsBySourceOrigin(sourceName); + appendM3UContent(m3uString, sourceName); + showNotification(`${selectedStreams.length} canales de "${escapeHtml(panelName)}" seleccionados y añadidos.`, 'success'); + } else { + showNotification('No se seleccionaron canales para añadir.', 'info'); + } + const previewModalInstance = bootstrap.Modal.getInstance(xcodecUi.previewModal); + if (previewModalInstance) previewModalInstance.hide(); +} + +function addAllValidXCodecStreamsToM3U() { + if (xcodecProcessedStreamsForPreview.length > 0) { + const panelName = currentXCodecPanelDataForPreview.name || new URL(currentXCodecPanelDataForPreview.serverUrl).hostname; + const m3uString = streamsToM3U(xcodecProcessedStreamsForPreview, panelName); + const sourceName = `XCodec: ${panelName}`; + if (typeof removeChannelsBySourceOrigin === 'function') removeChannelsBySourceOrigin(sourceName); + appendM3UContent(m3uString, sourceName); + showNotification(`${xcodecProcessedStreamsForPreview.length} canales válidos de "${escapeHtml(panelName)}" añadidos.`, 'success'); + } else { + showNotification('No hay canales válidos para añadir.', 'info'); + } + const previewModalInstance = bootstrap.Modal.getInstance(xcodecUi.previewModal); + if (previewModalInstance) previewModalInstance.hide(); +} + +async function loadSavedXCodecPanels() { + if (typeof showLoading === 'function') showLoading(true, 'Cargando paneles XCodec...'); + try { + const panels = typeof getAllXCodecPanelsFromDB === 'function' ? await getAllXCodecPanelsFromDB() : []; + xcodecUi.savedPanelsList.innerHTML = ''; + if (!panels || panels.length === 0) { + xcodecUi.savedPanelsList.innerHTML = '
  • No hay paneles guardados.
  • '; + } else { + panels.sort((a, b) => (b.timestamp || 0) - (a.timestamp || 0)); + panels.forEach(panel => { + const panelDisplayName = panel.name || panel.serverUrl; + const item = document.createElement('li'); + item.className = 'list-group-item d-flex justify-content-between align-items-center'; + item.innerHTML = ` +
    + ${escapeHtml(panelDisplayName)} + ${escapeHtml(panel.serverUrl)} +
    +
    + + + +
    + `; + xcodecUi.savedPanelsList.appendChild(item); + }); + } + } catch (error) { + showNotification(`Error cargando paneles XCodec: ${error.message}`, 'error'); + xcodecUi.savedPanelsList.innerHTML = '
  • Error al cargar paneles.
  • '; + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} + +async function handleSaveXCodecPanel() { + const panelData = { + id: xcodecUi.editingPanelIdInput.value ? parseInt(xcodecUi.editingPanelIdInput.value, 10) : null, + name: xcodecUi.panelNameInput.value.trim(), + serverUrl: xcodecUi.panelServerUrlInput.value.trim(), + apiToken: xcodecUi.panelApiTokenInput.value.trim() + }; + + if (!panelData.serverUrl) { + showNotification('La URL del Servidor es obligatoria.', 'warning'); + return; + } + try { + new URL(panelData.serverUrl); + } catch(e){ + showNotification('La URL del servidor no es válida.', 'warning'); + return; + } + if (!panelData.name) panelData.name = new URL(panelData.serverUrl).hostname; + + + if (typeof showLoading === 'function') showLoading(true, `Guardando panel XCodec: ${escapeHtml(panelData.name)}...`); + try { + await saveXCodecPanelToDB(panelData); + showNotification(`Panel XCodec "${escapeHtml(panelData.name)}" guardado.`, 'success'); + loadSavedXCodecPanels(); + clearXCodecPanelForm(); + } catch (error) { + showNotification(`Error al guardar panel: ${error.message}`, 'error'); + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} + +function clearXCodecPanelForm() { + xcodecUi.editingPanelIdInput.value = ''; + xcodecUi.panelNameInput.value = ''; + xcodecUi.panelServerUrlInput.value = ''; + xcodecUi.panelApiTokenInput.value = ''; + xcodecUi.panelNameInput.focus(); +} + +async function loadXCodecPanelToForm(id) { + if (typeof showLoading === 'function') showLoading(true, "Cargando datos del panel..."); + try { + const panel = await getXCodecPanelFromDB(id); + if (panel) { + xcodecUi.editingPanelIdInput.value = panel.id; + xcodecUi.panelNameInput.value = panel.name || ''; + xcodecUi.panelServerUrlInput.value = panel.serverUrl || ''; + xcodecUi.panelApiTokenInput.value = panel.apiToken || ''; + showNotification(`Datos del panel "${escapeHtml(panel.name || panel.serverUrl)}" cargados.`, 'info'); + } else { + showNotification('Panel no encontrado.', 'error'); + } + } catch (error) { + showNotification(`Error al cargar panel: ${error.message}`, 'error'); + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} + +async function handleDeleteXCodecPanel(id) { + const panelToDelete = await getXCodecPanelFromDB(id); + const panelName = panelToDelete ? (panelToDelete.name || panelToDelete.serverUrl) : 'este panel'; + + if (!confirm(`¿Seguro que quieres eliminar el panel XCodec "${escapeHtml(panelName)}"?`)) return; + if (typeof showLoading === 'function') showLoading(true, `Eliminando panel "${escapeHtml(panelName)}"...`); + try { + await deleteXCodecPanelFromDB(id); + showNotification(`Panel XCodec "${escapeHtml(panelName)}" eliminado.`, 'success'); + loadSavedXCodecPanels(); + if (xcodecUi.editingPanelIdInput.value === String(id)) { + clearXCodecPanelForm(); + } + } catch (error) { + showNotification(`Error al eliminar panel: ${error.message}`, 'error'); + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} + +async function importPresetXCodecPanels() { + if (!confirm(`¿Quieres importar ${PRESET_XCODEC_PANELS.length} paneles predefinidos a tu lista? Esto no sobrescribirá los existentes con la misma URL.`)) return; + if (typeof showLoading === 'function') showLoading(true, "Importando paneles predefinidos..."); + let importedCount = 0; + let skippedCount = 0; + try { + const existingPanels = await getAllXCodecPanelsFromDB(); + const existingUrls = new Set(existingPanels.map(p => p.serverUrl)); + + for (const preset of PRESET_XCODEC_PANELS) { + if (!existingUrls.has(preset.serverUrl)) { + await saveXCodecPanelToDB(preset); + importedCount++; + } else { + skippedCount++; + } + } + showNotification(`Importación completada: ${importedCount} paneles añadidos, ${skippedCount} omitidos (ya existían).`, 'success'); + loadSavedXCodecPanels(); + } catch (error) { + showNotification(`Error importando paneles: ${error.message}`, 'error'); + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} \ No newline at end of file diff --git a/xtream_handler.js b/xtream_handler.js new file mode 100644 index 0000000..6682b92 --- /dev/null +++ b/xtream_handler.js @@ -0,0 +1,569 @@ +const XTREAM_USER_AGENT = 'VLC/3.0.20 (Linux; x86_64)'; +let currentXtreamServerInfo = null; +let xtreamData = { live: [], vod: [], series: [] }; +let xtreamGroupSelectionResolver = null; + +function isXtreamUrl(url) { + try { + const parsedUrl = new URL(url); + return parsedUrl.pathname.endsWith('/get.php') && + parsedUrl.searchParams.has('username') && + parsedUrl.searchParams.has('password'); + } catch (e) { + return false; + } +} + +function handleXtreamUrl(url) { + try { + const parsedUrl = new URL(url); + const host = `${parsedUrl.protocol}//${parsedUrl.hostname}${parsedUrl.port ? ':' + parsedUrl.port : ''}`; + const username = parsedUrl.searchParams.get('username'); + const password = parsedUrl.searchParams.get('password'); + let outputType = 'm3u_plus'; + if (parsedUrl.searchParams.has('type')) { + const typeParam = parsedUrl.searchParams.get('type'); + if (typeParam === 'm3u_plus') outputType = 'm3u_plus'; + } + if (parsedUrl.searchParams.has('output')) { + const outputParam = parsedUrl.searchParams.get('output'); + if (outputParam === 'ts') outputType = 'ts'; + else if (outputParam === 'hls' || outputParam === 'm3u8') outputType = 'hls'; + } + + $('#xtreamHostInput').val(host); + $('#xtreamUsernameInput').val(username); + $('#xtreamPasswordInput').val(password); + $('#xtreamOutputTypeSelect').val(outputType); + $('#xtreamServerNameInput').val(''); + $('#xtreamFetchEpgCheck').prop('checked', true); + + showXtreamConnectionModal(); + if (typeof showNotification === 'function') showNotification("Datos de URL Xtream precargados en el modal.", "info"); + + } catch (e) { + if (typeof showNotification === 'function') showNotification("URL Xtream inválida.", "error"); + console.error("Error parsing Xtream URL:", e); + } +} + +async function showXtreamConnectionModal() { + if (typeof dbPromise === 'undefined' || !dbPromise) { + if (typeof showLoading === 'function') showLoading(true, 'Iniciando base de datos local...'); + try { if (typeof openDB === 'function') await openDB(); } catch (error) { if (typeof showNotification === 'function') showNotification(`Error DB: ${error.message}`, 'error'); if (typeof showLoading === 'function') showLoading(false); return; } + finally { if (typeof showLoading === 'function') showLoading(false); } + } + + $('#xtreamConnectionModal').modal('show'); + loadSavedXtreamServers(); +} + +async function loadSavedXtreamServers() { + if (typeof showLoading === 'function') showLoading(true, 'Cargando servidores Xtream guardados...'); + try { + const servers = typeof getAllXtreamServersFromDB === 'function' ? await getAllXtreamServersFromDB() : []; + const $list = $('#savedXtreamServersList').empty(); + if (!servers || servers.length === 0) { + $list.append('
  • No hay servidores guardados.
  • '); + } else { + servers.sort((a,b) => (b.timestamp || 0) - (a.timestamp || 0)); + servers.forEach(server => { + const serverDisplayName = server.name || server.host; + $list.append(` +
  • +
    + ${escapeHtml(serverDisplayName)} + ${escapeHtml(server.host)} +
    + +
  • `); + }); + } + } catch (error) { + if (typeof showNotification === 'function') showNotification(`Error cargando servidores Xtream: ${error.message}`, 'error'); + $('#savedXtreamServersList').empty().append('
  • Error al cargar servidores.
  • '); + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} + +async function fetchXtreamData(action = null, params = {}, currentServer = null) { + const serverToUse = currentServer || currentXtreamServerInfo; + if (!serverToUse || !serverToUse.host || !serverToUse.username || !serverToUse.password) { + throw new Error("Datos del servidor Xtream no configurados."); + } + + let url = `${serverToUse.host.replace(/\/$/, '')}/player_api.php?username=${encodeURIComponent(serverToUse.username)}&password=${encodeURIComponent(serverToUse.password)}`; + if (action) { + url += `&action=${action}`; + } + if (params) { + for (const key in params) { + url += `&${key}=${encodeURIComponent(params[key])}`; + } + } + const response = await fetch(url, { headers: { 'User-Agent': XTREAM_USER_AGENT }}); + if (!response.ok) { + throw new Error(`Error API Xtream (${action || 'base'}): ${response.status}`); + } + const data = await response.json(); + if (data && data.user_info && data.user_info.auth === 0) { + throw new Error(`Autenticación fallida con el servidor Xtream: ${data.user_info.status || 'Error desconocido'}`); + } + return data; +} + +function buildM3UFromString(items) { + let m3uString = "#EXTM3U\n"; + items.forEach(ch => { + let attributesString = `tvg-id="${ch['tvg-id'] || ''}" tvg-logo="${ch['tvg-logo'] || ''}" group-title="${ch['group-title'] || ''}"`; + if (ch.attributes) { + for (const key in ch.attributes) { + attributesString += ` ${key}="${ch.attributes[key]}"`; + } + } + m3uString += `#EXTINF:-1 ${attributesString},${ch.name || ''}\n${ch.url || ''}\n`; + }); + return m3uString; +} + +function showXtreamGroupSelectionModal(categories) { + return new Promise((resolve) => { + xtreamGroupSelectionResolver = resolve; + + const { live, vod, series } = categories; + const liveCol = $('#xtreamLiveGroupsCol').hide(); + const vodCol = $('#xtreamVodGroupsCol').hide(); + const seriesCol = $('#xtreamSeriesGroupsCol').hide(); + + const setupGroup = (col, listEl, btnSelect, btnDeselect, cats, type) => { + listEl.empty(); + if (cats && cats.length > 0) { + cats.forEach(cat => listEl.append(`
  • `)); + btnSelect.off('click').on('click', () => listEl.find('input[type="checkbox"]').prop('checked', true)); + btnDeselect.off('click').on('click', () => listEl.find('input[type="checkbox"]').prop('checked', false)); + col.show(); + } else { + listEl.append('
  • No disponible
  • '); + if(cats) col.show(); + } + }; + + setupGroup(liveCol, $('#xtreamLiveGroupList'), $('#xtreamSelectAllLive'), $('#xtreamDeselectAllLive'), live, 'live'); + setupGroup(vodCol, $('#xtreamVodGroupList'), $('#xtreamSelectAllVod'), $('#xtreamDeselectAllVod'), vod, 'vod'); + setupGroup(seriesCol, $('#xtreamSeriesGroupList'), $('#xtreamSelectAllSeries'), $('#xtreamDeselectAllSeries'), series, 'series'); + + const groupSelectionModal = new bootstrap.Modal(document.getElementById('xtreamGroupSelectionModal')); + groupSelectionModal.show(); + }); +} + +function handleXtreamGroupSelection() { + const selectedGroups = { live: [], vod: [], series: [] }; + + $('#xtreamLiveGroupList input:checked').each(function() { selectedGroups.live.push($(this).val()); }); + $('#xtreamVodGroupList input:checked').each(function() { selectedGroups.vod.push($(this).val()); }); + $('#xtreamSeriesGroupList input:checked').each(function() { selectedGroups.series.push($(this).val()); }); + + if (xtreamGroupSelectionResolver) { + xtreamGroupSelectionResolver(selectedGroups); + xtreamGroupSelectionResolver = null; + } + + const groupSelectionModal = bootstrap.Modal.getInstance(document.getElementById('xtreamGroupSelectionModal')); + if (groupSelectionModal) { + groupSelectionModal.hide(); + } +} + +async function handleConnectXtreamServer() { + const host = $('#xtreamHostInput').val().trim(); + const username = $('#xtreamUsernameInput').val().trim(); + const password = $('#xtreamPasswordInput').val(); + const outputType = $('#xtreamOutputTypeSelect').val(); + const fetchEpgFlag = $('#xtreamFetchEpgCheck').is(':checked'); + const forceGroupSelection = $('#xtreamForceGroupSelectionCheck').is(':checked'); + const loadLive = $('#xtreamLoadLive').is(':checked'); + const loadVod = $('#xtreamLoadVod').is(':checked'); + const loadSeries = $('#xtreamLoadSeries').is(':checked'); + const serverName = $('#xtreamServerNameInput').val().trim() || host; + + if (!host || !username || !password) { + showNotification('Host, usuario y contraseña son obligatorios.', 'warning'); + return; + } + if (!loadLive && !loadVod && !loadSeries) { + showNotification('Debes seleccionar al menos un tipo de contenido para cargar.', 'warning'); + return; + } + + currentXtreamServerInfo = { host, username, password, outputType, name: serverName, fetchEpg: fetchEpgFlag }; + + showLoading(true, `Conectando a Xtream: ${escapeHtml(serverName)}...`); + + try { + const playerApiData = await fetchXtreamData(); + displayXtreamInfoBar(playerApiData); + + const existingServer = (await getAllXtreamServersFromDB()).find(s => s.host === host && s.username === username); + let selectedGroupIds; + + if (existingServer && existingServer.id) { + currentXtreamServerInfo.id = existingServer.id; + } + + if (existingServer && existingServer.selectedGroups && !forceGroupSelection) { + selectedGroupIds = existingServer.selectedGroups; + showNotification('Usando selección de grupos guardada para este servidor.', 'info'); + } else { + showLoading(true, 'Obteniendo categorías...'); + let categoryPromises = []; + if (loadLive) categoryPromises.push(fetchXtreamData('get_live_categories').catch(e => { console.error("Error fetching live categories:", e); return null; })); + else categoryPromises.push(Promise.resolve(null)); + + if (loadVod) categoryPromises.push(fetchXtreamData('get_vod_categories').catch(e => { console.error("Error fetching vod categories:", e); return null; })); + else categoryPromises.push(Promise.resolve(null)); + + if (loadSeries) categoryPromises.push(fetchXtreamData('get_series_categories').catch(e => { console.error("Error fetching series categories:", e); return null; })); + else categoryPromises.push(Promise.resolve(null)); + + const [liveCategories, vodCategories, seriesCategories] = await Promise.all(categoryPromises); + + $('#xtreamConnectionModal').modal('hide'); + showLoading(false); + selectedGroupIds = await showXtreamGroupSelectionModal({ live: liveCategories, vod: vodCategories, series: seriesCategories }); + currentXtreamServerInfo.selectedGroups = selectedGroupIds; + await saveXtreamServerToDB(currentXtreamServerInfo); + } + + showLoading(true, `Cargando streams seleccionados de Xtream...`); + let streamPromises = []; + if (loadLive && selectedGroupIds.live.length > 0) streamPromises.push(fetchXtreamData('get_live_streams').catch(e => [])); else streamPromises.push(Promise.resolve([])); + if (loadVod && selectedGroupIds.vod.length > 0) streamPromises.push(fetchXtreamData('get_vod_streams').catch(e => [])); else streamPromises.push(Promise.resolve([])); + if (loadSeries && selectedGroupIds.series.length > 0) streamPromises.push(fetchXtreamData('get_series').catch(e => [])); else streamPromises.push(Promise.resolve([])); + + let [liveStreams, vodStreams, seriesStreams] = await Promise.all(streamPromises); + + const allCategories = await Promise.all([ + loadLive ? fetchXtreamData('get_live_categories') : Promise.resolve([]), + loadVod ? fetchXtreamData('get_vod_categories') : Promise.resolve([]), + loadSeries ? fetchXtreamData('get_series_categories') : Promise.resolve([]) + ]).then(([live, vod, series]) => [...(live||[]), ...(vod||[]), ...(series||[])]); + + const categoryMap = {}; + allCategories.forEach(cat => categoryMap[cat.category_id] = cat.category_name); + + xtreamData.live = transformXtreamItems(liveStreams, 'live', currentXtreamServerInfo, categoryMap).filter(item => selectedGroupIds.live.includes(item.attributes['category_id'])); + xtreamData.vod = transformXtreamItems(vodStreams, 'vod', currentXtreamServerInfo, categoryMap).filter(item => selectedGroupIds.vod.includes(item.attributes['category_id'])); + xtreamData.series = transformXtreamItems(seriesStreams, 'series', currentXtreamServerInfo, categoryMap).filter(item => selectedGroupIds.series.includes(item.attributes['category_id'])); + + channels = [...xtreamData.live, ...xtreamData.vod, ...xtreamData.series]; + currentM3UContent = buildM3UFromString(channels); + currentM3UName = `Xtream: ${serverName}`; + currentGroupOrder = [...new Set(channels.map(c => c['group-title']))].sort(); + + if(userSettings.autoSaveM3U) { + localStorage.setItem('currentXtreamServerInfo', JSON.stringify(currentXtreamServerInfo)); + localStorage.removeItem('lastM3UUrl'); + localStorage.removeItem('lastM3UFileContent'); + localStorage.removeItem('lastM3UFileName'); + } + $('#xtreamConnectionModal').modal('hide'); + displayXtreamRootView(); + + if (fetchEpgFlag) { + const epgUrl = `${currentXtreamServerInfo.host.replace(/\/$/, '')}/xmltv.php?username=${encodeURIComponent(currentXtreamServerInfo.username)}&password=${encodeURIComponent(currentXtreamServerInfo.password)}`; + if (typeof loadEpgFromUrl === 'function') { + loadEpgFromUrl(epgUrl).catch(err => { + console.error("Error cargando EPG de Xtream en segundo plano:", err); + if (typeof showNotification === 'function') { + showNotification('Fallo al cargar EPG de Xtream: ' + err.message, 'error'); + } + }); + } + } + + } catch (error) { + showNotification(`Error conectando a Xtream: ${error.message}`, 'error'); + hideXtreamInfoBar(); + } finally { + showLoading(false); + } +} + +function displayXtreamRootView() { + navigationHistory = []; + currentView = { type: 'main' }; + renderCurrentView(); + showNotification(`Xtream: Canales cargados. Live: ${xtreamData.live.length}, VOD: ${xtreamData.vod.length}, Series: ${xtreamData.series.length}`, "success"); +} + +function transformXtreamItems(items, type, serverInfo, categoryMap) { + if (!Array.isArray(items)) return []; + + return items.map(item => { + let baseObject = { + 'group-title': categoryMap[item.category_id] || `Xtream ${type}`, + attributes: {'category_id': item.category_id}, + kodiProps: {}, vlcOptions: {}, extHttp: {}, + sourceOrigin: `xtream-${serverInfo.name || serverInfo.host}` + }; + + if (type === 'live') { + let streamUrl; + const serverHost = serverInfo.host.replace(/\/$/, ''); + const ds = item.direct_source ? item.direct_source.trim() : ''; + + if (ds) { + try { + new URL(ds); + streamUrl = ds; + } catch (e) { + streamUrl = `${serverHost}${ds.startsWith('/') ? '' : '/'}${ds}`; + } + } else { + let extension; + switch (serverInfo.outputType) { + case 'ts': + extension = 'ts'; + break; + case 'hls': + case 'm3u_plus': + default: + extension = 'm3u8'; + break; + } + streamUrl = `${serverHost}/live/${serverInfo.username}/${serverInfo.password}/${item.stream_id}.${extension}`; + } + + return { + ...baseObject, + name: item.name, + url: streamUrl, + 'tvg-id': item.epg_channel_id || `xtream.${item.stream_id}`, + 'tvg-logo': item.stream_icon || '', + attributes: { ...baseObject.attributes, 'xtream-type': 'live', 'stream-id': item.stream_id } + }; + } + if (type === 'vod') { + const vodInfo = item.info || {}; + return { + ...baseObject, + name: item.name, + url: `${serverInfo.host.replace(/\/$/, '')}/movie/${serverInfo.username}/${serverInfo.password}/${item.stream_id}.${item.container_extension || 'mp4'}`, + 'tvg-id': `vod.${item.stream_id}`, + 'tvg-logo': item.stream_icon || vodInfo.movie_image || '', + attributes: { ...baseObject.attributes, 'xtream-type': 'vod', 'stream-id': item.stream_id, 'xtream-info': JSON.stringify(vodInfo) } + }; + } + if (type === 'series') { + return { + ...baseObject, + name: item.name, + url: `#xtream-series-${item.series_id}`, + 'tvg-id': `series.${item.series_id}`, + 'tvg-logo': item.cover || (item.backdrop_path && item.backdrop_path[0]) || '', + attributes: { ...baseObject.attributes, 'xtream-type': 'series', 'xtream-series-id': item.series_id, 'xtream-info': JSON.stringify(item) } + }; + } + return null; + }).filter(Boolean); +} + +async function loadXtreamSeasons(seriesId, seriesName) { + if (!currentXtreamServerInfo) { + showNotification("No hay servidor Xtream activo para cargar las temporadas.", "warning"); + return null; + } + showLoading(true, `Cargando temporadas para: ${escapeHtml(seriesName)}`); + try { + const seriesData = await fetchXtreamData('get_series_info', { series_id: seriesId }); + const seasons = []; + if (seriesData && seriesData.episodes) { + const seriesInfo = seriesData.info || {}; + const sortedSeasonKeys = Object.keys(seriesData.episodes).sort((a, b) => parseInt(a, 10) - parseInt(b, 10)); + + for (const seasonNumber of sortedSeasonKeys) { + seasons.push({ + name: `Temporada ${seasonNumber}`, + 'tvg-logo': seriesInfo.cover || '', + 'group-title': seriesName, + season_number: seasonNumber, + series_id: seriesId + }); + } + } + return seasons; + } catch (error) { + showNotification(`Error cargando temporadas: ${error.message}`, 'error'); + return null; + } finally { + showLoading(false); + } +} + +async function loadXtreamSeasonEpisodes(seriesId, seasonNumber) { + if (!currentXtreamServerInfo) { + showNotification("No hay servidor Xtream activo para cargar los episodios.", "warning"); + return null; + } + showLoading(true, `Cargando episodios para la temporada ${seasonNumber}...`); + try { + const seriesData = await fetchXtreamData('get_series_info', { series_id: seriesId }); + const episodes = []; + const seriesInfo = seriesData.info || {}; + + if (seriesData && seriesData.episodes && seriesData.episodes[seasonNumber]) { + const episodesInSeason = seriesData.episodes[seasonNumber]; + episodesInSeason.sort((a,b) => (a.episode_num || 0) - (b.episode_num || 0)); + + episodesInSeason.forEach(ep => { + const episodeNum = ep.episode_num || 0; + const episodeInfo = ep.info || {}; + const containerExtension = ep.container_extension || 'mp4'; + + episodes.push({ + name: `${ep.title || 'Episodio ' + episodeNum} (T${seasonNumber}E${episodeNum})`, + url: `${currentXtreamServerInfo.host.replace(/\/$/, '')}/series/${currentXtreamServerInfo.username}/${currentXtreamServerInfo.password}/${ep.id}.${containerExtension}`, + 'tvg-id': `series.ep.${ep.id}`, + 'tvg-logo': episodeInfo.movie_image || seriesInfo.cover || '', + 'group-title': `${seriesInfo.name} - Temporada ${seasonNumber}`, + attributes: { 'xtream-type': 'episode', 'stream-id': ep.id }, + kodiProps: {}, vlcOptions: {}, extHttp: {}, + sourceOrigin: `xtream-${currentXtreamServerInfo.name || currentXtreamServerInfo.host}` + }); + }); + } + return episodes; + } catch (error) { + showNotification(`Error cargando episodios: ${error.message}`, 'error'); + return null; + } finally { + showLoading(false); + } +} + +async function loadXtreamSeriesEpisodes(seriesId, seriesName) { + if (!currentXtreamServerInfo) { + showNotification("No hay servidor Xtream activo para cargar episodios.", "warning"); + return; + } + showLoading(true, `Cargando episodios para: ${escapeHtml(seriesName)}`); + try { + const seriesData = await fetchXtreamData('get_series_info', { series_id: seriesId }); + let episodesForGrid = []; + const seriesInfo = seriesData.info || {}; + + if (seriesData && seriesData.episodes && typeof seriesData.episodes === 'object') { + const seasons = seriesData.episodes; + const sortedSeasonKeys = Object.keys(seasons).sort((a, b) => parseInt(a, 10) - parseInt(b, 10)); + + for (const seasonNumber of sortedSeasonKeys) { + const episodesInSeason = seasons[seasonNumber]; + if (Array.isArray(episodesInSeason)) { + episodesInSeason.sort((a,b) => (a.episode_num || a.episode_number || 0) - (b.episode_num || b.episode_number || 0)); + + episodesInSeason.forEach(ep => { + const episodeNum = ep.episode_num || ep.episode_number; + const episodeInfo = ep.info || {}; + const containerExtension = ep.container_extension || 'mp4'; + + episodesForGrid.push({ + name: `${ep.title || 'Episodio ' + episodeNum} (T${ep.season || seasonNumber}E${episodeNum})`, + url: `${currentXtreamServerInfo.host.replace(/\/$/, '')}/series/${currentXtreamServerInfo.username}/${currentXtreamServerInfo.password}/${ep.id}.${containerExtension}`, + 'tvg-id': `series.ep.${ep.id}`, + 'tvg-logo': episodeInfo.movie_image || seriesInfo.cover || '', + 'group-title': `${seriesName} - Temporada ${ep.season || seasonNumber}`, + attributes: { 'xtream-type': 'episode', 'stream-id': ep.id }, + kodiProps: {}, vlcOptions: {}, extHttp: {}, + sourceOrigin: `xtream-${currentXtreamServerInfo.name || currentXtreamServerInfo.host}` + }); + }); + } + } + } + + if (episodesForGrid.length > 0) { + pushNavigationState(); + currentView = { type: 'episode_list', data: episodesForGrid, title: seriesName }; + renderCurrentView(); + showNotification(`${episodesForGrid.length} episodios cargados.`, 'success'); + } else { + showNotification(`No se encontraron episodios para ${escapeHtml(seriesName)}.`, 'info'); + } + + } catch (error) { + showNotification(`Error cargando episodios: ${error.message}`, 'error'); + } finally { + showLoading(false); + } +} + + +async function handleSaveXtreamServer() { + const serverName = $('#xtreamServerNameInput').val().trim(); + const host = $('#xtreamHostInput').val().trim(); + const username = $('#xtreamUsernameInput').val().trim(); + const password = $('#xtreamPasswordInput').val(); + const outputType = $('#xtreamOutputTypeSelect').val(); + const fetchEpg = $('#xtreamFetchEpgCheck').is(':checked'); + + if (!host || !username || !password) { + if (typeof showNotification === 'function') showNotification('Host, usuario y contraseña son obligatorios para guardar.', 'warning'); + return; + } + + const serverData = { name: serverName || host, host, username, password, outputType, fetchEpg }; + + if (typeof showLoading === 'function') showLoading(true, `Guardando servidor Xtream: ${escapeHtml(serverData.name)}...`); + try { + await saveXtreamServerToDB(serverData); + if (typeof showNotification === 'function') showNotification(`Servidor Xtream "${escapeHtml(serverData.name)}" guardado.`, 'success'); + loadSavedXtreamServers(); + $('#xtreamServerNameInput, #xtreamHostInput, #xtreamUsernameInput, #xtreamPasswordInput').val(''); + } catch (error) { + if (typeof showNotification === 'function') showNotification(`Error al guardar servidor: ${error.message}`, 'error'); + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} + +async function loadXtreamServerToForm(id) { + if (typeof showLoading === 'function') showLoading(true, "Cargando datos del servidor..."); + try { + const server = await getXtreamServerFromDB(id); + if (server) { + $('#xtreamServerNameInput').val(server.name || ''); + $('#xtreamHostInput').val(server.host || ''); + $('#xtreamUsernameInput').val(server.username || ''); + $('#xtreamPasswordInput').val(server.password || ''); + $('#xtreamOutputTypeSelect').val(server.outputType || 'm3u_plus'); + $('#xtreamFetchEpgCheck').prop('checked', typeof server.fetchEpg === 'boolean' ? server.fetchEpg : true); + if (typeof showNotification === 'function') showNotification(`Datos del servidor "${escapeHtml(server.name || server.host)}" cargados.`, 'info'); + } else { + if (typeof showNotification === 'function') showNotification('Servidor no encontrado.', 'error'); + } + } catch (error) { + if (typeof showNotification === 'function') showNotification(`Error al cargar servidor: ${error.message}`, 'error'); + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} + +async function handleDeleteXtreamServer(id) { + const serverToDelete = await getXtreamServerFromDB(id); + const serverName = serverToDelete ? (serverToDelete.name || serverToDelete.host) : 'este servidor'; + + if (!confirm(`¿Estás seguro de eliminar el servidor Xtream "${escapeHtml(serverName)}"?`)) return; + + if (typeof showLoading === 'function') showLoading(true, `Eliminando servidor "${escapeHtml(serverName)}"...`); + try { + await deleteXtreamServerFromDB(id); + if (typeof showNotification === 'function') showNotification(`Servidor Xtream "${escapeHtml(serverName)}" eliminado.`, 'success'); + loadSavedXtreamServers(); + } catch (error) { + if (typeof showNotification === 'function') showNotification(`Error al eliminar servidor: ${error.message}`, 'error'); + } finally { + if (typeof showLoading === 'function') showLoading(false); + } +} \ No newline at end of file