@amazon/vinyl 4.0.0 → 4.0.1-next.20261016220320

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/index.cjs +40 -3
  2. package/dist/index.cjs.map +2 -2
  3. package/dist/index.js +41 -3
  4. package/dist/index.js.map +2 -2
  5. package/dist/test/benchmark.es5.js +5 -4
  6. package/dist/test/benchmark.js +11 -2
  7. package/dist/test/benchmark.js.map +3 -3
  8. package/dist/test/errata/mse-changetype-sequence.html +65 -0
  9. package/dist/test/errata/mse-changetype-sequence.js +179 -0
  10. package/dist/test/index.html +2 -2
  11. package/dist/test/integ.es5.js +287 -276
  12. package/dist/test/integ.js +629 -245
  13. package/dist/test/integ.js.map +4 -4
  14. package/dist/test/styles.css +23 -13
  15. package/dist/types/current/playback/PlaybackControllerImpl.d.ts +12 -0
  16. package/dist/types/current/playback/PlaybackControllerImpl.d.ts.map +1 -1
  17. package/dist/types/current/playback/PlaybackControllerImpl.js +42 -1
  18. package/dist/types/current/streaming/buffering/BufferingController.d.ts.map +1 -1
  19. package/dist/types/current/streaming/buffering/BufferingController.js +9 -2
  20. package/dist/types/current/streaming/buffering/MediaSourceController.d.ts.map +1 -1
  21. package/dist/types/current/streaming/buffering/MediaSourceController.js +4 -2
  22. package/dist/types/current/tsconfig.tsbuildinfo +1 -1
  23. package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +12 -0
  24. package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +12 -0
  25. package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +12 -0
  26. package/dist/unit/types/current/playback/PlaybackControllerImpl.test.js +86 -0
  27. package/dist/unit/types/current/setup.js +6 -5
  28. package/dist/unit/types/current/streaming/SegmentControllerImpl.test.js +44 -1
  29. package/dist/unit/types/current/streaming/buffering/BufferingController.test.js +14 -0
  30. package/dist/unit/types/current/streaming/buffering/MediaSourceController.test.js +13 -0
  31. package/dist/unit/types/current/track/dash/createDashFactories.test.js +15 -5
  32. package/dist/unit/types/current/track/hls/createHlsFactories.test.js +36 -12
  33. package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
  34. package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.js +8 -5
  35. package/dist/vinylTestUtil/index.js +92 -60
  36. package/dist/vinylTestUtil/index.js.map +4 -4
  37. package/dist/vinylTestUtil/types/current/media/FrequencyAnalyzer.d.ts +8 -5
  38. package/dist/vinylTestUtil/types/current/media/FrequencyAnalyzer.d.ts.map +1 -1
  39. package/dist/vinylTestUtil/types/current/media/FrequencyAnalyzer.js +23 -29
  40. package/dist/vinylTestUtil/types/current/media/unlockMediaElement.d.ts +10 -1
  41. package/dist/vinylTestUtil/types/current/media/unlockMediaElement.d.ts.map +1 -1
  42. package/dist/vinylTestUtil/types/current/media/unlockMediaElement.js +34 -6
  43. package/dist/vinylTestUtil/types/current/player/createVinylSuite.d.ts.map +1 -1
  44. package/dist/vinylTestUtil/types/current/player/createVinylSuite.js +6 -1
  45. package/dist/vinylTestUtil/types/current/player/mediaRef.d.ts +7 -0
  46. package/dist/vinylTestUtil/types/current/player/mediaRef.d.ts.map +1 -1
  47. package/dist/vinylTestUtil/types/current/player/mediaRef.js +8 -1
  48. package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
  49. package/dist/vinylTestUtil/types/current/ui/requireUserInteraction.d.ts +6 -2
  50. package/dist/vinylTestUtil/types/current/ui/requireUserInteraction.d.ts.map +1 -1
  51. package/dist/vinylTestUtil/types/current/ui/requireUserInteraction.js +31 -15
  52. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlays.d.ts +9 -2
  53. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlays.d.ts.map +1 -1
  54. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlays.js +10 -7
  55. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.d.ts +4 -1
  56. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.d.ts.map +1 -1
  57. package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.js +3 -2
  58. package/dist/vinylTestUtil/types/ts3.7/media/FrequencyAnalyzer.d.ts +8 -5
  59. package/dist/vinylTestUtil/types/ts3.7/media/unlockMediaElement.d.ts +10 -1
  60. package/dist/vinylTestUtil/types/ts3.7/player/mediaRef.d.ts +7 -0
  61. package/dist/vinylTestUtil/types/ts3.7/ui/requireUserInteraction.d.ts +6 -2
  62. package/dist/vinylTestUtil/types/ts3.7/util/playback/expectTrackPlays.d.ts +9 -2
  63. package/dist/vinylTestUtil/types/ts3.7/util/playback/expectTrackPlaysUntil.d.ts +4 -1
  64. package/dist/vinylTestUtil/types/ts4.1/media/FrequencyAnalyzer.d.ts +8 -5
  65. package/dist/vinylTestUtil/types/ts4.1/media/unlockMediaElement.d.ts +10 -1
  66. package/dist/vinylTestUtil/types/ts4.1/player/mediaRef.d.ts +7 -0
  67. package/dist/vinylTestUtil/types/ts4.1/ui/requireUserInteraction.d.ts +6 -2
  68. package/dist/vinylTestUtil/types/ts4.1/util/playback/expectTrackPlays.d.ts +9 -2
  69. package/dist/vinylTestUtil/types/ts4.1/util/playback/expectTrackPlaysUntil.d.ts +4 -1
  70. package/dist/vinylTestUtil/types/ts4.7/media/FrequencyAnalyzer.d.ts +8 -5
  71. package/dist/vinylTestUtil/types/ts4.7/media/unlockMediaElement.d.ts +10 -1
  72. package/dist/vinylTestUtil/types/ts4.7/player/mediaRef.d.ts +7 -0
  73. package/dist/vinylTestUtil/types/ts4.7/ui/requireUserInteraction.d.ts +6 -2
  74. package/dist/vinylTestUtil/types/ts4.7/util/playback/expectTrackPlays.d.ts +9 -2
  75. package/dist/vinylTestUtil/types/ts4.7/util/playback/expectTrackPlaysUntil.d.ts +4 -1
  76. package/package.json +11 -10
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../test/vinylTestUtil/assets/dash_personalizedResponse.ts", "../../test/vinylTestUtil/assets/dash_segmentBase.ts", "../../test/vinylTestUtil/assets/dash_segmentList.ts", "../../test/vinylTestUtil/assets/dash_segmentListMediaRange.ts", "../../test/vinylTestUtil/assets/vinylTestAssets.ts", "../../test/vinylTestUtil/media/FrequencyAnalyzer.ts", "../../test/vinylTestUtil/player/mediaRef.ts", "../../test/vinylTestUtil/ui/requireUserInteraction.ts", "../../test/vinylTestUtil/media/unlockMediaElement.ts", "../../test/vinylTestUtil/mediaSource/ControlledMediaSource.ts", "../../test/vinylTestUtil/mock/ad/MockAdController.ts", "../../test/vinylTestUtil/mock/client/MockCapabilities.ts", "../../test/vinylTestUtil/mock/client/MockClient.ts", "../../test/vinylTestUtil/mock/dash/mockDashManifest.ts", "../../test/vinylTestUtil/mock/dash/MockDashManifestController.ts", "../../test/vinylTestUtil/mock/dom/ms/MockMSMediaKeyError.ts", "../../test/vinylTestUtil/mock/dom/ms/MockMSMediaKeyMessageEvent.ts", "../../test/vinylTestUtil/mock/dom/ms/MockMSMediaKeys.ts", "../../test/vinylTestUtil/mock/dom/ms/MockMSMediaKeySession.ts", "../../test/vinylTestUtil/mock/dom/webkit/MockWebKitMediaKeyError.ts", "../../test/vinylTestUtil/mock/dom/webkit/MockWebKitMediaKeyMessageEvent.ts", "../../test/vinylTestUtil/mock/dom/webkit/MockWebKitMediaKeys.ts", "../../test/vinylTestUtil/mock/dom/webkit/MockWebKitMediaKeySession.ts", "../../test/vinylTestUtil/mock/dom/webkit/useWebKitMediaKeys.ts", "../../test/vinylTestUtil/mock/drm/MockCommonEme.ts", "../../test/vinylTestUtil/mock/drm/MockCommonMediaKeys.ts", "../../test/vinylTestUtil/mock/drm/MockCommonMediaKeySession.ts", "../../test/vinylTestUtil/mock/drm/MockCommonMediaKeySystemAccess.ts", "../../test/vinylTestUtil/mock/drm/MockDrmController.ts", "../../test/vinylTestUtil/mock/hls/mockHlsManifest.ts", "../../test/vinylTestUtil/mock/hls/MockHlsManifestController.ts", "../../test/vinylTestUtil/mock/logging/MockHistoryLogHandler.ts", "../../test/vinylTestUtil/mock/playback/MockLoudnessNormalizationController.ts", "../../test/vinylTestUtil/mock/playback/MockPlaybackController.ts", "../../test/vinylTestUtil/mock/playback/MockPlaybackSource.ts", "../../test/vinylTestUtil/mock/player/MockVinylPlayerDependencies.ts", "../../test/vinylTestUtil/mock/track/MockTrackController.ts", "../../test/vinylTestUtil/mock/track/dash/createMockDashDependencies.ts", "../../test/vinylTestUtil/mock/streaming/buffering/MockMediaSourceController.ts", "../../test/vinylTestUtil/mock/streaming/MockContentStream.ts", "../../test/vinylTestUtil/mock/text/MockTextTrackController.ts", "../../test/vinylTestUtil/mock/track/MockAutoResetController.ts", "../../test/vinylTestUtil/mock/streaming/abr/MockQualitySelector.ts", "../../test/vinylTestUtil/mock/streaming/buffering/MockBufferingController.ts", "../../test/vinylTestUtil/mock/streaming/buffering/MockSourceBufferController.ts", "../../test/vinylTestUtil/mock/streaming/MockSegmentController.ts", "../../test/vinylTestUtil/mock/track/hls/createMockHlsDependencies.ts", "../../test/vinylTestUtil/mock/track/MockTrack.ts", "../../test/vinylTestUtil/mock/track/MockTrackFactory.ts", "../../test/vinylTestUtil/player/createVinylSuite.ts", "../../test/vinylTestUtil/util/playback/eventPromises.ts", "../../test/vinylTestUtil/util/playback/expectTrackCanSeek.ts", "../../test/vinylTestUtil/util/playback/playbackStateExpectations.ts", "../../test/vinylTestUtil/util/playback/expectTrackPlays.ts", "../../test/vinylTestUtil/util/playback/expectTrackPlaysUntil.ts"],
4
- "sourcesContent": ["/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Example pulled from https://docs.aws.amazon.com/mediatailor/latest/ug/single-period-dash-manifest-example.html\n * Note: does not currently support xmlns http://www.scte.org/schemas/35/2016\n */\n// language=XML\nexport const dash_personalizedResponse = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<MPD minBufferTime=\"PT10.00S\" profiles=\"urn:mpeg:dash:profile:isoff-live:2011\" xmlns=\"urn:mpeg:dash:schema:mpd:2011\">\n <Period id=\"0.0\" start=\"PT0S\">\n <BaseURL>dash/</BaseURL>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"0\"\n startNumber=\"1\" timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48129\" t=\"74412130844415\"/>\n <S d=\"48128\" t=\"74412130892544\"/>\n <S d=\"48127\" t=\"74412130940672\"/>\n <S d=\"48129\" t=\"74412130988799\"/>\n <S d=\"48128\" t=\"74412131036928\"/>\n <S d=\"47104\" t=\"74412131085056\"/>\n <S d=\"48128\" t=\"74412131132160\"/>\n <S d=\"48127\" t=\"74412131180288\"/>\n <S d=\"48129\" t=\"74412131228415\"/>\n <S d=\"48128\" t=\"74412131276544\"/>\n <S d=\"48127\" t=\"74412131324672\"/>\n <S d=\"48129\" t=\"74412131372799\"/>\n <S d=\"48128\" t=\"74412131420928\"/>\n <S d=\"47104\" t=\"74412131469056\"/>\n <S d=\"48128\" t=\"74412131516160\"/>\n <S d=\"48127\" t=\"74412131564288\"/>\n <S d=\"48129\" t=\"74412131612415\"/>\n <S d=\"48128\" t=\"74412131660544\"/>\n <S d=\"48127\" t=\"74412131708672\"/>\n <S d=\"48129\" t=\"74412131756799\"/>\n <S d=\"48128\" t=\"74412131804928\"/>\n <S d=\"47104\" t=\"74412131853056\"/>\n <S d=\"48128\" t=\"74412131900160\"/>\n <S d=\"48127\" t=\"74412131948288\"/>\n <S d=\"48129\" t=\"74412131996415\"/>\n <S d=\"48128\" t=\"74412132044544\"/>\n <S d=\"48127\" t=\"74412132092672\"/>\n <S d=\"48129\" t=\"74412132140799\"/>\n <S d=\"48128\" t=\"74412132188928\"/>\n <S d=\"47104\" t=\"74412132237056\"/>\n <S d=\"48128\" t=\"74412132284160\"/>\n <S d=\"48127\" t=\"74412132332288\"/>\n <S d=\"48129\" t=\"74412132380415\"/>\n <S d=\"48128\" t=\"74412132428544\"/>\n <S d=\"48127\" t=\"74412132476672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"0\"\n startNumber=\"1\" timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"34\" t=\"139522745250000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252760.0_1\" start=\"PT430625H46M\">\n <BaseURL>http://d2gh0tfpz97e4o.cloudfront.net/visitalps/</BaseURL>\n <AdaptationSet bitstreamSwitching=\"false\" frameRate=\"30/1\" mimeType=\"video/mp4\" segmentAlignment=\"true\"\n startWithSAP=\"1\" subsegmentAlignment=\"true\" subsegmentStartsWithSAP=\"1\">\n <SegmentTemplate startNumber=\"1\" timescale=\"90000\"/>\n <Representation bandwidth=\"7500000\" codecs=\"avc1.640028\" height=\"1080\" id=\"1\" width=\"1920\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_1080p_10init.mp4\"\n media=\"visitalps_1080p30_video_1080p_10_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"3000000\" codecs=\"avc1.64001f\" height=\"720\" id=\"2\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_9init.mp4\"\n media=\"visitalps_1080p30_video_720p_9_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1875000\" codecs=\"avc1.64001f\" height=\"720\" id=\"3\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_8init.mp4\"\n media=\"visitalps_1080p30_video_720p_8_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"270000\" r=\"3\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1500000\" codecs=\"avc1.64001f\" height=\"540\" id=\"4\" width=\"960\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_540p_7init.mp4\"\n media=\"visitalps_1080p30_video_540p_7_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1012500\" codecs=\"avc1.64001e\" height=\"396\" id=\"5\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_6init.mp4\"\n media=\"visitalps_1080p30_video_396p_6_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"675000\" codecs=\"avc1.64001e\" height=\"396\" id=\"6\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_5init.mp4\"\n media=\"visitalps_1080p30_video_396p_5_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"450000\" codecs=\"avc1.64001e\" height=\"396\" id=\"7\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_4init.mp4\"\n media=\"visitalps_1080p30_video_396p_4_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"337500\" codecs=\"avc1.640016\" height=\"288\" id=\"8\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_3init.mp4\"\n media=\"visitalps_1080p30_video_288p_3_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"225000\" codecs=\"avc1.640016\" height=\"288\" id=\"9\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_2init.mp4\"\n media=\"visitalps_1080p30_video_288p_2_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"150000\" codecs=\"avc1.640016\" height=\"288\" id=\"10\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_1init.mp4\"\n media=\"visitalps_1080p30_video_288p_1_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet lang=\"eng\" mimeType=\"audio/mp4\" segmentAlignment=\"0\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\"/>\n <Representation audioSamplingRate=\"48000\" bandwidth=\"128000\" codecs=\"mp4a.40.2\" id=\"11\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"96000\" r=\"6\" t=\"0\"/>\n <S d=\"46368\" t=\"672000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252760.0\" start=\"PT430625H46M14.966S\">\n <BaseURL>dash/</BaseURL>\n <EventStream schemeIdUri=\"urn:scte:scte35:2014:xml+bin\" timescale=\"1\">\n <Event duration=\"24\" id=\"136\" presentationTime=\"1550252760\">\n <Signal xmlns=\"http://www.scte.org/schemas/35/2016\">\n <Binary>/DAhAAAAAAAAAP/wEAUAAACIf+9/fgAg9YDAAAAAAABiJjIs</Binary>\n </Signal>\n </Event>\n </EventStream>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"74412133198368\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48128\" t=\"74412133196544\"/>\n <S d=\"48127\" t=\"74412133244672\"/>\n <S d=\"48129\" t=\"74412133292799\"/>\n <S d=\"48128\" t=\"74412133340928\"/>\n <S d=\"47104\" t=\"74412133389056\"/>\n <S d=\"48128\" t=\"74412133436160\"/>\n <S d=\"48127\" t=\"74412133484288\"/>\n <S d=\"48129\" t=\"74412133532415\"/>\n <S d=\"48128\" t=\"74412133580544\"/>\n <S d=\"48127\" t=\"74412133628672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"139522749746940\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"9\" t=\"139522749660000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252784.0\" start=\"PT430625H46M24S\">\n <BaseURL>dash/</BaseURL>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"74412133632000\"\n startNumber=\"60\" timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48129\" t=\"74412133676799\"/>\n <S d=\"48128\" t=\"74412133724928\"/>\n <S d=\"47104\" t=\"74412133773056\"/>\n <S d=\"48128\" t=\"74412133820160\"/>\n <S d=\"48127\" t=\"74412133868288\"/>\n <S d=\"48129\" t=\"74412133916415\"/>\n <S d=\"48128\" t=\"74412133964544\"/>\n <S d=\"48127\" t=\"74412134012672\"/>\n <S d=\"48129\" t=\"74412134060799\"/>\n <S d=\"48128\" t=\"74412134108928\"/>\n <S d=\"47104\" t=\"74412134157056\"/>\n <S d=\"48128\" t=\"74412134204160\"/>\n <S d=\"48127\" t=\"74412134252288\"/>\n <S d=\"48129\" t=\"74412134300415\"/>\n <S d=\"48128\" t=\"74412134348544\"/>\n <S d=\"48127\" t=\"74412134396672\"/>\n <S d=\"48129\" t=\"74412134444799\"/>\n <S d=\"48128\" t=\"74412134492928\"/>\n <S d=\"47104\" t=\"74412134541056\"/>\n <S d=\"48128\" t=\"74412134588160\"/>\n <S d=\"48127\" t=\"74412134636288\"/>\n <S d=\"48129\" t=\"74412134684415\"/>\n <S d=\"48128\" t=\"74412134732544\"/>\n <S d=\"48127\" t=\"74412134780672\"/>\n <S d=\"48129\" t=\"74412134828799\"/>\n <S d=\"48128\" t=\"74412134876928\"/>\n <S d=\"47104\" t=\"74412134925056\"/>\n <S d=\"48128\" t=\"74412134972160\"/>\n <S d=\"48127\" t=\"74412135020288\"/>\n <S d=\"48129\" t=\"74412135068415\"/>\n <S d=\"48128\" t=\"74412135116544\"/>\n <S d=\"48127\" t=\"74412135164672\"/>\n <S d=\"48129\" t=\"74412135212799\"/>\n <S d=\"48128\" t=\"74412135260928\"/>\n <S d=\"47104\" t=\"74412135309056\"/>\n <S d=\"48128\" t=\"74412135356160\"/>\n <S d=\"48127\" t=\"74412135404288\"/>\n <S d=\"48129\" t=\"74412135452415\"/>\n <S d=\"48128\" t=\"74412135500544\"/>\n <S d=\"48127\" t=\"74412135548672\"/>\n <S d=\"48129\" t=\"74412135596799\"/>\n <S d=\"48128\" t=\"74412135644928\"/>\n <S d=\"47104\" t=\"74412135693056\"/>\n <S d=\"48128\" t=\"74412135740160\"/>\n <S d=\"48127\" t=\"74412135788288\"/>\n <S d=\"48129\" t=\"74412135836415\"/>\n <S d=\"48128\" t=\"74412135884544\"/>\n <S d=\"48127\" t=\"74412135932672\"/>\n <S d=\"48129\" t=\"74412135980799\"/>\n <S d=\"48128\" t=\"74412136028928\"/>\n <S d=\"47104\" t=\"74412136077056\"/>\n <S d=\"48128\" t=\"74412136124160\"/>\n <S d=\"48127\" t=\"74412136172288\"/>\n <S d=\"48129\" t=\"74412136220415\"/>\n <S d=\"48128\" t=\"74412136268544\"/>\n <S d=\"48127\" t=\"74412136316672\"/>\n <S d=\"48129\" t=\"74412136364799\"/>\n <S d=\"48128\" t=\"74412136412928\"/>\n <S d=\"47104\" t=\"74412136461056\"/>\n <S d=\"48128\" t=\"74412136508160\"/>\n <S d=\"48127\" t=\"74412136556288\"/>\n <S d=\"48129\" t=\"74412136604415\"/>\n <S d=\"48128\" t=\"74412136652544\"/>\n <S d=\"48127\" t=\"74412136700672\"/>\n <S d=\"48129\" t=\"74412136748799\"/>\n <S d=\"48128\" t=\"74412136796928\"/>\n <S d=\"47104\" t=\"74412136845056\"/>\n <S d=\"48128\" t=\"74412136892160\"/>\n <S d=\"48127\" t=\"74412136940288\"/>\n <S d=\"48129\" t=\"74412136988415\"/>\n <S d=\"48128\" t=\"74412137036544\"/>\n <S d=\"48127\" t=\"74412137084672\"/>\n <S d=\"48129\" t=\"74412137132799\"/>\n <S d=\"48128\" t=\"74412137180928\"/>\n <S d=\"47104\" t=\"74412137229056\"/>\n <S d=\"48128\" t=\"74412137276160\"/>\n <S d=\"48127\" t=\"74412137324288\"/>\n <S d=\"48129\" t=\"74412137372415\"/>\n <S d=\"48128\" t=\"74412137420544\"/>\n <S d=\"48127\" t=\"74412137468672\"/>\n <S d=\"48129\" t=\"74412137516799\"/>\n <S d=\"48128\" t=\"74412137564928\"/>\n <S d=\"47104\" t=\"74412137613056\"/>\n <S d=\"48128\" t=\"74412137660160\"/>\n <S d=\"48127\" t=\"74412137708288\"/>\n <S d=\"48129\" t=\"74412137756415\"/>\n <S d=\"48128\" t=\"74412137804544\"/>\n <S d=\"48127\" t=\"74412137852672\"/>\n <S d=\"48129\" t=\"74412137900799\"/>\n <S d=\"48128\" t=\"74412137948928\"/>\n <S d=\"47104\" t=\"74412137997056\"/>\n <S d=\"48128\" t=\"74412138044160\"/>\n <S d=\"48127\" t=\"74412138092288\"/>\n <S d=\"48129\" t=\"74412138140415\"/>\n <S d=\"48128\" t=\"74412138188544\"/>\n <S d=\"48127\" t=\"74412138236672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"139522750560000\"\n startNumber=\"60\" timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"95\" t=\"139522750560000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252880.0_1\" start=\"PT430625H48M\">\n <BaseURL>http://d2gh0tfpz97e4o.cloudfront.net/visitalps/</BaseURL>\n <AdaptationSet bitstreamSwitching=\"false\" frameRate=\"30/1\" mimeType=\"video/mp4\" segmentAlignment=\"true\"\n startWithSAP=\"1\" subsegmentAlignment=\"true\" subsegmentStartsWithSAP=\"1\">\n <SegmentTemplate startNumber=\"1\" timescale=\"90000\"/>\n <Representation bandwidth=\"7500000\" codecs=\"avc1.640028\" height=\"1080\" id=\"1\" width=\"1920\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_1080p_10init.mp4\"\n media=\"visitalps_1080p30_video_1080p_10_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"3000000\" codecs=\"avc1.64001f\" height=\"720\" id=\"2\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_9init.mp4\"\n media=\"visitalps_1080p30_video_720p_9_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1875000\" codecs=\"avc1.64001f\" height=\"720\" id=\"3\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_8init.mp4\"\n media=\"visitalps_1080p30_video_720p_8_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"270000\" r=\"3\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1500000\" codecs=\"avc1.64001f\" height=\"540\" id=\"4\" width=\"960\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_540p_7init.mp4\"\n media=\"visitalps_1080p30_video_540p_7_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1012500\" codecs=\"avc1.64001e\" height=\"396\" id=\"5\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_6init.mp4\"\n media=\"visitalps_1080p30_video_396p_6_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"675000\" codecs=\"avc1.64001e\" height=\"396\" id=\"6\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_5init.mp4\"\n media=\"visitalps_1080p30_video_396p_5_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"450000\" codecs=\"avc1.64001e\" height=\"396\" id=\"7\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_4init.mp4\"\n media=\"visitalps_1080p30_video_396p_4_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"337500\" codecs=\"avc1.640016\" height=\"288\" id=\"8\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_3init.mp4\"\n media=\"visitalps_1080p30_video_288p_3_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"225000\" codecs=\"avc1.640016\" height=\"288\" id=\"9\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_2init.mp4\"\n media=\"visitalps_1080p30_video_288p_2_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"150000\" codecs=\"avc1.640016\" height=\"288\" id=\"10\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_1init.mp4\"\n media=\"visitalps_1080p30_video_288p_1_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet lang=\"eng\" mimeType=\"audio/mp4\" segmentAlignment=\"0\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\"/>\n <Representation audioSamplingRate=\"48000\" bandwidth=\"128000\" codecs=\"mp4a.40.2\" id=\"11\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"96000\" r=\"6\" t=\"0\"/>\n <S d=\"46368\" t=\"672000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252880.0\" start=\"PT430625H48M14.966S\">\n <BaseURL>dash/</BaseURL>\n <EventStream schemeIdUri=\"urn:scte:scte35:2014:xml+bin\" timescale=\"1\">\n <Event duration=\"24\" id=\"137\" presentationTime=\"1550252880\">\n <Signal xmlns=\"http://www.scte.org/schemas/35/2016\">\n <Binary>/DAhAAAAAAAAAP/wEAUAAACJf+9/fgAg9YDAAAAAAAC/KdNe</Binary>\n </Signal>\n </Event>\n </EventStream>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"74412138958368\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48128\" t=\"74412138956544\"/>\n <S d=\"48127\" t=\"74412139004672\"/>\n <S d=\"48129\" t=\"74412139052799\"/>\n <S d=\"48128\" t=\"74412139100928\"/>\n <S d=\"47104\" t=\"74412139149056\"/>\n <S d=\"48128\" t=\"74412139196160\"/>\n <S d=\"48127\" t=\"74412139244288\"/>\n <S d=\"48129\" t=\"74412139292415\"/>\n <S d=\"48128\" t=\"74412139340544\"/>\n <S d=\"48127\" t=\"74412139388672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"139522760546940\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"9\" t=\"139522760460000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252904.0\" start=\"PT430625H48M24S\">\n <BaseURL>dash/</BaseURL>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"74412139392000\"\n startNumber=\"180\" timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48129\" t=\"74412139436799\"/>\n <S d=\"48128\" t=\"74412139484928\"/>\n <S d=\"47104\" t=\"74412139533056\"/>\n <S d=\"48128\" t=\"74412139580160\"/>\n <S d=\"48127\" t=\"74412139628288\"/>\n <S d=\"48129\" t=\"74412139676415\"/>\n <S d=\"48128\" t=\"74412139724544\"/>\n <S d=\"48127\" t=\"74412139772672\"/>\n <S d=\"48129\" t=\"74412139820799\"/>\n <S d=\"48128\" t=\"74412139868928\"/>\n <S d=\"47104\" t=\"74412139917056\"/>\n <S d=\"48128\" t=\"74412139964160\"/>\n <S d=\"48127\" t=\"74412140012288\"/>\n <S d=\"48129\" t=\"74412140060415\"/>\n <S d=\"48128\" t=\"74412140108544\"/>\n <S d=\"48127\" t=\"74412140156672\"/>\n <S d=\"48129\" t=\"74412140204799\"/>\n <S d=\"48128\" t=\"74412140252928\"/>\n <S d=\"47104\" t=\"74412140301056\"/>\n <S d=\"48128\" t=\"74412140348160\"/>\n <S d=\"48127\" t=\"74412140396288\"/>\n <S d=\"48129\" t=\"74412140444415\"/>\n <S d=\"48128\" t=\"74412140492544\"/>\n <S d=\"48127\" t=\"74412140540672\"/>\n <S d=\"48129\" t=\"74412140588799\"/>\n <S d=\"48128\" t=\"74412140636928\"/>\n <S d=\"47104\" t=\"74412140685056\"/>\n <S d=\"48128\" t=\"74412140732160\"/>\n <S d=\"48127\" t=\"74412140780288\"/>\n <S d=\"48129\" t=\"74412140828415\"/>\n <S d=\"48128\" t=\"74412140876544\"/>\n <S d=\"48127\" t=\"74412140924672\"/>\n <S d=\"48129\" t=\"74412140972799\"/>\n <S d=\"48128\" t=\"74412141020928\"/>\n <S d=\"47104\" t=\"74412141069056\"/>\n <S d=\"48128\" t=\"74412141116160\"/>\n <S d=\"48127\" t=\"74412141164288\"/>\n <S d=\"48129\" t=\"74412141212415\"/>\n <S d=\"48128\" t=\"74412141260544\"/>\n <S d=\"48127\" t=\"74412141308672\"/>\n <S d=\"48129\" t=\"74412141356799\"/>\n <S d=\"48128\" t=\"74412141404928\"/>\n <S d=\"47104\" t=\"74412141453056\"/>\n <S d=\"48128\" t=\"74412141500160\"/>\n <S d=\"48127\" t=\"74412141548288\"/>\n <S d=\"48129\" t=\"74412141596415\"/>\n <S d=\"48128\" t=\"74412141644544\"/>\n <S d=\"48127\" t=\"74412141692672\"/>\n <S d=\"48129\" t=\"74412141740799\"/>\n <S d=\"48128\" t=\"74412141788928\"/>\n <S d=\"47104\" t=\"74412141837056\"/>\n <S d=\"48128\" t=\"74412141884160\"/>\n <S d=\"48127\" t=\"74412141932288\"/>\n <S d=\"48129\" t=\"74412141980415\"/>\n <S d=\"48128\" t=\"74412142028544\"/>\n <S d=\"48127\" t=\"74412142076672\"/>\n <S d=\"48129\" t=\"74412142124799\"/>\n <S d=\"48128\" t=\"74412142172928\"/>\n <S d=\"47104\" t=\"74412142221056\"/>\n <S d=\"48128\" t=\"74412142268160\"/>\n <S d=\"48127\" t=\"74412142316288\"/>\n <S d=\"48129\" t=\"74412142364415\"/>\n <S d=\"48128\" t=\"74412142412544\"/>\n <S d=\"48127\" t=\"74412142460672\"/>\n <S d=\"48129\" t=\"74412142508799\"/>\n <S d=\"48128\" t=\"74412142556928\"/>\n <S d=\"47104\" t=\"74412142605056\"/>\n <S d=\"48128\" t=\"74412142652160\"/>\n <S d=\"48127\" t=\"74412142700288\"/>\n <S d=\"48129\" t=\"74412142748415\"/>\n <S d=\"48128\" t=\"74412142796544\"/>\n <S d=\"48127\" t=\"74412142844672\"/>\n <S d=\"48129\" t=\"74412142892799\"/>\n <S d=\"48128\" t=\"74412142940928\"/>\n <S d=\"47104\" t=\"74412142989056\"/>\n <S d=\"48128\" t=\"74412143036160\"/>\n <S d=\"48127\" t=\"74412143084288\"/>\n <S d=\"48129\" t=\"74412143132415\"/>\n <S d=\"48128\" t=\"74412143180544\"/>\n <S d=\"48127\" t=\"74412143228672\"/>\n <S d=\"48129\" t=\"74412143276799\"/>\n <S d=\"48128\" t=\"74412143324928\"/>\n <S d=\"47104\" t=\"74412143373056\"/>\n <S d=\"48128\" t=\"74412143420160\"/>\n <S d=\"48127\" t=\"74412143468288\"/>\n <S d=\"48129\" t=\"74412143516415\"/>\n <S d=\"48128\" t=\"74412143564544\"/>\n <S d=\"48127\" t=\"74412143612672\"/>\n <S d=\"48129\" t=\"74412143660799\"/>\n <S d=\"48128\" t=\"74412143708928\"/>\n <S d=\"47104\" t=\"74412143757056\"/>\n <S d=\"48128\" t=\"74412143804160\"/>\n <S d=\"48127\" t=\"74412143852288\"/>\n <S d=\"48129\" t=\"74412143900415\"/>\n <S d=\"48128\" t=\"74412143948544\"/>\n <S d=\"48127\" t=\"74412143996672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"139522761360000\"\n startNumber=\"180\" timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"95\" t=\"139522761360000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550253000.0_1\" start=\"PT430625H50M\">\n <BaseURL>http://d2gh0tfpz97e4o.cloudfront.net/visitalps/</BaseURL>\n <AdaptationSet bitstreamSwitching=\"false\" frameRate=\"30/1\" mimeType=\"video/mp4\" segmentAlignment=\"true\"\n startWithSAP=\"1\" subsegmentAlignment=\"true\" subsegmentStartsWithSAP=\"1\">\n <SegmentTemplate startNumber=\"1\" timescale=\"90000\"/>\n <Representation bandwidth=\"7500000\" codecs=\"avc1.640028\" height=\"1080\" id=\"1\" width=\"1920\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_1080p_10init.mp4\"\n media=\"visitalps_1080p30_video_1080p_10_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"3000000\" codecs=\"avc1.64001f\" height=\"720\" id=\"2\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_9init.mp4\"\n media=\"visitalps_1080p30_video_720p_9_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1875000\" codecs=\"avc1.64001f\" height=\"720\" id=\"3\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_8init.mp4\"\n media=\"visitalps_1080p30_video_720p_8_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"270000\" r=\"3\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1500000\" codecs=\"avc1.64001f\" height=\"540\" id=\"4\" width=\"960\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_540p_7init.mp4\"\n media=\"visitalps_1080p30_video_540p_7_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1012500\" codecs=\"avc1.64001e\" height=\"396\" id=\"5\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_6init.mp4\"\n media=\"visitalps_1080p30_video_396p_6_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"675000\" codecs=\"avc1.64001e\" height=\"396\" id=\"6\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_5init.mp4\"\n media=\"visitalps_1080p30_video_396p_5_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"450000\" codecs=\"avc1.64001e\" height=\"396\" id=\"7\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_4init.mp4\"\n media=\"visitalps_1080p30_video_396p_4_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"337500\" codecs=\"avc1.640016\" height=\"288\" id=\"8\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_3init.mp4\"\n media=\"visitalps_1080p30_video_288p_3_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"225000\" codecs=\"avc1.640016\" height=\"288\" id=\"9\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_2init.mp4\"\n media=\"visitalps_1080p30_video_288p_2_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"150000\" codecs=\"avc1.640016\" height=\"288\" id=\"10\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_1init.mp4\"\n media=\"visitalps_1080p30_video_288p_1_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet lang=\"eng\" mimeType=\"audio/mp4\" segmentAlignment=\"0\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\"/>\n <Representation audioSamplingRate=\"48000\" bandwidth=\"128000\" codecs=\"mp4a.40.2\" id=\"11\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"96000\" r=\"6\" t=\"0\"/>\n <S d=\"46368\" t=\"672000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550253000.0\" start=\"PT430625H50M14.966S\">\n <BaseURL>dash/</BaseURL>\n <EventStream schemeIdUri=\"urn:scte:scte35:2014:xml+bin\" timescale=\"1\">\n <Event duration=\"24\" id=\"138\" presentationTime=\"1550253000\">\n <Signal xmlns=\"http://www.scte.org/schemas/35/2016\">\n <Binary>/DAhAAAAAAAAAP/wEAUAAACKf+9/fgAg9YDAAAAAAADc+O1/</Binary>\n </Signal>\n </Event>\n </EventStream>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"74412144718368\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48128\" t=\"74412144716544\"/>\n <S d=\"48127\" t=\"74412144764672\"/>\n <S d=\"48129\" t=\"74412144812799\"/>\n <S d=\"48128\" t=\"74412144860928\"/>\n <S d=\"47104\" t=\"74412144909056\"/>\n <S d=\"48128\" t=\"74412144956160\"/>\n <S d=\"48127\" t=\"74412145004288\"/>\n <S d=\"48129\" t=\"74412145052415\"/>\n <S d=\"48128\" t=\"74412145100544\"/>\n <S d=\"48127\" t=\"74412145148672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"139522771346940\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"9\" t=\"139522771260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n</MPD>\n`\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// noinspection XmlPathReference\n\n/**\n * A Dash manifest that uses SegmentBase with index ranges.\n */\n// language=XML\nexport const dash_segmentBase = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--Generated with https://github.com/google/shaka-packager version v2.6.1-634af65-release-->\n<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd\" profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\" minBufferTime=\"PT2S\" type=\"static\" mediaPresentationDuration=\"PT60S\">\n <Period id=\"0\">\n <AdaptationSet id=\"0\" contentType=\"audio\" subsegmentAlignment=\"true\">\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"1,2\"/>\n <Representation id=\"0\" bandwidth=\"51160\" codecs=\"mp4a.40.2\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/aac_60s_2ch_16bit_44100Hz_48kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"826-929\" timescale=\"44100\">\n <Initialization range=\"0-825\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"14\" bandwidth=\"124766\" codecs=\"mp4a.40.2\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/aac_60s_2ch_16bit_44100Hz_256kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"826-929\" timescale=\"44100\">\n <Initialization range=\"0-825\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"15\" bandwidth=\"114639\" codecs=\"mp4a.40.2\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/aac_60s_2ch_16bit_44100Hz_128kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"826-929\" timescale=\"44100\">\n <Initialization range=\"0-825\"/>\n </SegmentBase>\n </Representation>\n </AdaptationSet>\n <AdaptationSet id=\"1\" contentType=\"audio\">\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"0,2\"/>\n <Representation id=\"1\" bandwidth=\"141719\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_44100Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"44100\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"3\" bandwidth=\"541361\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_48000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"48000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"4\" bandwidth=\"470315\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_192000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"192000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"6\" bandwidth=\"2192360\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_192000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"192000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"8\" bandwidth=\"153326\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_48000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"48000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"10\" bandwidth=\"257514\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_96000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"96000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"11\" bandwidth=\"495381\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_44100Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"44100\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"16\" bandwidth=\"1074424\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_96000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"96000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n </AdaptationSet>\n <AdaptationSet id=\"2\" contentType=\"audio\" subsegmentAlignment=\"true\">\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"0,1\"/>\n <Representation id=\"2\" bandwidth=\"322671\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_44100Hz_320kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"5\" bandwidth=\"50194\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_44100Hz_48kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"7\" bandwidth=\"50194\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_192000Hz_48kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"9\" bandwidth=\"162390\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_192000Hz_160kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"12\" bandwidth=\"322671\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_192000Hz_320kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"13\" bandwidth=\"162390\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_44100Hz_160kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n </AdaptationSet>\n </Period>\n</MPD>\n`\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * An Amazon catalog AAC track.\n * Uses SegmentList with SegmentURL without media ranges.\n */\n// language=XML\nexport const dash_segmentList = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<MPD minBufferTime=\"PT10S\" type=\"static\" mediaPresentationDuration=\"PT2M59.515S\" profiles=\"urn:mpeg:dash:profile:isoff-live:2011\" xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xmlns:amz-music=\"urn:amazon:music:drm:2019\" xmlns:cenc=\"urn:mpeg:cenc:2013\" xmlns:mspr=\"urn:microsoft:playready\">\n <Period>\n <AdaptationSet segmentAlignment=\"true\" mimeType=\"audio/mp4\" startWithSAP=\"1\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"5e2905f0-1f87-1c2a-cdc9-a698b13460a0\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95\" value=\"2.0\">\n <mspr:pro>gAIAAAEAAQB2AjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AOABBAFUAcABYAG8AYwBmAEsAaAB6AE4AeQBhAGEAWQBzAFQAUgBnAG8AQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBvAHYAQwA0AFQAaQA0AFgAOQBRADAAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBtAHUAcwBpAGMALgBhAG0AYQB6AG8AbgAuAGMAbwBtAC8AZABtAGwAcwAvAGEAYwBxAHUAaQByAGUATABpAGMAZQBuAHMAZQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>\n <cenc:pssh>AAACoHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAoCAAgAAAQABAHYCPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgA4AEEAVQBwAFgAbwBjAGYASwBoAHoATgB5AGEAYQBZAHMAVABSAGcAbwBBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AG8AdgBDADQAVABpADQAWAA5AFEAMAA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAG0AdQBzAGkAYwAuAGEAbQBhAHoAbwBuAC4AYwBvAG0ALwBkAG0AbABzAC8AYQBjAHEAdQBpAHIAZQBMAGkAYwBlAG4AcwBlADwALwBMAEEAXwBVAFIATAA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</cenc:pssh>\n </ContentProtection>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAZnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEYIARIQXikF8B+HHCrNyaaYsTRgoBoLQW1hem9uTXVzaWMiHGNpZDpYaWtGOEIrSEhDck55YWFZc1RSZ29BPT0qBUFVRElP</cenc:pssh>\n </ContentProtection>\n <Representation id=\"48kbps\" bitrate=\"48\" codecs=\"mp4a.40.5\" audioSamplingRate=\"44100\" bandwidth=\"49207\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SegmentList timescale=\"1000\" duration=\"9999\">\n <Initialization sourceURL=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/e995b206-11e7-3b45-97c2-b6a3547d2f4e.mp4?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/7074f18b-9540-330a-afe2-219d0ce7833c.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5f820f1c-2afc-3131-bed4-fb5bdef897f0.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/cd6c620a-04de-3782-92b2-c662b6c1072f.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/f7f821c5-5e35-3add-ad3a-9bbe0dbb1e3e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/9746d8ad-cff5-3494-9496-81f4f55e1ef6.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5f3f7a43-ab6d-3c3a-911b-eead57689bd6.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/fd21ca6a-2754-33ea-8880-6b5ef5b20ee4.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d12751c0-7376-3f3e-93d4-aaa2e0604a27.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/deb6a2fe-cf1c-3cd3-b0c0-14605b19b6f7.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/b4f7e818-9b5d-3961-a30a-efb5662b4266.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/44654895-2ecc-3a8d-8314-b38554bd7cab.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/8bdf4924-bd51-376f-93f5-1a681f67b5f0.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d376f5de-404a-3ec6-9c9b-ec4f1a0bb396.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/1cb253cb-53e0-3ce0-899e-66ab521b243e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5189c800-ada3-3851-af3f-1eb221eb1e46.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/aaba2b17-fb35-34ef-9e02-f5d4751537af.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/7c91714e-b106-3738-88b6-a6de127876ab.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/181177ec-f49d-3adf-9e54-54bc8829a4aa.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"128kbps\" bitrate=\"128\" codecs=\"mp4a.40.5\" audioSamplingRate=\"44100\" bandwidth=\"128940\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SegmentList timescale=\"1000\" duration=\"9999\">\n <Initialization sourceURL=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/48ad8390-8f20-3375-ad88-a6b9e30443c9.mp4?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/b60dac8a-6ef4-3831-a94a-1c45fcee6b2d.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/657d1268-facc-3395-88e9-27c5c126ce48.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5195eaa4-b1fe-35db-a6a2-f44b2f5c5ab3.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/4c03a31b-a7df-348f-85ba-849be71d8429.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/892c0d03-6f0a-3816-bab9-f086b1cc58ca.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/47997981-1b94-33a6-a49b-f213625515c0.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/4363a296-1ee3-386a-b866-bbc3209a70af.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/1080dd32-1782-3329-aa25-9f70425726f6.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/2afd08bd-9018-365e-a7ca-215ec749d5f4.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/db3c6e55-4dcd-32f4-9d86-d699760e37c9.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/38bc1afd-2930-3e41-809c-1c2472b2f7e2.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/df6643b3-5b9e-31cf-a3fa-e271e9f70040.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/6e833e36-ed37-3d57-8d2c-dbe058e04b9d.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/ec9caaf6-2205-3ef9-b456-b91fdea6991e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/f1b8ccdf-9848-3b00-9d12-bab2ca18f857.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/da935cc3-be5e-3b3e-b1eb-7f91bd507a90.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/dbbae462-fd17-38d3-9b2a-ce25d1e67583.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/75b367ea-5dc3-3c95-8ff1-e727723ca423.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n <AdaptationSet segmentAlignment=\"true\" mimeType=\"audio/mp4\" startWithSAP=\"1\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"5e2905f0-1f87-1c2a-cdc9-a698b13460a0\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95\" value=\"2.0\">\n <mspr:pro>gAIAAAEAAQB2AjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AOABBAFUAcABYAG8AYwBmAEsAaAB6AE4AeQBhAGEAWQBzAFQAUgBnAG8AQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBvAHYAQwA0AFQAaQA0AFgAOQBRADAAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBtAHUAcwBpAGMALgBhAG0AYQB6AG8AbgAuAGMAbwBtAC8AZABtAGwAcwAvAGEAYwBxAHUAaQByAGUATABpAGMAZQBuAHMAZQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>\n <cenc:pssh>AAACoHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAoCAAgAAAQABAHYCPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgA4AEEAVQBwAFgAbwBjAGYASwBoAHoATgB5AGEAYQBZAHMAVABSAGcAbwBBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AG8AdgBDADQAVABpADQAWAA5AFEAMAA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAG0AdQBzAGkAYwAuAGEAbQBhAHoAbwBuAC4AYwBvAG0ALwBkAG0AbABzAC8AYQBjAHEAdQBpAHIAZQBMAGkAYwBlAG4AcwBlADwALwBMAEEAXwBVAFIATAA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</cenc:pssh>\n </ContentProtection>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAZnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEYIARIQXikF8B+HHCrNyaaYsTRgoBoLQW1hem9uTXVzaWMiHGNpZDpYaWtGOEIrSEhDck55YWFZc1RSZ29BPT0qBUFVRElP</cenc:pssh>\n </ContentProtection>\n <Representation id=\"256kbps\" bitrate=\"256\" codecs=\"mp4a.40.2\" audioSamplingRate=\"44100\" bandwidth=\"257571\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SegmentList timescale=\"1000\" duration=\"10001\">\n <Initialization sourceURL=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/491172b7-47c7-3c85-8d21-d1b5932f17a2.mp4?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/826bac71-7b31-3a24-9d49-37847e2a6729.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/388d5f9e-91a8-3f11-af1a-ae4a05f97ec9.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/a33b04dd-497b-32a8-8d79-185c3ff64abc.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5177f418-6081-3d74-962e-a22103b0bd9b.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/21130156-4c73-34e4-8d9f-3bb4835907f5.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/e38d0c76-959c-3ea2-9194-a909b79dcb2e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/280aa567-f6e5-355b-910e-86dd3d877058.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/a00d6c29-4f5d-3fec-a925-238376fccb23.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/547acecd-34c8-308d-afa7-4cabfa08828a.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/dade48dd-b7b7-3584-8282-d485b4dcb4ac.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/06a7b39c-bf4c-3a84-8c3a-3130cf8d8796.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/e23e7877-351f-3907-bc21-5ad52e79bea3.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/8bd58682-d178-31e8-9158-647294632481.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/9940b7d6-a080-36e9-bc74-701bc86f1d04.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d3f0bf8f-c7bb-390f-a69f-6c5f76fea173.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/85d1acbe-8bdb-3eb9-a6f1-dabbd39dcac7.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/55329bcb-7009-36c2-acc5-38100b7e7299.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d12a306c-2d45-3e5b-8240-8ebea0437442.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n </Period>\n</MPD>\n`\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * An Amazon flac/opus catalog track example.\n * A SegmentList with SegmentURL elements using media ranges.\n *\n * (Mothership connection, parliament)\n */\n// language=XML\nexport const dash_segmentListMediaRange = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<MPD minBufferTime=\"PT2S\" type=\"static\" mediaPresentationDuration=\"PT400.0133056640625S\" profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\" xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xmlns:amz-music=\"urn:amazon:music:drm:2019\" xmlns:cenc=\"urn:mpeg:cenc:2013\" xmlns:mspr=\"urn:microsoft:playready\">\n <Period id=\"0\">\n <AdaptationSet id=\"1\" contentType=\"audio\" selectionPriority=\"2000\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"53443d2c-a548-037d-dfca-b6873a3b16a7\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAXXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAD0SEFNEPSylSAN938q2hzo7FqcaC0FtYXpvbk11c2ljIhxjaWQ6VTBROUxLVklBMzNmeXJhSE9qc1dwdz09</cenc:pssh>\n </ContentProtection>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:ProgramLoudness\" value=\"-13.5 LUFS\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:trackType\" value=\"HD\"/>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"2\"/>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:AnchorLoudness\" value=\"-11.7 LUFS\"/>\n <Representation id=\"1\" qualityRanking=\"4\" codecs=\"flac\" audioSamplingRate=\"44100\" bandwidth=\"1021104\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:bitDepth\" value=\"16\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/a3ce7553-e9a3-3ca6-8fda-8f354b8cee0f.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=HD_44&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"44100\" duration=\"441000\">\n <Initialization range=\"0-1067\"/>\n <SegmentURL mediaRange=\"1580-1124387\"/>\n <SegmentURL mediaRange=\"1124388-2301681\"/>\n <SegmentURL mediaRange=\"2301682-3413884\"/>\n <SegmentURL mediaRange=\"3413885-4563668\"/>\n <SegmentURL mediaRange=\"4563669-5789595\"/>\n <SegmentURL mediaRange=\"5789596-7027203\"/>\n <SegmentURL mediaRange=\"7027204-8258589\"/>\n <SegmentURL mediaRange=\"8258590-9476689\"/>\n <SegmentURL mediaRange=\"9476690-10663879\"/>\n <SegmentURL mediaRange=\"10663880-11801656\"/>\n <SegmentURL mediaRange=\"11801657-13028295\"/>\n <SegmentURL mediaRange=\"13028296-14259035\"/>\n <SegmentURL mediaRange=\"14259036-15501034\"/>\n <SegmentURL mediaRange=\"15501035-16715074\"/>\n <SegmentURL mediaRange=\"16715075-17945696\"/>\n <SegmentURL mediaRange=\"17945697-19181760\"/>\n <SegmentURL mediaRange=\"19181761-20430664\"/>\n <SegmentURL mediaRange=\"20430665-21668186\"/>\n <SegmentURL mediaRange=\"21668187-22889588\"/>\n <SegmentURL mediaRange=\"22889589-24105876\"/>\n <SegmentURL mediaRange=\"24105877-25286931\"/>\n <SegmentURL mediaRange=\"25286932-26474293\"/>\n <SegmentURL mediaRange=\"26474294-27717336\"/>\n <SegmentURL mediaRange=\"27717337-28944000\"/>\n <SegmentURL mediaRange=\"28944001-30217943\"/>\n <SegmentURL mediaRange=\"30217944-31494322\"/>\n <SegmentURL mediaRange=\"31494323-32753722\"/>\n <SegmentURL mediaRange=\"32753723-33819438\"/>\n <SegmentURL mediaRange=\"33819439-34871800\"/>\n <SegmentURL mediaRange=\"34871801-35987451\"/>\n <SegmentURL mediaRange=\"35987452-37198633\"/>\n <SegmentURL mediaRange=\"37198634-38400513\"/>\n <SegmentURL mediaRange=\"38400514-39590378\"/>\n <SegmentURL mediaRange=\"39590379-40775418\"/>\n <SegmentURL mediaRange=\"40775419-42023162\"/>\n <SegmentURL mediaRange=\"42023163-43262782\"/>\n <SegmentURL mediaRange=\"43262783-44466388\"/>\n <SegmentURL mediaRange=\"44466389-45664349\"/>\n <SegmentURL mediaRange=\"45664350-46838625\"/>\n <SegmentURL mediaRange=\"46838626-47421889\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"2\" qualityRanking=\"3\" codecs=\"flac\" audioSamplingRate=\"48000\" bandwidth=\"1855801\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:bitDepth\" value=\"24\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/f5b706c9-5892-3a17-9d01-4da362cfad35.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=UHD_48&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1067\"/>\n <SegmentURL mediaRange=\"1580-2140301\"/>\n <SegmentURL mediaRange=\"2140302-4352961\"/>\n <SegmentURL mediaRange=\"4352962-6499834\"/>\n <SegmentURL mediaRange=\"6499835-8687556\"/>\n <SegmentURL mediaRange=\"8687557-10955471\"/>\n <SegmentURL mediaRange=\"10955472-13235819\"/>\n <SegmentURL mediaRange=\"13235820-15509496\"/>\n <SegmentURL mediaRange=\"15509497-17768731\"/>\n <SegmentURL mediaRange=\"17768732-19993372\"/>\n <SegmentURL mediaRange=\"19993373-22167125\"/>\n <SegmentURL mediaRange=\"22167126-24434254\"/>\n <SegmentURL mediaRange=\"24434255-26706557\"/>\n <SegmentURL mediaRange=\"26706558-28990196\"/>\n <SegmentURL mediaRange=\"28990197-31245239\"/>\n <SegmentURL mediaRange=\"31245240-33516976\"/>\n <SegmentURL mediaRange=\"33516977-35793411\"/>\n <SegmentURL mediaRange=\"35793412-38083225\"/>\n <SegmentURL mediaRange=\"38083226-40361780\"/>\n <SegmentURL mediaRange=\"40361781-42623154\"/>\n <SegmentURL mediaRange=\"42623155-44879987\"/>\n <SegmentURL mediaRange=\"44879988-47098315\"/>\n <SegmentURL mediaRange=\"47098316-49322904\"/>\n <SegmentURL mediaRange=\"49322905-51607367\"/>\n <SegmentURL mediaRange=\"51607368-53874862\"/>\n <SegmentURL mediaRange=\"53874863-56192866\"/>\n <SegmentURL mediaRange=\"56192867-58512617\"/>\n <SegmentURL mediaRange=\"58512618-60815181\"/>\n <SegmentURL mediaRange=\"60815182-62914181\"/>\n <SegmentURL mediaRange=\"62914182-65000611\"/>\n <SegmentURL mediaRange=\"65000612-67150839\"/>\n <SegmentURL mediaRange=\"67150840-69402495\"/>\n <SegmentURL mediaRange=\"69402496-71643660\"/>\n <SegmentURL mediaRange=\"71643661-73870974\"/>\n <SegmentURL mediaRange=\"73870975-76093618\"/>\n <SegmentURL mediaRange=\"76093619-78383457\"/>\n <SegmentURL mediaRange=\"78383458-80665083\"/>\n <SegmentURL mediaRange=\"80665084-82909593\"/>\n <SegmentURL mediaRange=\"82909594-85145972\"/>\n <SegmentURL mediaRange=\"85145973-87356513\"/>\n <SegmentURL mediaRange=\"87356514-88804457\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"3\" qualityRanking=\"2\" codecs=\"flac\" audioSamplingRate=\"96000\" bandwidth=\"3278164\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:bitDepth\" value=\"24\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/02b134c4-8144-3ab1-b125-5af2d0133d5b.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=UHD_96&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"96000\" duration=\"960000\">\n <Initialization range=\"0-1067\"/>\n <SegmentURL mediaRange=\"1580-3813567\"/>\n <SegmentURL mediaRange=\"3813568-7746339\"/>\n <SegmentURL mediaRange=\"7746340-11599579\"/>\n <SegmentURL mediaRange=\"11599580-15505023\"/>\n <SegmentURL mediaRange=\"15505024-19519493\"/>\n <SegmentURL mediaRange=\"19519494-23556777\"/>\n <SegmentURL mediaRange=\"23556778-27581158\"/>\n <SegmentURL mediaRange=\"27581159-31586807\"/>\n <SegmentURL mediaRange=\"31586808-35549718\"/>\n <SegmentURL mediaRange=\"35549719-39435585\"/>\n <SegmentURL mediaRange=\"39435586-43443650\"/>\n <SegmentURL mediaRange=\"43443651-47467685\"/>\n <SegmentURL mediaRange=\"47467686-51498910\"/>\n <SegmentURL mediaRange=\"51498911-55496614\"/>\n <SegmentURL mediaRange=\"55496615-59513566\"/>\n <SegmentURL mediaRange=\"59513567-63538385\"/>\n <SegmentURL mediaRange=\"63538386-67582593\"/>\n <SegmentURL mediaRange=\"67582594-71608871\"/>\n <SegmentURL mediaRange=\"71608872-75612860\"/>\n <SegmentURL mediaRange=\"75612861-79601033\"/>\n <SegmentURL mediaRange=\"79601034-83549776\"/>\n <SegmentURL mediaRange=\"83549777-87488907\"/>\n <SegmentURL mediaRange=\"87488908-91534801\"/>\n <SegmentURL mediaRange=\"91534802-95552040\"/>\n <SegmentURL mediaRange=\"95552041-99649744\"/>\n <SegmentURL mediaRange=\"99649745-103743373\"/>\n <SegmentURL mediaRange=\"103743374-107815594\"/>\n <SegmentURL mediaRange=\"107815595-111613915\"/>\n <SegmentURL mediaRange=\"111613916-115390443\"/>\n <SegmentURL mediaRange=\"115390444-119249732\"/>\n <SegmentURL mediaRange=\"119249733-123233807\"/>\n <SegmentURL mediaRange=\"123233808-127209398\"/>\n <SegmentURL mediaRange=\"127209399-131167116\"/>\n <SegmentURL mediaRange=\"131167117-135119879\"/>\n <SegmentURL mediaRange=\"135119880-139163685\"/>\n <SegmentURL mediaRange=\"139163686-143201079\"/>\n <SegmentURL mediaRange=\"143201080-147195194\"/>\n <SegmentURL mediaRange=\"147195195-151164220\"/>\n <SegmentURL mediaRange=\"151164221-155096800\"/>\n <SegmentURL mediaRange=\"155096801-157757393\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"4\" qualityRanking=\"1\" codecs=\"flac\" audioSamplingRate=\"192000\" bandwidth=\"5666448\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:bitDepth\" value=\"24\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/edf9f9cb-46ce-33bd-96e1-8456547fbef4.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=UHD_192&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"192000\" duration=\"1920000\">\n <Initialization range=\"0-1067\"/>\n <SegmentURL mediaRange=\"1580-6720450\"/>\n <SegmentURL mediaRange=\"6720451-13610816\"/>\n <SegmentURL mediaRange=\"13610817-20415282\"/>\n <SegmentURL mediaRange=\"20415283-27272412\"/>\n <SegmentURL mediaRange=\"27272413-34250251\"/>\n <SegmentURL mediaRange=\"34250252-41260291\"/>\n <SegmentURL mediaRange=\"41260292-48255248\"/>\n <SegmentURL mediaRange=\"48255249-55224355\"/>\n <SegmentURL mediaRange=\"55224356-62157463\"/>\n <SegmentURL mediaRange=\"62157464-68996670\"/>\n <SegmentURL mediaRange=\"68996671-75970335\"/>\n <SegmentURL mediaRange=\"75970336-82964531\"/>\n <SegmentURL mediaRange=\"82964532-89965755\"/>\n <SegmentURL mediaRange=\"89965756-96928368\"/>\n <SegmentURL mediaRange=\"96928369-103911265\"/>\n <SegmentURL mediaRange=\"103911266-110903999\"/>\n <SegmentURL mediaRange=\"110904000-117921608\"/>\n <SegmentURL mediaRange=\"117921609-124920837\"/>\n <SegmentURL mediaRange=\"124920838-131897214\"/>\n <SegmentURL mediaRange=\"131897215-138848614\"/>\n <SegmentURL mediaRange=\"138848615-145764349\"/>\n <SegmentURL mediaRange=\"145764350-152655256\"/>\n <SegmentURL mediaRange=\"152655257-159680382\"/>\n <SegmentURL mediaRange=\"159680383-166667521\"/>\n <SegmentURL mediaRange=\"166667522-173750581\"/>\n <SegmentURL mediaRange=\"173750582-180827932\"/>\n <SegmentURL mediaRange=\"180827933-187877145\"/>\n <SegmentURL mediaRange=\"187877146-194626820\"/>\n <SegmentURL mediaRange=\"194626821-201345524\"/>\n <SegmentURL mediaRange=\"201345525-208145573\"/>\n <SegmentURL mediaRange=\"208145574-215088653\"/>\n <SegmentURL mediaRange=\"215088654-222022478\"/>\n <SegmentURL mediaRange=\"222022479-228934595\"/>\n <SegmentURL mediaRange=\"228934596-235844464\"/>\n <SegmentURL mediaRange=\"235844465-242852767\"/>\n <SegmentURL mediaRange=\"242852768-249863893\"/>\n <SegmentURL mediaRange=\"249863894-256824103\"/>\n <SegmentURL mediaRange=\"256824104-263749124\"/>\n <SegmentURL mediaRange=\"263749125-270634182\"/>\n <SegmentURL mediaRange=\"270634183-275673081\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n <AdaptationSet id=\"2\" contentType=\"audio\" selectionPriority=\"1000\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"f65d52c1-4de5-e5b6-7296-2f48eddf7378\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAXXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAD0SEPZdUsFN5eW2cpYvSO3fc3gaC0FtYXpvbk11c2ljIhxjaWQ6OWwxU3dVM2w1Ylp5bGk5STdkOXplQT09</cenc:pssh>\n </ContentProtection>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:ProgramLoudness\" value=\"-13.5 LUFS\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:trackType\" value=\"SD\"/>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"1\"/>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:AnchorLoudness\" value=\"-11.7 LUFS\"/>\n <Representation id=\"5\" qualityRanking=\"3\" codecs=\"opus\" audioSamplingRate=\"48000\" bandwidth=\"52950\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/7e2d628d-7666-3ad5-a9df-8ba4e1c6391c.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=SD_LOW&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1031\"/>\n <SegmentURL mediaRange=\"1544-61799\"/>\n <SegmentURL mediaRange=\"61800-121935\"/>\n <SegmentURL mediaRange=\"121936-182071\"/>\n <SegmentURL mediaRange=\"182072-246260\"/>\n <SegmentURL mediaRange=\"246261-310449\"/>\n <SegmentURL mediaRange=\"310450-374638\"/>\n <SegmentURL mediaRange=\"374639-438827\"/>\n <SegmentURL mediaRange=\"438828-503016\"/>\n <SegmentURL mediaRange=\"503017-567205\"/>\n <SegmentURL mediaRange=\"567206-631394\"/>\n <SegmentURL mediaRange=\"631395-695583\"/>\n <SegmentURL mediaRange=\"695584-759772\"/>\n <SegmentURL mediaRange=\"759773-823961\"/>\n <SegmentURL mediaRange=\"823962-888150\"/>\n <SegmentURL mediaRange=\"888151-952339\"/>\n <SegmentURL mediaRange=\"952340-1016528\"/>\n <SegmentURL mediaRange=\"1016529-1080717\"/>\n <SegmentURL mediaRange=\"1080718-1144906\"/>\n <SegmentURL mediaRange=\"1144907-1209095\"/>\n <SegmentURL mediaRange=\"1209096-1273284\"/>\n <SegmentURL mediaRange=\"1273285-1337473\"/>\n <SegmentURL mediaRange=\"1337474-1401662\"/>\n <SegmentURL mediaRange=\"1401663-1465851\"/>\n <SegmentURL mediaRange=\"1465852-1530040\"/>\n <SegmentURL mediaRange=\"1530041-1594229\"/>\n <SegmentURL mediaRange=\"1594230-1658418\"/>\n <SegmentURL mediaRange=\"1658419-1722607\"/>\n <SegmentURL mediaRange=\"1722608-1786796\"/>\n <SegmentURL mediaRange=\"1786797-1850985\"/>\n <SegmentURL mediaRange=\"1850986-1915174\"/>\n <SegmentURL mediaRange=\"1915175-1979363\"/>\n <SegmentURL mediaRange=\"1979364-2043552\"/>\n <SegmentURL mediaRange=\"2043553-2107741\"/>\n <SegmentURL mediaRange=\"2107742-2171930\"/>\n <SegmentURL mediaRange=\"2171931-2236119\"/>\n <SegmentURL mediaRange=\"2236120-2300308\"/>\n <SegmentURL mediaRange=\"2300309-2364497\"/>\n <SegmentURL mediaRange=\"2364498-2428686\"/>\n <SegmentURL mediaRange=\"2428687-2492875\"/>\n <SegmentURL mediaRange=\"2492876-2559060\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"6\" qualityRanking=\"2\" codecs=\"opus\" audioSamplingRate=\"48000\" bandwidth=\"196953\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/8e453bd1-9428-30fa-940f-fa85911368c2.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=SD_MEDIUM&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1031\"/>\n <SegmentURL mediaRange=\"1544-242159\"/>\n <SegmentURL mediaRange=\"242160-482295\"/>\n <SegmentURL mediaRange=\"482296-722431\"/>\n <SegmentURL mediaRange=\"722432-966620\"/>\n <SegmentURL mediaRange=\"966621-1210809\"/>\n <SegmentURL mediaRange=\"1210810-1454998\"/>\n <SegmentURL mediaRange=\"1454999-1699187\"/>\n <SegmentURL mediaRange=\"1699188-1943376\"/>\n <SegmentURL mediaRange=\"1943377-2187565\"/>\n <SegmentURL mediaRange=\"2187566-2431754\"/>\n <SegmentURL mediaRange=\"2431755-2675943\"/>\n <SegmentURL mediaRange=\"2675944-2920132\"/>\n <SegmentURL mediaRange=\"2920133-3164321\"/>\n <SegmentURL mediaRange=\"3164322-3408510\"/>\n <SegmentURL mediaRange=\"3408511-3652699\"/>\n <SegmentURL mediaRange=\"3652700-3896888\"/>\n <SegmentURL mediaRange=\"3896889-4141077\"/>\n <SegmentURL mediaRange=\"4141078-4385266\"/>\n <SegmentURL mediaRange=\"4385267-4629455\"/>\n <SegmentURL mediaRange=\"4629456-4873644\"/>\n <SegmentURL mediaRange=\"4873645-5117833\"/>\n <SegmentURL mediaRange=\"5117834-5362022\"/>\n <SegmentURL mediaRange=\"5362023-5606211\"/>\n <SegmentURL mediaRange=\"5606212-5850400\"/>\n <SegmentURL mediaRange=\"5850401-6094589\"/>\n <SegmentURL mediaRange=\"6094590-6338778\"/>\n <SegmentURL mediaRange=\"6338779-6582967\"/>\n <SegmentURL mediaRange=\"6582968-6827156\"/>\n <SegmentURL mediaRange=\"6827157-7071345\"/>\n <SegmentURL mediaRange=\"7071346-7315534\"/>\n <SegmentURL mediaRange=\"7315535-7559723\"/>\n <SegmentURL mediaRange=\"7559724-7803912\"/>\n <SegmentURL mediaRange=\"7803913-8048101\"/>\n <SegmentURL mediaRange=\"8048102-8292290\"/>\n <SegmentURL mediaRange=\"8292291-8536479\"/>\n <SegmentURL mediaRange=\"8536480-8780668\"/>\n <SegmentURL mediaRange=\"8780669-9024857\"/>\n <SegmentURL mediaRange=\"9024858-9269046\"/>\n <SegmentURL mediaRange=\"9269047-9513235\"/>\n <SegmentURL mediaRange=\"9513236-9759420\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"7\" qualityRanking=\"1\" codecs=\"opus\" audioSamplingRate=\"48000\" bandwidth=\"324955\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/40ba3a06-d285-3130-838f-0c1508c1d18b.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=SD_HIGH&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1031\"/>\n <SegmentURL mediaRange=\"1544-402479\"/>\n <SegmentURL mediaRange=\"402480-802615\"/>\n <SegmentURL mediaRange=\"802616-1202751\"/>\n <SegmentURL mediaRange=\"1202752-1606940\"/>\n <SegmentURL mediaRange=\"1606941-2011129\"/>\n <SegmentURL mediaRange=\"2011130-2415318\"/>\n <SegmentURL mediaRange=\"2415319-2819507\"/>\n <SegmentURL mediaRange=\"2819508-3223696\"/>\n <SegmentURL mediaRange=\"3223697-3627885\"/>\n <SegmentURL mediaRange=\"3627886-4032074\"/>\n <SegmentURL mediaRange=\"4032075-4436263\"/>\n <SegmentURL mediaRange=\"4436264-4840452\"/>\n <SegmentURL mediaRange=\"4840453-5244641\"/>\n <SegmentURL mediaRange=\"5244642-5648830\"/>\n <SegmentURL mediaRange=\"5648831-6053019\"/>\n <SegmentURL mediaRange=\"6053020-6457208\"/>\n <SegmentURL mediaRange=\"6457209-6861397\"/>\n <SegmentURL mediaRange=\"6861398-7265586\"/>\n <SegmentURL mediaRange=\"7265587-7669775\"/>\n <SegmentURL mediaRange=\"7669776-8073964\"/>\n <SegmentURL mediaRange=\"8073965-8478153\"/>\n <SegmentURL mediaRange=\"8478154-8882342\"/>\n <SegmentURL mediaRange=\"8882343-9286531\"/>\n <SegmentURL mediaRange=\"9286532-9690720\"/>\n <SegmentURL mediaRange=\"9690721-10094909\"/>\n <SegmentURL mediaRange=\"10094910-10499098\"/>\n <SegmentURL mediaRange=\"10499099-10903287\"/>\n <SegmentURL mediaRange=\"10903288-11307476\"/>\n <SegmentURL mediaRange=\"11307477-11711665\"/>\n <SegmentURL mediaRange=\"11711666-12115854\"/>\n <SegmentURL mediaRange=\"12115855-12520043\"/>\n <SegmentURL mediaRange=\"12520044-12924232\"/>\n <SegmentURL mediaRange=\"12924233-13328421\"/>\n <SegmentURL mediaRange=\"13328422-13732610\"/>\n <SegmentURL mediaRange=\"13732611-14136799\"/>\n <SegmentURL mediaRange=\"14136800-14540988\"/>\n <SegmentURL mediaRange=\"14540989-14945177\"/>\n <SegmentURL mediaRange=\"14945178-15349366\"/>\n <SegmentURL mediaRange=\"15349367-15753555\"/>\n <SegmentURL mediaRange=\"15753556-16159740\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n <AdaptationSet id=\"3\" contentType=\"audio\" selectionPriority=\"500\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"4e4c6e3a-d760-ffd5-78b0-3824890da09d\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAXXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAD0SEE5MbjrXYP/VeLA4JIkNoJ0aC0FtYXpvbk11c2ljIhxjaWQ6VGt4dU90ZGcvOVY0c0Rna2lRMmduUT09</cenc:pssh>\n </ContentProtection>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:ProgramLoudness\" value=\"-13.5 LUFS\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:trackType\" value=\"LD\"/>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:AnchorLoudness\" value=\"-11.7 LUFS\"/>\n <Representation id=\"8\" qualityRanking=\"2000\" codecs=\"opus\" audioSamplingRate=\"48000\" bandwidth=\"52950\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/748096ab-6991-368b-b9ca-5477bf90ba5a.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=LD_LOW&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1031\"/>\n <SegmentURL mediaRange=\"1544-61799\"/>\n <SegmentURL mediaRange=\"61800-121935\"/>\n <SegmentURL mediaRange=\"121936-182071\"/>\n <SegmentURL mediaRange=\"182072-246260\"/>\n <SegmentURL mediaRange=\"246261-310449\"/>\n <SegmentURL mediaRange=\"310450-374638\"/>\n <SegmentURL mediaRange=\"374639-438827\"/>\n <SegmentURL mediaRange=\"438828-503016\"/>\n <SegmentURL mediaRange=\"503017-567205\"/>\n <SegmentURL mediaRange=\"567206-631394\"/>\n <SegmentURL mediaRange=\"631395-695583\"/>\n <SegmentURL mediaRange=\"695584-759772\"/>\n <SegmentURL mediaRange=\"759773-823961\"/>\n <SegmentURL mediaRange=\"823962-888150\"/>\n <SegmentURL mediaRange=\"888151-952339\"/>\n <SegmentURL mediaRange=\"952340-1016528\"/>\n <SegmentURL mediaRange=\"1016529-1080717\"/>\n <SegmentURL mediaRange=\"1080718-1144906\"/>\n <SegmentURL mediaRange=\"1144907-1209095\"/>\n <SegmentURL mediaRange=\"1209096-1273284\"/>\n <SegmentURL mediaRange=\"1273285-1337473\"/>\n <SegmentURL mediaRange=\"1337474-1401662\"/>\n <SegmentURL mediaRange=\"1401663-1465851\"/>\n <SegmentURL mediaRange=\"1465852-1530040\"/>\n <SegmentURL mediaRange=\"1530041-1594229\"/>\n <SegmentURL mediaRange=\"1594230-1658418\"/>\n <SegmentURL mediaRange=\"1658419-1722607\"/>\n <SegmentURL mediaRange=\"1722608-1786796\"/>\n <SegmentURL mediaRange=\"1786797-1850985\"/>\n <SegmentURL mediaRange=\"1850986-1915174\"/>\n <SegmentURL mediaRange=\"1915175-1979363\"/>\n <SegmentURL mediaRange=\"1979364-2043552\"/>\n <SegmentURL mediaRange=\"2043553-2107741\"/>\n <SegmentURL mediaRange=\"2107742-2171930\"/>\n <SegmentURL mediaRange=\"2171931-2236119\"/>\n <SegmentURL mediaRange=\"2236120-2300308\"/>\n <SegmentURL mediaRange=\"2300309-2364497\"/>\n <SegmentURL mediaRange=\"2364498-2428686\"/>\n <SegmentURL mediaRange=\"2428687-2492875\"/>\n <SegmentURL mediaRange=\"2492876-2559060\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"9\" qualityRanking=\"1000\" codecs=\"opus\" audioSamplingRate=\"48000\" bandwidth=\"164952\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/8be307d6-71ea-3111-a869-40720e08a6f9.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=LD_MEDIUM&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1031\"/>\n <SegmentURL mediaRange=\"1544-202079\"/>\n <SegmentURL mediaRange=\"202080-402215\"/>\n <SegmentURL mediaRange=\"402216-602351\"/>\n <SegmentURL mediaRange=\"602352-806540\"/>\n <SegmentURL mediaRange=\"806541-1010729\"/>\n <SegmentURL mediaRange=\"1010730-1214918\"/>\n <SegmentURL mediaRange=\"1214919-1419107\"/>\n <SegmentURL mediaRange=\"1419108-1623296\"/>\n <SegmentURL mediaRange=\"1623297-1827485\"/>\n <SegmentURL mediaRange=\"1827486-2031674\"/>\n <SegmentURL mediaRange=\"2031675-2235863\"/>\n <SegmentURL mediaRange=\"2235864-2440052\"/>\n <SegmentURL mediaRange=\"2440053-2644241\"/>\n <SegmentURL mediaRange=\"2644242-2848430\"/>\n <SegmentURL mediaRange=\"2848431-3052619\"/>\n <SegmentURL mediaRange=\"3052620-3256808\"/>\n <SegmentURL mediaRange=\"3256809-3460997\"/>\n <SegmentURL mediaRange=\"3460998-3665186\"/>\n <SegmentURL mediaRange=\"3665187-3869375\"/>\n <SegmentURL mediaRange=\"3869376-4073564\"/>\n <SegmentURL mediaRange=\"4073565-4277753\"/>\n <SegmentURL mediaRange=\"4277754-4481942\"/>\n <SegmentURL mediaRange=\"4481943-4686131\"/>\n <SegmentURL mediaRange=\"4686132-4890320\"/>\n <SegmentURL mediaRange=\"4890321-5094509\"/>\n <SegmentURL mediaRange=\"5094510-5298698\"/>\n <SegmentURL mediaRange=\"5298699-5502887\"/>\n <SegmentURL mediaRange=\"5502888-5707076\"/>\n <SegmentURL mediaRange=\"5707077-5911265\"/>\n <SegmentURL mediaRange=\"5911266-6115454\"/>\n <SegmentURL mediaRange=\"6115455-6319643\"/>\n <SegmentURL mediaRange=\"6319644-6523832\"/>\n <SegmentURL mediaRange=\"6523833-6728021\"/>\n <SegmentURL mediaRange=\"6728022-6932210\"/>\n <SegmentURL mediaRange=\"6932211-7136399\"/>\n <SegmentURL mediaRange=\"7136400-7340588\"/>\n <SegmentURL mediaRange=\"7340589-7544777\"/>\n <SegmentURL mediaRange=\"7544778-7748966\"/>\n <SegmentURL mediaRange=\"7748967-7953155\"/>\n <SegmentURL mediaRange=\"7953156-8159340\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n </Period>\n</MPD>`\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport interface SegmentedAsset {\n /**\n * The path to the initialization segment.\n */\n readonly init: string\n\n /**\n * A path to the segments, where {0} represents the segment index.\n */\n readonly part: string\n\n /**\n * The number of segments.\n */\n readonly numSegments: number\n\n /**\n * The duration of the track.\n */\n readonly duration: number\n}\n\n// Assets generated by DMTestAssetBuilder\nexport const vinylTestAssets = {\n prog: {\n libmp3lame_60s_2ch_16bit_44100Hz_48kbps: `https://assets.dev.vinyl.music.amazon.dev/prog/libmp3lame_60s_2ch_16bit_44100Hz_48kbps.mp3`,\n libmp3lame_1800s_2ch_16bit_44100Hz_48kbps: `https://assets.dev.vinyl.music.amazon.dev/prog/libmp3lame_1800s_2ch_16bit_44100Hz_48kbps.mp3`,\n libmp3lame_1s_2ch_16bit_44100Hz_48kbps: `https://assets.dev.vinyl.music.amazon.dev/prog/libmp3lame_1s_2ch_16bit_44100Hz_48kbps.mp3`,\n },\n dash: {\n live_static_aac_opus_flac_60s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentTemplate/manifest.mpd`,\n live_static_aac_opus_flac_60s_segmentBase: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentBase/manifest.mpd`,\n live_static_webm_vp9_opus_60s_segmentBase: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_webm_vp9_opus_60s_segmentBase/manifest.mpd`,\n live_static_video_audio_60s_2s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_audio_60s_2s_segmentTemplate/manifest.mpd`,\n live_static_video_audio_60s_4s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_audio_60s_4s_segmentTemplate/manifest.mpd`,\n live_static_video_audio_60s_2s_segmentTemplate_widevine_cl10: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_audio_60s_2s_segmentTemplate_widevine_cl10/manifest.mpd`,\n live_static_video_audio_60s_4s_segmentTemplate_widevine_cl10: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_audio_60s_4s_segmentTemplate_widevine_cl10/manifest.mpd`,\n live_static_video_60s_2s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_60s_2s_segmentTemplate/manifest.mpd`,\n live_static_video_60s_4s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_60s_4s_segmentTemplate/manifest.mpd`,\n live_static_aac_opus_flac_60s_segmentBase_widevine_cl10: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentBase_widevine_cl10/manifest.mpd`,\n live_static_aac_opus_flac_60s_segmentBase_widevine: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentBase_widevine/manifest.mpd`,\n live_static_aac_1800s_segmentBase_widevine_cl30: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_1800s_segmentBase_widevine_cl30/manifest.mpd`,\n\n // Edge-case tracks: ultra-short 1s assets (audio-only + video), no\n // captions or translations.\n edge_static_aac_1s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/edge_static_aac_1s_segmentTemplate/manifest.mpd`,\n edge_static_video_1s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/edge_static_video_1s_segmentTemplate/manifest.mpd`,\n\n // Ad-break assets (see DMTestAssetBuilder src/adBreaks): a ~3-min\n // labeled ABR ladder with five-language narration, full + forced\n // captions.\n vinyl_ad_breaks_av: `https://assets.dev.vinyl.music.amazon.dev/dash/vinyl_ad_breaks_av/manifest.mpd`,\n vinyl_ad_breaks_audio: `https://assets.dev.vinyl.music.amazon.dev/dash/vinyl_ad_breaks_audio/manifest.mpd`,\n // Stitched (SSAI) multi-Period ad breaks signalled with SCTE-35 MPD\n // events, and alternative MPD (SGAI) events. See DMTestAssetBuilder\n // docs/AD_BREAK_ASSETS.md for each scenario's timeline.\n vinyl_ad_breaks_av__ssai_scte35_xmlbin: `https://assets.dev.vinyl.music.amazon.dev/dash/ssai_scte35_xmlbin/stream.mpd`,\n vinyl_ad_breaks_av__ssai_scte35_xml: `https://assets.dev.vinyl.music.amazon.dev/dash/ssai_scte35_xml/stream.mpd`,\n vinyl_ad_breaks_av__ssai_pod_time_signal: `https://assets.dev.vinyl.music.amazon.dev/dash/ssai_pod_time_signal/stream.mpd`,\n vinyl_ad_breaks_av__ssai_pre_mid_post: `https://assets.dev.vinyl.music.amazon.dev/dash/ssai_pre_mid_post/stream.mpd`,\n vinyl_ad_breaks_av__altmpd_insert: `https://assets.dev.vinyl.music.amazon.dev/dash/altmpd_insert/stream.mpd`,\n vinyl_ad_breaks_av__altmpd_replace: `https://assets.dev.vinyl.music.amazon.dev/dash/altmpd_replace/stream.mpd`,\n // A list MPD, an alternative MPD whose uri is a list MPD pod, and an\n // XLink remote Period.\n vinyl_ad_breaks_av__list_mpd: `https://assets.dev.vinyl.music.amazon.dev/dash/list_mpd/stream.mpd`,\n vinyl_ad_breaks_av__altmpd_list: `https://assets.dev.vinyl.music.amazon.dev/dash/altmpd_list/stream.mpd`,\n vinyl_ad_breaks_av__xlink_remote_period: `https://assets.dev.vinyl.music.amazon.dev/dash/xlink_remote_period/stream.mpd`,\n },\n hls: {\n live_static_video_audio_60s_2s: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_audio_60s_2s/main.m3u8`,\n live_static_video_audio_60s_4s: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_audio_60s_4s/main.m3u8`,\n live_static_aac_opus_flac_60s: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_aac_opus_flac_60s/main.m3u8`,\n live_static_aac_60s_mpegts: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_aac_60s_mpegts/main.m3u8`,\n live_static_video_60s_2s: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_60s_2s/main.m3u8`,\n live_static_video_60s_4s: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_60s_4s/main.m3u8`,\n live_static_video_60s_2s_mpegts: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_60s_2s_mpegts/main.m3u8`,\n live_static_video_60s_4s_mpegts: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_60s_4s_mpegts/main.m3u8`,\n live_static_video_audio_60s_2s_mpegts: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_audio_60s_2s_mpegts/main.m3u8`,\n live_static_video_audio_60s_4s_mpegts: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_audio_60s_4s_mpegts/main.m3u8`,\n\n // Edge-case tracks: ultra-short 1s assets (audio-only + video), no\n // captions or translations.\n edge_static_aac_1s: `https://assets.dev.vinyl.music.amazon.dev/hls/edge_static_aac_1s/main.m3u8`,\n edge_static_video_1s: `https://assets.dev.vinyl.music.amazon.dev/hls/edge_static_video_1s/main.m3u8`,\n\n // Ad-break assets: base content + HLS Interstitial scenario variants.\n // `*_av` = video+audio, `*_audio` = audio-only; each `__<scenario>`\n // injects a different ad-break configuration. See DMTestAssetBuilder\n // docs/AD_BREAK_ASSETS.md for the \"where to expect ads\" table.\n vinyl_ad_breaks_av: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/main.m3u8`,\n vinyl_ad_breaks_audio: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_audio/main.m3u8`,\n vinyl_ad_breaks_av__single_uri_pre_mid_post: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/single_uri_pre_mid_post.m3u8`,\n vinyl_ad_breaks_av__asset_list_midroll: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/asset_list_midroll.m3u8`,\n vinyl_ad_breaks_av__empty_breaks_pre_mid_post: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/empty_breaks_pre_mid_post.m3u8`,\n vinyl_ad_breaks_av__cue_once_midroll: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/cue_once_midroll.m3u8`,\n vinyl_ad_breaks_av__restrict_skip_and_jump: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/restrict_skip_and_jump.m3u8`,\n vinyl_ad_breaks_av__long_preroll_early_midroll: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/long_preroll_early_midroll.m3u8`,\n vinyl_ad_breaks_av__resume_offset_and_playout_limit: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/resume_offset_and_playout_limit.m3u8`,\n vinyl_ad_breaks_audio__single_uri_pre_mid_post: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_audio/single_uri_pre_mid_post.m3u8`,\n vinyl_ad_breaks_audio__asset_list_midroll: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_audio/asset_list_midroll.m3u8`,\n vinyl_ad_breaks_audio__empty_breaks_pre_mid_post: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_audio/empty_breaks_pre_mid_post.m3u8`,\n // Stitched (SSAI) ad breaks signalled with SCTE-35 EXT-X-DATERANGE.\n vinyl_ad_breaks_av__ssai_scte35: `https://assets.dev.vinyl.music.amazon.dev/hls/ssai_scte35/main.m3u8`,\n vinyl_ad_breaks_av__ssai_scte35_cmd: `https://assets.dev.vinyl.music.amazon.dev/hls/ssai_scte35_cmd/main.m3u8`,\n },\n\n // Segmented streaming is added by hand, ControlledMediaSource provides a way to test\n // Media source extensions without reading a dash manifest.\n segmentedStreaming: {\n aac_60s_2ch_16bit_44100Hz_48kbps: {\n init: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentTemplate/segments/aac_60s_2ch_16bit_44100Hz_48kbps/sample.mp4`,\n part: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentTemplate/segments/aac_60s_2ch_16bit_44100Hz_48kbps/part_{index}.m4s`,\n numSegments: 6,\n duration: 60,\n },\n\n // For testing Widevine, use a ControlledMediaSource with this asset.\n // EME requires using a media source, but DRM testing does not need to test buffering.\n aac_60s_2ch_16bit_44100Hz_48kbps_widevine_cl10: {\n init: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_segmentBase_widevine_60s_cl10/representations/aac_60s_2ch_16bit_44100Hz_48kbps.mp4`,\n part: ``,\n numSegments: 0,\n duration: 60,\n },\n },\n} as const satisfies {\n readonly prog: Record<keyof any, string>\n readonly segmentedStreaming: Record<keyof any, SegmentedAsset>\n readonly dash: Record<keyof any, string>\n readonly hls: Record<keyof any, string>\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getAudioContext } from '@amazon/vinyl'\nimport { type LogTarget, TimeoutError } from '@amazon/vinyl-util'\nimport { sleep } from '@amazon/vinyl-util'\nimport { parseBoolean } from '@amazon/vinyl-util'\nimport { logDebug } from '@amazon/vinyl-util'\nimport { getSearchParams } from '@amazon/vinyl-util'\nimport { createLogPrefix } from '@amazon/vinyl-util'\nimport { mediaRef } from '../player/mediaRef'\nimport { requireUserInteraction } from '../ui/requireUserInteraction'\nimport { unlockMediaElement } from './unlockMediaElement'\nimport { setNextTestTimeout } from '@amazon/vinyl-util/browserTestUtil'\n\n/**\n * The percent tolerance the time estimate based on the analyzed frequency can be off from the actual currentTime.\n */\nconst TIME_ESTIMATE_TOLERANCE = 0.02\n\nexport interface FrequencyAnalyzerOptions {\n /**\n * The frequency the sweep starts at.\n */\n readonly startFrequency: number\n\n /**\n * The frequency the sweep ends at.\n */\n readonly endFrequency: number\n\n /**\n * The window size in samples. Default: 4096.\n * A higher value will result in more details in the frequency domain but fewer details in the amplitude domain.\n */\n readonly fftSize:\n 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768\n}\n\nconst defaultFrequencyAnalyzerOptions = {\n startFrequency: 100,\n endFrequency: 6000,\n fftSize: 4096,\n} as const satisfies FrequencyAnalyzerOptions\n\nexport class FrequencyAnalyzer implements LogTarget {\n private readonly data: Float32Array<ArrayBuffer>\n private readonly analyser: AnalyserNode\n\n private readonly options: FrequencyAnalyzerOptions\n\n readonly logPrefix = createLogPrefix('FrequencyAnalyzer')\n\n constructor(\n private readonly audioContext: AudioContext,\n private readonly source: MediaElementAudioSourceNode,\n options?: Partial<FrequencyAnalyzerOptions>\n ) {\n this.options = {\n ...defaultFrequencyAnalyzerOptions,\n ...options,\n }\n // Set up the AnalyserNode\n this.analyser = this.audioContext.createAnalyser()\n this.analyser.fftSize = this.options.fftSize\n this.analyser.connect(this.audioContext.destination)\n this.data = new Float32Array(this.analyser.frequencyBinCount)\n this.source.connect(this.analyser)\n }\n\n /**\n * Estimates the frequency of the current frame window.\n *\n * The frequency estimate is the frequency of the highest decibel bin within the frame window. The number of\n * bins is 1/2 the fftSize.\n */\n get frequency(): number {\n const audioCtx = this.audioContext\n const analyser = this.analyser\n const data = this.data\n analyser.getFloatFrequencyData(data)\n const maxIndex = data.reduce(\n (iMax, x, i, arr) => (x > arr[iMax] ? i : iMax),\n 0\n )\n return (maxIndex * audioCtx.sampleRate) / analyser.fftSize\n }\n\n get estimatedTime(): number {\n const frequency = this.frequency\n const start = this.options.startFrequency\n const end = this.options.endFrequency\n return (\n ((frequency - start) / (end - start)) *\n this.source.mediaElement.duration\n )\n }\n\n /**\n * Asserts that the next samples of audio plays at its expected frequency.\n */\n async assertFrequency(timeout = 10) {\n // Reconnect the analyzer to clear the buffer\n this.analyser.disconnect()\n this.analyser.connect(this.audioContext.destination)\n\n const media = this.source.mediaElement\n if (isNaN(media.duration)) fail('media is not loaded')\n if (media.paused) fail('media is paused')\n const startTime = Date.now()\n const mediaStartTime = media.currentTime\n // The minimum amount of time to fill the buffer up with data from the time the frequency assertion is\n // requested.\n const playbackTime = 0.25\n\n const maxDifference = media.duration * TIME_ESTIMATE_TOLERANCE\n\n // Check if there is enough time remaining in track to accurately test frequency.\n if (media.currentTime + playbackTime >= media.duration) {\n logDebug(\n this,\n 'Ignoring assertFrequency, currentTime is at duration'\n )\n return\n }\n\n let estimatedTime: number\n let diff: number\n let elapsed: number\n do {\n if (Date.now() - startTime > timeout * 1000) {\n throw new TimeoutError(\n 'Frequency data could not be filled, media is not playing.'\n )\n }\n elapsed = media.currentTime - mediaStartTime\n estimatedTime = this.estimatedTime\n diff = Math.abs(estimatedTime - media.currentTime)\n await sleep(playbackTime)\n } while (elapsed < playbackTime && diff > maxDifference)\n\n logDebug(\n this,\n 'time from frequency:',\n estimatedTime.toFixed(2),\n 'actual time:',\n media.currentTime.toFixed(2)\n )\n if (diff > maxDifference) {\n const percentFormatter = new Intl.NumberFormat('en-US', {\n style: 'percent',\n })\n fail(\n `The measured frequency at time ${media.currentTime.toFixed(2)} ` +\n `was measured to be ${this.frequency.toFixed(2)}Hz. ` +\n `The expected time is ${estimatedTime.toFixed(2)}, the actual time ` +\n `is ${media.currentTime.toFixed(2)}, ` +\n `for a difference of ${percentFormatter.format(\n diff / media.duration\n )} track duration. (Tolerance is ${percentFormatter.format(TIME_ESTIMATE_TOLERANCE)})`\n )\n }\n }\n}\n\n/**\n * A query param, if present, will indicate that audio should be analyzed. Does not work in CI environments.\n */\nexport const shouldCheckAudio = parseBoolean(\n (getSearchParams().get('checkAudio') ?? '0').toLowerCase()\n)\n\nlet frequencyAnalyzer: FrequencyAnalyzer | null = null\n\n/**\n * If `shouldCheckAudio` is true and AudioContext is supported, asserts that the currently playing media is playing\n * the frequency expected from the sweep tone of the test assets.\n */\nexport function assertFrequency(): Promise<void> {\n return frequencyAnalyzer?.assertFrequency() ?? Promise.resolve()\n}\n\n/**\n * Displays an interaction prompt if checkAudio is present in the query params.\n *\n * The checkAudio query param, if present, indicates that the actual sound output should be analyzed. This requires\n * a user gesture unless the UA doesn't require it. Most browsers require the gesture, but some platforms this\n * requirement may be skipped with a flag. Note that Google deprecated --autoplay-policy=no-user-gesture-required\n * March 2023, but older versions may still support it.\n */\nexport function initializeFrequencyAnalyzer() {\n if (shouldCheckAudio) {\n // If a user interaction is required, give extra time to interact before a timeout.\n setNextTestTimeout(300)\n beforeAll(async () => {\n // Creates the audio context and 'unlocks' the media element in response to a user gesture.\n const media = mediaRef.value\n media.crossOrigin = 'anonymous'\n media.muted = false\n media.volume = 0.01 // Save your ears. Analyzers do not work at volume 0 or muted; measured dB is affected.\n await requireUserInteraction()\n const audioContext = getAudioContext()\n await unlockMediaElement()\n\n if (audioContext) {\n const source = audioContext.createMediaElementSource(\n mediaRef.value\n )\n frequencyAnalyzer = new FrequencyAnalyzer(audioContext, source)\n } else {\n console.warn('AudioContext not supported')\n }\n })\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { lazy } from '@amazon/vinyl-util'\n\n/**\n * For reliable integ tests on 3P devices, there should be a single media element.\n * When using the media element, unload any sources and reset any state after each test.\n */\nexport const mediaRef = lazy<HTMLMediaElement>(() => {\n const media = document.createElement('video')\n media.muted = true\n media.playsInline = true // needed for iOS\n media.disableRemotePlayback = true // Disables casting. Needed for ManagedMediaSource\n return media\n})\n\nafterEach(() => {\n if (mediaRef.constructed) {\n // Reset the media element.\n const media = mediaRef.value\n media.removeAttribute('src')\n media.load()\n }\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Displays a prompt awaiting user interaction, resolving after a click, keypress, or touch event.\n */\nexport async function requireUserInteraction(): Promise<void> {\n const audioPrompt = document.getElementById('unlockAudioPrompt')!\n audioPrompt.style.removeProperty('display')\n const body = document.body\n body.focus()\n\n await new Promise((resolve) => {\n const done = () => {\n body.removeEventListener('click', done)\n body.removeEventListener('keypress', done)\n body.removeEventListener('touchend', done)\n return resolve(void 0)\n }\n body.addEventListener('click', done)\n body.addEventListener('keypress', done)\n body.addEventListener('touchend', done)\n })\n audioPrompt.style.display = 'none'\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { mediaRef } from '../player/mediaRef'\nimport { vinylTestAssets } from '../assets/vinylTestAssets'\nimport { noop } from '@amazon/vinyl-util'\n\n/**\n * In response to a user-gesture, 'unlocks' the media element by playing and immediately pausing a src track.\n * This allows play() to settle on the media element without a user gesture later.\n */\nexport async function unlockMediaElement() {\n const media = mediaRef.value\n // Unlocks the media element.\n media.src = vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps\n await media.play().catch(noop)\n media.pause()\n media.removeAttribute('src')\n media.load()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createMediaSource, isTypeSupported } from '@amazon/vinyl'\nimport {\n IllegalStateError,\n requestWithRetry,\n substitute,\n} from '@amazon/vinyl-util'\nimport { type SegmentedAsset, vinylTestAssets } from '../assets/vinylTestAssets'\n\nconst mimeCodec = 'audio/mp4;codecs=\"mp4a.40.5\"'\n\n/**\n * Creates a media source with controlled appends, gives the ability to test when playback\n * runs out of data.\n */\nexport class ControlledMediaSource {\n readonly length: number\n private _currentIndex = 0\n\n private readonly mediaSource = createMediaSource()\n private readonly sourceBufferPromise: Promise<SourceBuffer>\n private segments: readonly ArrayBuffer[] | null = null\n\n constructor(\n readonly sourceAsset: SegmentedAsset = vinylTestAssets\n .segmentedStreaming.aac_60s_2ch_16bit_44100Hz_48kbps\n ) {\n this.length = sourceAsset.numSegments + 1\n if (isTypeSupported(mimeCodec)) {\n this.sourceBufferPromise = new Promise((resolve) => {\n this.mediaSource.addEventListener(\n 'sourceopen',\n () => {\n this.mediaSource.duration = sourceAsset.duration\n const sourceBuffer =\n this.mediaSource.addSourceBuffer(mimeCodec)\n resolve(sourceBuffer)\n },\n { once: true }\n )\n })\n } else {\n throw new Error(`Unsupported MIME type or codec: ${mimeCodec}`)\n }\n }\n\n /**\n * Gets the data for all segments.\n * All data is preloaded in order to have reproducible test conditions.\n */\n private async getSegments(): Promise<ArrayBuffer[]> {\n // Populate the assets from the template. index 0 - init segment, index 1 through\n // numSegments is sourceAsset.part where {index} is replaced with the index (1-indexed).\n const segments = new Array<ArrayBuffer>(this.length)\n const initResponse = await requestWithRetry(this.sourceAsset.init)\n segments[0] = await initResponse.arrayBuffer()\n for (let i = 1; i <= this.sourceAsset.numSegments; i++) {\n const mediaResponse = await requestWithRetry(\n substitute(this.sourceAsset.part, { index: i })\n )\n segments[i] = await mediaResponse.arrayBuffer()\n }\n return segments\n }\n\n /**\n * Gets the media source.\n * This promise resolves when all assets are ready.\n * Note: in Firefox, you must set this object url on the element immediately. Creating the\n * URL and setting it later can cause errors.\n */\n async getMediaSource(): Promise<MediaSource> {\n this.segments = await this.getSegments()\n return this.mediaSource\n }\n\n async appendNext(): Promise<void> {\n if (!this.segments)\n throw new IllegalStateError('cannot append before getMediaSource')\n const sourceBuffer = await this.sourceBufferPromise\n if (this._currentIndex >= this.length)\n throw new Error(`Only ${this.length} segments`)\n const buff = this.segments[this._currentIndex++]\n await onSourceBufferReady(sourceBuffer)\n const updateEnd = onUpdateEnd(sourceBuffer)\n sourceBuffer.appendBuffer(buff)\n await updateEnd\n if (this._currentIndex === this.length) {\n this.mediaSource.endOfStream()\n }\n }\n}\n\nasync function onSourceBufferReady(sourceBuffer: SourceBuffer): Promise<void> {\n if (!sourceBuffer.updating) return\n await onUpdateEnd(sourceBuffer)\n return onSourceBufferReady(sourceBuffer)\n}\n\n/**\n * Resolves on the next updateend event.\n * @param sourceBuffer\n * @private\n */\nfunction onUpdateEnd(sourceBuffer: SourceBuffer): Promise<void> {\n return new Promise((resolve) => {\n sourceBuffer.addEventListener(\n 'updateend',\n () => {\n resolve(void 0)\n },\n { once: true }\n )\n })\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AdBreakInfo,\n AdController,\n AdInfo,\n TrackAds,\n} from '../../../../src'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<AdController>()\nexport class MockAdController extends MockEventHost implements AdController {\n currentTrackAds: TrackAds | null = null\n currentAd: AdInfo | null = null\n currentAdBreak: AdBreakInfo | null = null\n\n setAdsProvider = spyFactory('setAdsProvider')\n failAd = spyFactory('failAd')\n skipAd = spyFactory('skipAd')\n skipAdBreak = spyFactory('skipAdBreak')\n enterPreroll = spyFactory('enterPreroll')\n enterPostroll = spyFactory('enterPostroll')\n\n constructor() {\n super()\n // enterPreroll/enterPostroll are awaited by the TrackController, so\n // default them to resolve with \"no roll\" (null); tests override with\n // resolveTo() as needed.\n this.enterPreroll.and.resolveTo(null)\n this.enterPostroll.and.resolveTo(null)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { type Capabilities } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<Capabilities>()\nexport class MockCapabilities implements Capabilities {\n sampleRate: number | null = null\n dash = false\n hls = false\n mse = false\n eme = false\n\n canPlayType = spyFactory('canPlayType')\n canPlayTypeMse = spyFactory('canPlayTypeMse')\n supportsKeySystem = spyFactory('supportsKeySystem')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Client } from '@amazon/vinyl'\nimport { MockCapabilities } from './MockCapabilities'\n\nexport class MockClient implements Client {\n capabilities = new MockCapabilities()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Required properties on AdaptationSetType\nimport { parseDashManifest } from '@amazon/vinyl-mpd-parser'\n\nexport const mockDashManifest = parseDashManifest(\n // language=XML\n `<?xml version=\"1.0\" ?>\n<MPD profiles=\"\" minBufferTime=\"PT0.0S\" type=\"static\" xmlns=\"urn:mpeg:dash:schema:mpd:2011\">\n <Period>\n <AdaptationSet>\n <Representation id=\"0\" bandwidth=\"0\"/>\n </AdaptationSet>\n </Period>\n</MPD>`\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport type {\n DashManifestController,\n DashManifestData,\n ManifestControllerEventMap,\n} from '@amazon/vinyl'\nimport {\n type EventHandler,\n EventHostImpl,\n type SignalOptions,\n} from '@amazon/vinyl-util'\nimport { data } from '@amazon/vinyl-observable'\nimport { mockDashManifest } from './mockDashManifest'\n\nconst spyFactory = createSpyFactory<DashManifestController>()\n\n/**\n * Mock implementation of DashManifestController.\n *\n * Uses a real MutableValue internally so that map/pick/onData work correctly.\n */\nexport class MockDashManifestController implements DashManifestController {\n private readonly _data = data<Promise<DashManifestData>>(\n Promise.resolve({\n manifest: mockDashManifest,\n baseUrl: 'https://example.com',\n })\n )\n private readonly events = new EventHostImpl<ManifestControllerEventMap>()\n\n refresh = spyFactory('refresh')\n reset = spyFactory('reset')\n\n on<K extends keyof ManifestControllerEventMap>(\n type: K,\n handler: EventHandler<ManifestControllerEventMap[K]>,\n options?: SignalOptions\n ) {\n return this.events.on(type, handler, options)\n }\n\n dispatch<K extends keyof ManifestControllerEventMap>(\n type: K,\n event: ManifestControllerEventMap[K]\n ) {\n this.events.dispatch(type, event)\n }\n\n hasAnyListeners() {\n return this.events.hasAnyListeners()\n }\n\n hasListeners(type: keyof ManifestControllerEventMap) {\n return this.events.hasListeners(type)\n }\n\n readonly __eventMapType = this.events.__eventMapType\n\n get value() {\n return this._data.value\n }\n\n get changeId() {\n return this._data.changeId\n }\n\n getValue() {\n return this._data.getValue()\n }\n\n onData(\n callback: (\n value: Promise<DashManifestData>,\n previous: Promise<DashManifestData> | undefined\n ) => void\n ) {\n return this._data.onData(callback)\n }\n\n map<U>(transform: (value: Promise<DashManifestData>) => U) {\n return this._data.map(transform)\n }\n\n pick<K extends keyof NonNullable<Promise<DashManifestData>>>(prop: K) {\n return this._data.pick(prop)\n }\n\n setManifest(manifest: Promise<DashManifestData>) {\n this._data.value = manifest\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MockEvent } from '@amazon/vinyl-util/browserTestUtil'\n\nexport class MockMSMediaKeyError extends MockEvent implements MSMediaKeyError {\n static readonly MS_MEDIA_KEYERR_CLIENT = 1\n static readonly MS_MEDIA_KEYERR_DOMAIN = 2\n static readonly MS_MEDIA_KEYERR_HARDWARECHANGE = 3\n static readonly MS_MEDIA_KEYERR_OUTPUT = 4\n static readonly MS_MEDIA_KEYERR_SERVICE = 5\n static readonly MS_MEDIA_KEYERR_UNKNOWN = 6\n\n code: number = 0\n systemCode: number = 0\n\n constructor() {\n super()\n this.type = 'mskeyerror'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { MSMediaKeyMessageEvent } from '@amazon/vinyl'\nimport { MockEvent } from '@amazon/vinyl-util/browserTestUtil'\n\nexport class MockMSMediaKeyMessageEvent\n extends MockEvent\n implements MSMediaKeyMessageEvent\n{\n message = new Uint8Array(0)\n\n constructor() {\n super()\n this.type = 'mskeymessage'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DrmKeySystem } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<typeof MSMediaKeys & MSMediaKeys>()\n\nexport class MockMSMediaKeys implements MSMediaKeys {\n constructor(readonly keySystem: DrmKeySystem) {}\n\n createSession = spyFactory('createSession')\n\n static isTypeSupported = spyFactory('isTypeSupported')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n createSpyFactory,\n MockEventTarget,\n} from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<MSMediaKeySession>()\nexport class MockMSMediaKeySession\n extends MockEventTarget\n implements MSMediaKeySession\n{\n error: MSMediaKeyError | null = null\n keySystem = ''\n onmskeyadded = null\n onmskeyerror = null\n onmskeymessage = null\n sessionId = ''\n\n close = spyFactory('close')\n\n update = spyFactory('update')\n\n addEventListener = spyFactory('addEventListener')\n\n dispatchEvent = spyFactory('dispatchEvent')\n\n removeEventListener = spyFactory('removeEventListener')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MockEvent } from '@amazon/vinyl-util/browserTestUtil'\n\nexport class MockWebKitMediaKeyError\n extends MockEvent\n implements WebKitMediaKeyError\n{\n static readonly MEDIA_KEYERR_UNKNOWN = 1\n static readonly MEDIA_KEYERR_CLIENT = 2\n static readonly MEDIA_KEYERR_SERVICE = 3\n static readonly MEDIA_KEYERR_OUTPUT = 4\n static readonly MEDIA_KEYERR_HARDWARECHANGE = 5\n static readonly MEDIA_KEYERR_DOMAIN = 6\n code: number = 0\n systemCode: number = 0\n\n constructor() {\n super()\n this.type = 'webkitkeyerror'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { WebKitMediaKeyMessageEvent } from '@amazon/vinyl'\nimport { MockEvent } from '@amazon/vinyl-util/browserTestUtil'\n\nexport class MockWebKitMediaKeyMessageEvent\n extends MockEvent\n implements WebKitMediaKeyMessageEvent\n{\n message = new Uint8Array(0)\n\n constructor() {\n super()\n this.type = 'webkitkeymessage'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DrmKeySystem } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<typeof WebKitMediaKeys & WebKitMediaKeys>()\n\nexport class MockWebKitMediaKeys implements WebKitMediaKeys {\n constructor(public readonly keySystem: DrmKeySystem) {}\n\n createSession = spyFactory('createSession')\n\n static isTypeSupported = spyFactory('isTypeSupported')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n MockEventTarget,\n createSpyFactory,\n} from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<WebKitMediaKeySession>()\nexport class MockWebKitMediaKeySession\n extends MockEventTarget\n implements WebKitMediaKeySession\n{\n error: WebKitMediaKeyError | null = null\n keySystem = ''\n onwebkitkeyadded = null\n onwebkitkeyerror = null\n onwebkitkeymessage = null\n sessionId = ''\n\n close = spyFactory('close')\n\n update = spyFactory('update')\n\n addEventListener = spyFactory('addEventListener')\n\n dispatchEvent = spyFactory('dispatchEvent')\n\n removeEventListener = spyFactory('removeEventListener')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { overrideGlobalInit } from '@amazon/vinyl-util/testUtil'\nimport { mediaKeySupportRef } from '@amazon/vinyl'\n\n/**\n * Overrides media key support.\n */\nexport function useWebKitMediaKeys(present: boolean): void {\n overrideGlobalInit(mediaKeySupportRef, () => {\n return {\n webkitEme: present,\n standardEme: false,\n msEme: false,\n }\n })\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CommonEme } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<CommonEme>()\n\nexport class MockCommonEme implements CommonEme {\n requestMediaKeySystemAccess = spyFactory('requestMediaKeySystemAccess')\n\n addEncryptedListener = spyFactory('addEncryptedListener')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { type CommonMediaKeys, DrmKeySystem } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<CommonMediaKeys>()\nexport class MockCommonMediaKeys implements CommonMediaKeys {\n keySystem: DrmKeySystem = DrmKeySystem.CLEAR_KEY\n clearFromElement = spyFactory('clearFromElement')\n createSession = spyFactory('createSession')\n setOnElement = spyFactory('setOnElement')\n setServerCertificate = spyFactory('setServerCertificate')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DrmInitDataType } from '@amazon/vinyl'\nimport {\n type CommonMediaKeySession,\n type CommonMediaKeySessionEventMap,\n type EncryptedInitData,\n} from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<CommonMediaKeySession>()\nexport class MockCommonMediaKeySession\n extends MockEventHost<CommonMediaKeySessionEventMap>\n implements CommonMediaKeySession\n{\n initData: EncryptedInitData = new ArrayBuffer(0)\n initDataType: DrmInitDataType = 'cenc'\n mimeType = ''\n disposed = false\n\n update = spyFactory('update')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DrmKeySystem } from '@amazon/vinyl'\nimport { type CommonMediaKeySystemAccess } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<CommonMediaKeySystemAccess>()\n\nexport class MockCommonMediaKeySystemAccess implements CommonMediaKeySystemAccess {\n constructor(public keySystem: DrmKeySystem) {}\n\n createMediaKeys = spyFactory('createMediaKeys')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DrmController, DrmControllerEventMap } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<DrmController>()\nexport class MockDrmController\n extends MockEventHost<DrmControllerEventMap>\n implements DrmController\n{\n error: Error | null = null\n\n configure = spyFactory('configure')\n isEmeSupported = spyFactory('isEmeSupported')\n isSupported = spyFactory('isSupported')\n initializeForPlayback = spyFactory('initializeForPlayback')\n setBufferingDrmInfo = spyFactory('setBufferingDrmInfo')\n closeSessions = spyFactory('closeSessions')\n reset = spyFactory('reset')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n HlsMainPlaylist,\n HlsMediaPlaylist,\n} from '@amazon/vinyl-hls-parser'\nimport type { HlsManifestData } from '@amazon/vinyl'\n\nexport const mockMediaPlaylist: HlsMediaPlaylist = {\n version: 7,\n targetDuration: 6,\n mediaSequence: 1,\n playlistType: 'VOD',\n ended: true,\n segments: [\n {\n uri: 'segment0.mp4',\n duration: 6,\n sequenceNumber: 1,\n discontinuity: false,\n map: { uri: 'init.mp4' },\n },\n {\n uri: 'segment1.mp4',\n duration: 6,\n sequenceNumber: 2,\n discontinuity: false,\n map: { uri: 'init.mp4' },\n },\n ],\n dateRanges: [],\n}\n\nexport const mockMainPlaylist: HlsMainPlaylist = {\n variants: [\n {\n bandwidth: 500000,\n uri: 'low/prog_index.m3u8',\n codecs: 'avc1.640015,mp4a.40.2',\n width: 480,\n height: 270,\n frameRate: 30,\n audioGroup: 'aud1',\n },\n {\n bandwidth: 1000000,\n uri: 'high/prog_index.m3u8',\n codecs: 'avc1.64001e,mp4a.40.2',\n width: 640,\n height: 360,\n frameRate: 30,\n audioGroup: 'aud1',\n },\n ],\n alternativeRenditions: [\n {\n type: 'AUDIO',\n groupId: 'aud1',\n name: 'English',\n uri: 'audio/prog_index.m3u8',\n language: 'en',\n default: true,\n autoSelect: true,\n },\n ],\n sessionData: [],\n}\n\nexport const mockHlsManifestData: HlsManifestData = {\n mainPlaylist: mockMainPlaylist,\n baseUrl: 'https://example.com/main.m3u8',\n getMediaPlaylist: () => Promise.resolve(mockMediaPlaylist),\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport type {\n HlsManifestController,\n HlsManifestData,\n ManifestControllerEventMap,\n} from '@amazon/vinyl'\nimport {\n type EventHandler,\n EventHostImpl,\n type SignalOptions,\n} from '@amazon/vinyl-util'\nimport { data } from '@amazon/vinyl-observable'\nimport { mockHlsManifestData } from './mockHlsManifest'\n\nconst spyFactory = createSpyFactory<HlsManifestController>()\n\n/**\n * Mock implementation of HlsManifestController.\n *\n * Uses a real MutableValue internally so that map/pick/onData work correctly.\n */\nexport class MockHlsManifestController implements HlsManifestController {\n private readonly _data = data<Promise<HlsManifestData>>(\n Promise.resolve(mockHlsManifestData)\n )\n private readonly events = new EventHostImpl<ManifestControllerEventMap>()\n\n refresh = spyFactory('refresh')\n reset = spyFactory('reset')\n\n on<K extends keyof ManifestControllerEventMap>(\n type: K,\n handler: EventHandler<ManifestControllerEventMap[K]>,\n options?: SignalOptions\n ) {\n return this.events.on(type, handler, options)\n }\n\n hasAnyListeners() {\n return this.events.hasAnyListeners()\n }\n\n hasListeners(type: keyof ManifestControllerEventMap) {\n return this.events.hasListeners(type)\n }\n\n readonly __eventMapType = this.events.__eventMapType\n\n get value() {\n return this._data.value\n }\n\n get changeId() {\n return this._data.changeId\n }\n\n getValue() {\n return this._data.getValue()\n }\n\n onData(\n callback: (\n value: Promise<HlsManifestData>,\n previous: Promise<HlsManifestData> | undefined\n ) => void\n ) {\n return this._data.onData(callback)\n }\n\n map<U>(transform: (value: Promise<HlsManifestData>) => U) {\n return this._data.map(transform)\n }\n\n pick<K extends keyof NonNullable<Promise<HlsManifestData>>>(prop: K) {\n return this._data.pick(prop)\n }\n\n setManifest(manifest: Promise<HlsManifestData>) {\n this._data.value = manifest\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { HistoryLogHandler, HistoryLogItem } from '@amazon/vinyl-util'\nimport { LogLevel } from '@amazon/vinyl-util'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<HistoryLogHandler>()\nexport class MockHistoryLogHandler implements HistoryLogHandler {\n logLevel: LogLevel = LogLevel.DEBUG\n maxHistorySize = 0\n history: HistoryLogItem[] = []\n clear = spyFactory('clear')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n LoudnessNormalizationController,\n LoudnessNormalizationControllerEventMap,\n} from '@amazon/vinyl'\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<LoudnessNormalizationController>()\n\nexport class MockLoudnessNormalizationController\n extends MockEventHost<LoudnessNormalizationControllerEventMap>\n implements LoudnessNormalizationController\n{\n gain = 1.0\n setTrackLoudness = spyFactory('setTrackLoudness')\n clear = spyFactory('clear')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n PlaybackController,\n PlaybackControllerEventMap,\n} from '@amazon/vinyl'\nimport { PlaybackNetworkState, PlaybackReadyState } from '@amazon/vinyl'\nimport { RangesImpl } from '@amazon/vinyl-util'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<PlaybackController>()\n\nexport class MockPlaybackController\n extends MockEventHost<PlaybackControllerEventMap>\n implements PlaybackController\n{\n buffered = new RangesImpl()\n canPlay = false\n canPlayThrough = false\n currentTime = 0\n currentTimePercent = 0\n defaultPlaybackRate = 0\n duration = 0\n ended = false\n error: Error | null = null\n hasMetadata = false\n loop = false\n muted = false\n networkState: PlaybackNetworkState = PlaybackNetworkState.NETWORK_IDLE\n pause = spyFactory('pause')\n paused = false\n play = spyFactory('play')\n playIsPending = false\n playbackRate = 0\n playing = false\n preservesPitch = true\n readyState: PlaybackReadyState = PlaybackReadyState.HAVE_NOTHING\n reset = spyFactory('reset')\n seekTo = spyFactory('seekTo')\n seekable = new RangesImpl()\n seeking = false\n volume = 0\n waiting = false\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CrossOrigin, PlaybackSource } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<PlaybackSource>()\nexport class MockPlaybackSource implements PlaybackSource {\n crossOrigin: CrossOrigin = null\n currentSrc = ''\n src: string | null = null\n srcObject: MediaStream | null = null\n disableRemotePlayback = false\n\n load = spyFactory('load')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n createMediaTextTrackProvider,\n type DashFactoryDeps,\n defaultVinylOptions,\n type DrmKeySystemResolver,\n type VinylDeps,\n type VinylOptions,\n type VinylTrackFactoryDeps,\n} from '@amazon/vinyl'\nimport { MockCapabilities } from '../client/MockCapabilities'\nimport { MockPlaybackController } from '../playback/MockPlaybackController'\nimport { MockPlaybackSource } from '../playback/MockPlaybackSource'\nimport { MockTrackController } from '../track/MockTrackController'\nimport { createMockDashDependencies } from '../track/dash/createMockDashDependencies'\nimport { MockDrmController } from '../drm/MockDrmController'\nimport { MockAutoResetController } from '../track/MockAutoResetController'\nimport { externalDependencies } from '@amazon/vinyl-di'\nimport { noop } from '@amazon/vinyl-util'\nimport { data } from '@amazon/vinyl-observable'\nimport { MockAdController } from '../ad/MockAdController'\nimport createSpy = jasmine.createSpy\n\nexport type MockVinylDependencies = ReturnType<\n typeof createMockVinylDependencies\n>\n\n/**\n * Creates mock dependencies for the Vinyl Player and all track factories.\n */\nexport function createMockVinylDependencies() {\n const playbackController = new MockPlaybackController()\n const media = createMockMedia()\n return {\n options: data<VinylOptions>(defaultVinylOptions),\n trackController: new MockTrackController(),\n playbackSource: new MockPlaybackSource(),\n playbackController,\n capabilities: new MockCapabilities(),\n drmController: new MockDrmController(),\n media,\n textTrackProvider: createMediaTextTrackProvider({ media }),\n textTrackRenderer: null,\n createDashFactories: (_loadOptions) =>\n externalDependencies(createMockDashDependencies()),\n createHlsFactories: (_loadOptions) =>\n externalDependencies(createMockDashDependencies()) as any,\n autoResetController: new MockAutoResetController(),\n adController: new MockAdController(),\n requestInterceptor: noop,\n drmKeySystemResolver: createSpy<DrmKeySystemResolver>(\n 'drmKeySystemResolver'\n ).and.returnValue([]),\n } as const satisfies VinylDeps & VinylTrackFactoryDeps & DashFactoryDeps\n}\n\nfunction createMockMedia(): HTMLMediaElement {\n return {\n addTextTrack(): TextTrack {\n return {\n cues: { length: 0 } as unknown as TextTrackCueList,\n mode: 'disabled',\n addCue() {},\n removeCue() {},\n } as unknown as TextTrack\n },\n } as unknown as HTMLMediaElement\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n Track,\n TrackController,\n TrackControllerEventMap,\n TrackLoadOptions,\n} from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<TrackController<any>>()\n\nexport class MockTrackController<\n TrackLoadOptionsType extends TrackLoadOptions = TrackLoadOptions,\n>\n extends MockEventHost<TrackControllerEventMap<TrackLoadOptionsType>>\n implements TrackController<TrackLoadOptionsType>\n{\n activeTrack: Track | null = null\n\n currentAdTrack: Track | null = null\n\n queue: any[] = []\n\n clearPrefetch = spyFactory('clearPrefetch')\n clearQueue = spyFactory('clearQueue')\n clearTrackCache = spyFactory('clearTrackCache')\n enqueue = spyFactory('enqueue')\n getCachedTrack = spyFactory('getCachedTrack')\n getCachedTracks = spyFactory('getCachedTracks')\n hasNext = spyFactory('hasNext')\n isTrackCached = spyFactory('isTrackCached')\n load = spyFactory('load')\n next = spyFactory('next')\n preload = spyFactory('preload')\n unload = spyFactory('unload')\n reset = spyFactory('reset')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type ContentType,\n createEmptyMediaQualityMetadata,\n type DashMediaQualityMetadataResolver,\n type DashTrackDeps,\n defaultQualitySelectorImplOptions,\n type MediaTimeline,\n type VinylOptions,\n} from '@amazon/vinyl'\nimport { MockDashManifestController } from '../../dash/MockDashManifestController'\nimport { MockMediaSourceController } from '../../streaming/buffering/MockMediaSourceController'\nimport { MockPlaybackSource } from '../../playback/MockPlaybackSource'\nimport { MockContentStream } from '../../streaming/MockContentStream'\nimport { MockPlaybackController } from '../../playback/MockPlaybackController'\nimport { MockDrmController } from '../../drm/MockDrmController'\nimport { MockTextTrackController } from '../../text/MockTextTrackController'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { data } from '@amazon/vinyl-observable'\n\nimport createSpy = jasmine.createSpy\n\nconst emptyTimeline: MediaTimeline = {\n periods: [],\n minBufferTime: 0,\n getAdBreaks: () => Promise.resolve([]),\n getDuration: () => Promise.resolve(Infinity),\n}\n\nconst spyFactory = createSpyFactory<DashTrackDeps>()\nexport function createMockDashDependencies() {\n const playbackController = new MockPlaybackController()\n playbackController.seekTo.and.resolveTo(void 0)\n\n const manifestController = new MockDashManifestController()\n\n return {\n textTrackController: new MockTextTrackController(),\n contentTypesValue: data(Promise.resolve(new Set<ContentType>())),\n contentStreamFactory: spyFactory('contentStreamFactory').and.callFake(\n (contentType) => {\n const stream = new MockContentStream()\n stream.contentType = contentType\n return stream\n }\n ),\n manifestController,\n manifestTransformed: manifestController,\n mediaTimeline: data(Promise.resolve(emptyTimeline)),\n mediaTimelineTransformed: data(Promise.resolve(emptyTimeline)),\n mediaSourceController: new MockMediaSourceController(),\n playbackSource: new MockPlaybackSource(),\n playbackController,\n drmController: new MockDrmController(),\n mediaQualityMetadataResolver:\n createSpy<DashMediaQualityMetadataResolver>().and.callFake(() =>\n createEmptyMediaQualityMetadata()\n ),\n audio: data<VinylOptions['audio']>({\n selection: { language: null, descriptive: false },\n }),\n allowedContentTypes: data<VinylOptions['allowedContentTypes']>(null),\n abr: data<VinylOptions['abr']>(defaultQualitySelectorImplOptions),\n } as const satisfies DashTrackDeps\n}\n\nexport type MockDashDependencies = ReturnType<typeof createMockDashDependencies>\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport {\n type MediaSourceController,\n type MediaSourceControllerEventMap,\n} from '@amazon/vinyl'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<MediaSourceController>()\n\nexport class MockMediaSourceController\n extends MockEventHost<MediaSourceControllerEventMap>\n implements MediaSourceController\n{\n readyState: ReadyState = 'closed'\n createSourceBuffer = spyFactory('createSourceBuffer')\n endOfStream = spyFactory('endOfStream')\n activate = spyFactory('activate')\n deactivate = spyFactory('deactivate')\n readyToAppend = false\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n ContentStream,\n ContentType,\n MediaQualityMetadata,\n StreamingEventMap,\n} from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\nimport { RangesImpl } from '@amazon/vinyl-util'\n\nconst spyFactory = createSpyFactory<ContentStream>()\n\nexport class MockContentStream\n extends MockEventHost<StreamingEventMap>\n implements ContentStream\n{\n contentType: ContentType = 'audio'\n bufferingQuality: MediaQualityMetadata | null = null\n error: Error | null = null\n fetchedRanges = new RangesImpl()\n playbackQuality: MediaQualityMetadata | null = null\n streamingQuality: MediaQualityMetadata | null = null\n bufferingEnded = false\n\n clearPrefetch = spyFactory('clearPrefetch')\n\n activate = spyFactory('activate')\n\n deactivate = spyFactory('deactivate')\n\n preload = spyFactory('preload')\n\n reset = spyFactory('reset')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TextTrackController, TextTrackInfo } from '../../../../src'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<TextTrackController>()\n\nexport class MockTextTrackController\n extends MockEventHost\n implements TextTrackController\n{\n textTracks: readonly TextTrackInfo[] = []\n activeTextTrack: TextTrackInfo | null = null\n active = false\n\n deactivate = spyFactory('deactivate')\n activate = spyFactory('activate')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AutoResetController,\n AutoResetControllerEventMap,\n} from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<AutoResetController>()\nexport class MockAutoResetController\n extends MockEventHost<AutoResetControllerEventMap>\n implements AutoResetController\n{\n setError = spyFactory('setError')\n clear = spyFactory('clear')\n resetPending = false\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport type { QualitySelector } from '@amazon/vinyl'\n\nconst spyFactory = createSpyFactory<QualitySelector>()\n\nexport class MockQualitySelector implements QualitySelector {\n selectQuality = spyFactory('selectQuality')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport type {\n BufferingController,\n BufferingControllerEventMap,\n MediaQualityMetadata,\n} from '@amazon/vinyl'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<BufferingController>()\n\nexport class MockBufferingController\n extends MockEventHost<BufferingControllerEventMap>\n implements BufferingController\n{\n error: Error | null = null\n active = false\n bufferingEnded = false\n playbackQuality: MediaQualityMetadata | null = null\n bufferingQuality: MediaQualityMetadata | null = null\n activate = spyFactory('activate')\n deactivate = spyFactory('deactivate')\n clear = spyFactory('clear')\n reset = spyFactory('reset')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { type SourceBufferController } from '@amazon/vinyl'\n\nimport { RangesImpl } from '@amazon/vinyl-util'\n\nconst spyFactory = createSpyFactory<SourceBufferController>()\n\nexport class MockSourceBufferController implements SourceBufferController {\n buffered = new RangesImpl()\n\n append = spyFactory('append')\n\n appendInit = spyFactory('appendInit')\n\n clear = spyFactory('clear')\n\n enqueue = spyFactory('enqueue')\n\n isBusy = spyFactory('isBusy')\n\n remove = spyFactory('remove')\n\n setAppendWindow = spyFactory('setAppendWindow')\n\n setTimestampOffset = spyFactory('setTimestampOffset')\n\n dispose = spyFactory('dispose')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport {\n type MediaQualityMetadata,\n type SegmentController,\n type SegmentControllerEventMap,\n} from '@amazon/vinyl'\nimport { emptyRanges } from '@amazon/vinyl-util'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<SegmentController>()\n\nexport class MockSegmentController\n extends MockEventHost<SegmentControllerEventMap>\n implements SegmentController\n{\n error: Error | null = null\n\n configure = spyFactory('configure')\n\n fetchedRanges = emptyRanges\n\n activate = spyFactory('activate')\n\n clear = spyFactory('clear')\n\n deactivate = spyFactory('deactivate')\n\n getSegment = spyFactory('getSegment')\n\n streamingQuality: MediaQualityMetadata | null = null\n\n reset = spyFactory('reset')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type ContentType,\n createEmptyMediaQualityMetadata,\n defaultQualitySelectorImplOptions,\n type HlsMediaQualityMetadataResolver,\n type HlsTrackDeps,\n type MediaTimeline,\n type VinylOptions,\n} from '@amazon/vinyl'\nimport { MockHlsManifestController } from '../../hls/MockHlsManifestController'\nimport { MockMediaSourceController } from '../../streaming/buffering/MockMediaSourceController'\nimport { MockPlaybackSource } from '../../playback/MockPlaybackSource'\nimport { MockContentStream } from '../../streaming/MockContentStream'\nimport { MockPlaybackController } from '../../playback/MockPlaybackController'\nimport { MockDrmController } from '../../drm/MockDrmController'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { data } from '@amazon/vinyl-observable'\n\nimport createSpy = jasmine.createSpy\n\nconst emptyTimeline: MediaTimeline = {\n periods: [],\n minBufferTime: 0,\n getAdBreaks: () => Promise.resolve([]),\n getDuration: () => Promise.resolve(Infinity),\n}\n\nconst spyFactory = createSpyFactory<HlsTrackDeps>()\nexport function createMockHlsDependencies() {\n const playbackController = new MockPlaybackController()\n playbackController.seekTo.and.resolveTo(void 0)\n\n const manifestController = new MockHlsManifestController()\n\n return {\n contentTypesValue: data(Promise.resolve(new Set<ContentType>())),\n contentStreamFactory: spyFactory('contentStreamFactory').and.callFake(\n (contentType) => {\n const stream = new MockContentStream()\n stream.contentType = contentType\n return stream\n }\n ),\n manifestController,\n manifestTransformed: manifestController.map((v) => v),\n mediaTimeline: data(Promise.resolve(emptyTimeline)),\n mediaTimelineTransformed: data(Promise.resolve(emptyTimeline)),\n mediaSourceController: new MockMediaSourceController(),\n playbackSource: new MockPlaybackSource(),\n playbackController,\n drmController: new MockDrmController(),\n mediaQualityMetadataResolver:\n createSpy<HlsMediaQualityMetadataResolver>().and.callFake(() =>\n createEmptyMediaQualityMetadata()\n ),\n audio: data<VinylOptions['audio']>({\n selection: { language: null, descriptive: false },\n }),\n allowedContentTypes: data<VinylOptions['allowedContentTypes']>(null),\n abr: data<VinylOptions['abr']>(defaultQualitySelectorImplOptions),\n } as const satisfies HlsTrackDeps\n}\n\nexport type MockHlsDependencies = ReturnType<typeof createMockHlsDependencies>\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type AdController,\n type ContentType,\n type MediaQualityMetadata,\n type SeekRange,\n type TextTrackController,\n type Track,\n type TrackAds,\n type TrackEventMap,\n} from '@amazon/vinyl'\nimport { RangesImpl } from '@amazon/vinyl-util'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<Track>()\n\nexport class MockTrack extends MockEventHost<TrackEventMap> implements Track {\n get [Symbol.toStringTag](): string {\n return `MockTrack(${this.uri})`\n }\n\n ads: TrackAds | null = null\n\n /**\n * Resolves the track's ads. Mirrors the real async `getAds()` contract; the\n * `ads` field is the backing value (defaulting to an empty break list).\n */\n getAds(): Promise<TrackAds> {\n return Promise.resolve(this.ads ?? { trackUri: this.uri, adBreaks: [] })\n }\n\n uri = ''\n type = ''\n active = false\n fetchedRanges = new RangesImpl()\n preload = spyFactory('preload')\n contentTypes: Set<ContentType> = new Set()\n qualities: readonly MediaQualityMetadata[] | null = null\n qualitiesUnfiltered: readonly MediaQualityMetadata[] | null = null\n getStreamingQuality = spyFactory('getStreamingQuality')\n getBufferingQuality = spyFactory('getBufferingQuality')\n getPlaybackQuality = spyFactory('getPlaybackQuality')\n extra: any = undefined\n error: Error | null = null\n textTrackController: TextTrackController | null = null\n adController: AdController | null = null\n seekRange: SeekRange | null = null\n\n activate = spyFactory('activate')\n deactivate = spyFactory('deactivate')\n\n clearPrefetch = spyFactory('clearPrefetch')\n reset = spyFactory('reset')\n disposed = false\n\n /**\n * Installs fakes for activate and deactivate to set active status.\n */\n implementActivateFakes() {\n this.activate.and.callFake(() => {\n this.active = true\n })\n this.deactivate.and.callFake(() => {\n this.active = false\n })\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TrackFactory, TrackLoadOptions } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nexport class MockTrackFactory<\n TrackLoadOptionsType extends TrackLoadOptions = TrackLoadOptions,\n> implements TrackFactory<TrackLoadOptionsType> {\n private readonly spyFactory =\n createSpyFactory<TrackFactory<TrackLoadOptionsType>>()\n\n validate = this.spyFactory('validate')\n createTrack = this.spyFactory('createTrack')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n createVinylPlayer,\n type VinylDependencyOptions,\n type VinylPlayer,\n} from '@amazon/vinyl'\nimport {\n createDisposer,\n logError,\n toJson,\n type Unsubscribe,\n} from '@amazon/vinyl-util'\nimport {\n createLogPrefix,\n createRequester,\n getGlobalRegistry,\n IllegalStateError,\n logDebug,\n requesterWithRetryRef,\n RetryStrategy,\n} from '@amazon/vinyl-util'\nimport { setTestTimeout } from '@amazon/vinyl-util/browserTestUtil'\nimport { mediaRef } from './mediaRef'\n\nexport interface VinylSuiteOptions {\n /**\n * The number of seconds before the tests in this suite time out.\n * Default is 60s.\n */\n readonly timeout?: number\n\n /**\n * If true, will fail the test on error events.\n * default: true\n */\n readonly failOnError?: boolean\n}\n\nexport class VinylSuite<T extends VinylPlayer<any, any> = VinylPlayer> {\n get [Symbol.toStringTag](): string {\n return 'VinylSuite'\n }\n readonly logPrefix = createLogPrefix(this)\n\n private _player: T | null = null\n\n get player(): T {\n if (!this._player)\n throw new IllegalStateError(\n 'player cannot be accessed outside of a test'\n )\n return this._player\n }\n\n private readonly visibilityChangeHandler = () => {\n if (document.visibilityState === 'hidden') {\n fail('The window must remain visible during the tests.')\n }\n }\n\n constructor(\n /**\n * Constructs a new player.\n */\n private readonly playerFactory: () => T,\n protected readonly options?: VinylSuiteOptions\n ) {}\n\n /**\n * Initializes jasmine test setup.\n */\n init() {\n let playerSub: Unsubscribe | null = null\n setTestTimeout(this.options?.timeout ?? 60)\n beforeEach(() => {\n const { add, dispose } = createDisposer()\n playerSub = dispose\n // Browserstack's network is flaky and prone to transient drops;\n // give integ requests more retries than the production default.\n requesterWithRetryRef.set(() =>\n createRequester({\n retryOptions: { ...RetryStrategy.ONE_RETRY, retries: 3 },\n })\n )\n document.addEventListener(\n 'visibilitychange',\n this.visibilityChangeHandler\n )\n this._player = this.playerFactory()\n add(\n this._player.on('error', (e) => {\n logError(this, 'player emitted error event', toJson(e))\n })\n )\n if (this.options?.failOnError !== false) {\n add(\n this._player.on('error', (e) => {\n fail(e.error)\n })\n )\n }\n })\n\n afterEach(() => {\n logDebug(this, 'disposing')\n if (playerSub) playerSub()\n this._player?.dispose()\n this._player = null\n document.removeEventListener(\n 'visibilitychange',\n this.visibilityChangeHandler\n )\n getGlobalRegistry().reset()\n })\n }\n}\n\n/**\n * Prepares an integration test for a Vinyl Player.\n * This will create a player, handle disposal and global cleanup, and watch for window\n * visibility changes, which can interfere with test results.\n */\nexport function createVinylSuite(\n playerDependencyOptions?: Partial<VinylDependencyOptions>,\n options?: VinylSuiteOptions\n): VinylSuite {\n const suite = new VinylSuite(() => {\n return createVinylPlayer({\n ...playerDependencyOptions,\n media: mediaRef.value,\n })\n }, options)\n suite.init()\n return suite\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type ChangeEvent,\n nextHasMetadata,\n type ReadonlyPlaybackController,\n} from '@amazon/vinyl'\nimport { nextEventAsPromise } from '@amazon/vinyl-util'\n\n/**\n * Waits until the playbackController is in a playing state.\n *\n * @param playbackController The playbackController reference. Can be the player.\n * @param timeout The timeout (in seconds) before the promise will reject with a timeout.\n */\nexport async function onPlaying(\n playbackController: ReadonlyPlaybackController,\n timeout = 30\n): Promise<void> {\n if (playbackController.playing) return Promise.resolve()\n return nextEventAsPromise(playbackController, 'playing', {\n timeout,\n timeoutMessage: 'playing timed out after {time}s',\n }).then(() => void 0)\n}\n\n/**\n * Resolves when the playbackController has enough data to play audio without stopping.\n *\n * @param playbackController The playbackController reference. Can be the player.\n * @param timeout The timeout (in seconds) before the promise will reject with a timeout.\n */\nexport async function onCanPlayThrough(\n playbackController: ReadonlyPlaybackController,\n timeout = 20\n): Promise<void> {\n if (playbackController.canPlayThrough) return Promise.resolve()\n return nextEventAsPromise(playbackController, 'canPlayThrough', {\n timeout,\n timeoutMessage: 'canPlayThrough timed out after {time}s',\n }).then(() => void 0)\n}\n\n/**\n * Returns a promise that resolves when the playbackController is next in an 'ended' state.\n *\n * @param playbackController The playbackController reference. Can be the player.\n * @param timeout The timeout beyond the remaining track time in which the promise will be\n * rejected with a timeout error.\n * @param metadataTimeout The timeout to await metadata, if metadata is not currently loaded.\n */\nexport async function onEnded(\n playbackController: ReadonlyPlaybackController,\n timeout = 10,\n metadataTimeout = 10\n): Promise<void> {\n if (playbackController.ended) return Promise.resolve()\n await nextHasMetadata(playbackController, { timeout: metadataTimeout })\n return nextEventAsPromise(playbackController, 'ended', {\n // Set the timeout to be the remaining track duration plus a large margin of error for stalls and seek\n // inaccuracy.\n timeout:\n playbackController.duration -\n playbackController.currentTime +\n timeout,\n timeoutMessage: 'ended timed out after {time}s',\n }).then(() => void 0)\n}\n\n/**\n * Returns a promise that resolves after the next 'timeUpdate' event.\n *\n * @param playbackController The playbackController reference. Can be the player.\n * @param timeout The timeout (in seconds) before the promise will reject with a timeout.\n */\nexport function onTimeUpdate(\n playbackController: ReadonlyPlaybackController,\n timeout = 10\n): Promise<ChangeEvent<number>> {\n return nextEventAsPromise(playbackController, 'timeUpdate', {\n timeout,\n timeoutMessage: 'timeUpdate timed out after {time}s',\n })\n}\n\n/**\n * Returns a promise that resolves when the duration is non-zero.\n *\n * @param playbackController The playbackController reference. Can be the player.\n * @param timeout The timeout (in seconds) before the promise will reject with a timeout.\n */\nexport function onDuration(\n playbackController: ReadonlyPlaybackController,\n timeout = 10\n): Promise<void> {\n if (playbackController.duration > 0) return Promise.resolve()\n return nextEventAsPromise(playbackController, 'durationChange', {\n timeout,\n timeoutMessage: 'durationChange timed out after {time}s',\n }).then(() => void 0)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getMinSeekableBufferDefault, type VinylPlayer } from '@amazon/vinyl'\nimport { noop } from '@amazon/vinyl-util'\nimport { createDisposer } from '@amazon/vinyl-util'\nimport { closeTo } from '@amazon/vinyl-util'\nimport { clamp } from '@amazon/vinyl-util'\nimport { createEventSpy } from '@amazon/vinyl-util/testUtil'\nimport {\n expectPausedState,\n expectPlayingState,\n expectTimeDoesNotElapse,\n expectTimeElapses,\n} from './playbackStateExpectations'\nimport { onPlaying } from './eventPromises'\nimport { assertFrequency } from '../../media/FrequencyAnalyzer'\n\nexport async function expectTrackCanSeekTo(player: VinylPlayer, time: number) {\n const tolerance = 0.5\n const { dispose, add } = createDisposer()\n const playedSpy = add(createEventSpy(player, 'played'))\n const seekingSpy = add(createEventSpy(player, 'seeking'))\n const seekedSpy = add(createEventSpy(player, 'seeked'))\n // A seek can be re-issued (WebKit sometimes lands the play head off\n // target), producing several seeking/seeked pairs. Track order so we can\n // assert a seeking preceded the first seeked without requiring a single,\n // non-interleaved pair.\n const eventOrder: string[] = []\n add(player.on('seeking', () => eventOrder.push('seeking')))\n add(player.on('seeked', () => eventOrder.push('seeked')))\n const wasPaused = player.paused\n if (player.playing) {\n seekingSpy\n .next()\n .then(() => {\n // If playing before the seek, a played event is expected.\n // Note, there may be another played event before 'seeked' on certain platforms if a playing/waiting pair\n // happens during the seek.\n expect(playedSpy).toHaveBeenCalledBefore(seekingSpy)\n })\n .catch(noop)\n }\n\n // Expected sequence during a seek:\n // played - if playing\n // seeking\n // timeUpdate\n // seeked\n // loading events such as progress, canPlay, waiting (not tested here)\n // playing - if not paused and can play from new position\n const expectNoop = closeTo(player.currentTime, time, tolerance)\n await player.seekTo(time, tolerance)\n\n // The end-of-range seek buffer is reserved only while playing (so playback\n // can resume near the end); a paused seek lands right up to the range end.\n const expectedTime = clamp(\n time,\n 0,\n player.duration - (wasPaused ? 0 : getMinSeekableBufferDefault())\n )\n // Needs a large tolerance; browser implementations of seek may be imprecise.\n expect(player.currentTime).toBeCloseToWithin(expectedTime, 1)\n\n if (expectNoop) {\n // Seek expected to no-op\n expect(seekingSpy).not.toHaveBeenCalled()\n expect(seekedSpy).not.toHaveBeenCalled()\n } else {\n // Event expectations:\n // If playing before seekTo: played, seeking, seeked\n // If paused: seeking, seeked.\n // A seeking must precede the first seeked (re-issued seeks allowed).\n expect(eventOrder[0]).withContext('first seek event').toBe('seeking')\n\n expect(player.paused).withContext('paused').toBe(wasPaused)\n if (wasPaused) {\n expectPausedState(player)\n await expectTimeDoesNotElapse(player)\n } else {\n // If the track was not paused and the new seek position can be played from, then\n // expect that playback resumes\n await onPlaying(player)\n expectPlayingState(player)\n await assertFrequency()\n await expectTimeElapses(player)\n }\n }\n\n dispose()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ReadonlyPlaybackController } from '@amazon/vinyl'\nimport { sleep } from '@amazon/vinyl-util'\nimport { nextEventAsPromise } from '@amazon/vinyl-util'\nimport { closeTo } from '@amazon/vinyl-util'\nimport { expectNothing } from '@amazon/vinyl-util/browserTestUtil'\n\n/**\n * Expects that the play head does not progress from the current time.\n * This is done with some flexibility; iOS for example after a pause may take some time to settle.\n */\nexport async function expectTimeDoesNotElapse(\n player: ReadonlyPlaybackController\n) {\n const startTime = player.currentTime\n await sleep(0.5)\n if (closeTo(player.currentTime, startTime, 0.1)) {\n // After a short delay, time did not change.\n expectNothing()\n } else {\n // Increase the tolerance and wait longer.\n await sleep(2)\n expect(player.currentTime)\n .withContext('expectTimeDoesNotElapse')\n .toBeCloseToWithin(startTime, 0.3)\n }\n}\n\n/**\n * Expects that time progresses at least 0.5s within a timeout.\n */\nexport async function expectTimeElapses(player: ReadonlyPlaybackController) {\n // Waiting a set amount of time and querying currentTime is unreliable, even after\n // awaiting canPlayThrough.\n // Instead, assert that currentTime progresses within a time window.\n const minTimeDelta = 0.5\n const startTime = player.currentTime\n await nextEventAsPromise(player, 'timeUpdate', {\n filter: () => player.currentTime > startTime + minTimeDelta,\n timeout: 4,\n timeoutMessage: `currentTime did not progress at least ${minTimeDelta}s after {time} seconds.`,\n })\n}\n\n/**\n * Expects the player to be in a paused state.\n */\nexport function expectPausedState(player: ReadonlyPlaybackController) {\n expect(player.paused).withContext('paused').toBeTrue()\n expect(player.playing).withContext('not playing').toBeFalse()\n}\n\n/**\n * Expects the player to be in a playing state.\n */\nexport function expectPlayingState(player: ReadonlyPlaybackController) {\n expect(player.playIsPending).withContext('not pending play').toBeFalse()\n expect(player.paused).withContext('not paused').toBeFalse()\n expect(player.playing).withContext('playing').toBeTrue()\n}\n\n/**\n * Expects the current state to be pending play.\n */\nexport function expectPendingPlaying(player: ReadonlyPlaybackController) {\n expect(player.playIsPending).withContext('pending play').toBeTrue()\n expect(player.playing).withContext('pending, not playing').toBeFalse()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { VinylPlayer } from '@amazon/vinyl'\nimport { type TrackLoadOptions } from '@amazon/vinyl'\nimport { createDisposer } from '@amazon/vinyl-util'\nimport { createEventSpy } from '@amazon/vinyl-util/testUtil'\nimport { onDuration } from './eventPromises'\nimport { expectTrackPlaysUntil } from './expectTrackPlaysUntil'\n\n/**\n * The total amount of time to allow playback for a play test.\n * Plays for PLAYBACK_DURATION / 2, seeks to duration - PLAYBACK_DURATION / 2 and finishes the\n * track.\n */\nconst PLAYBACK_DURATION = 6\n\nexport async function expectTrackPlays(\n player: VinylPlayer<any>\n): Promise<void> {\n const { dispose, add } = createDisposer()\n const ended = add(createEventSpy(player, 'ended'))\n const timeUpdate = add(createEventSpy(player, 'timeUpdate'))\n expect(player.currentTime)\n .withContext('currentTime starts near the beginning')\n .toBeLessThan(1)\n await onDuration(player) // Wait for duration to be non-zero\n const duration = player.duration\n expect(duration)\n .withContext('duration should be non-zero')\n .toBeGreaterThan(0)\n\n if (player.duration > PLAYBACK_DURATION) {\n // For longer tracks, play from the beginning, then seek to near the end\n // All tracks will play for at most PLAYBACK_DURATION seconds.\n await expectTrackPlaysUntil(\n player,\n player.currentTime + PLAYBACK_DURATION / 2\n )\n const time = player.duration - PLAYBACK_DURATION / 2\n await player.seekTo(time)\n }\n\n // Expect that playback continues until the end of the track.\n // Do not use expectTrackPlaysUntil; if there is another track in the queue\n // the expectation will fail due to the next track starting.\n // Add a large buffer for the timeout; Seeking in a progressive track\n // can take a long time on some browsers.\n await ended.next(PLAYBACK_DURATION + 10)\n expect(player.currentTime).toBeCloseToWithin(duration, 3)\n expect(player.ended).withContext('ended').toBeTrue()\n // Expect at least one update per second. This varies among platforms.\n expect(timeUpdate.calls.count()).toBeGreaterThanOrEqual(\n Math.floor(PLAYBACK_DURATION)\n )\n dispose()\n}\n\n/**\n * Asserts that every track in a playlist plays.\n * Has assertions for queue events, playback events, time updates, duration,\n * track changes.\n *\n * @param player\n * @param playlist\n */\nexport async function expectPlaylistPlays<T extends TrackLoadOptions>(\n player: VinylPlayer<T>,\n playlist: T[]\n): Promise<void> {\n const { dispose, add } = createDisposer()\n // Add a significant buffer to the timeout; progressive tracks can take a long time to load after a seek.\n const trackTimeout = PLAYBACK_DURATION + 60 // Timeout to give each track\n const queueEnded = add(createEventSpy(player, 'queueEnded'))\n const queueChange = add(createEventSpy(player, 'queueChange'))\n const trackChange = add(createEventSpy(player, 'trackActivated'))\n function assertQueueChangeCount(count: number) {\n expect(queueChange).toHaveBeenCalledTimes(count)\n queueChange.calls.reset()\n }\n player.load(...playlist)\n assertQueueChangeCount(1)\n\n await player.play()\n for (let i = 0; i < playlist.length; i++) {\n const isLastTrack = i === playlist.length - 1\n expect(player.activeTrack?.uri)\n .withContext('activeTrack uri')\n .toBe(playlist[i].uri)\n const nextTrack = isLastTrack\n ? queueEnded.next(trackTimeout)\n : trackChange.next(trackTimeout)\n await expectTrackPlays(player)\n await nextTrack\n assertQueueChangeCount(isLastTrack ? 0 : 1)\n }\n dispose()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { onPlaying, onTimeUpdate } from './eventPromises'\nimport { assertFrequency } from '../../media/FrequencyAnalyzer'\nimport type { ReadonlyPlaybackController } from '@amazon/vinyl'\nimport { sleep } from '@amazon/vinyl-util'\n\nconst sleepInterval = 1\nconst affordanceBefore = 1\nconst affordanceAfter = 3\n\n/**\n * Plays until a given end time. If the end time is not reached in an acceptable\n * time frame, the test fails.\n *\n * @param player\n * @param endTime\n * @param timeout A timeout beyond the expected amount of time to play.\n * This does not affect waiting for ready state.\n */\nexport async function expectTrackPlaysUntil(\n player: ReadonlyPlaybackController,\n endTime: number,\n timeout = 20\n) {\n await onPlaying(player)\n // Safari does not always have an updated currentTime after a seeked event. Await the next time update before\n // asserting currentTime values.\n await onTimeUpdate(player)\n // The playhead may already be at or past endTime when playback resumes\n // from a seek or track reload. Only require forward progress (and bound the\n // overshoot) when playback actually started before endTime; otherwise the\n // target is already satisfied.\n const startedBeforeEnd = player.currentTime < endTime\n await assertFrequency()\n\n let elapsed = 0\n const maxTime = endTime - player.currentTime + timeout\n while (!player.ended && player.currentTime < endTime && elapsed < maxTime) {\n await sleep(sleepInterval)\n elapsed += sleepInterval\n }\n expect(player.currentTime)\n .withContext('currentTime')\n .toBeGreaterThanOrEqual(endTime - affordanceBefore)\n if (startedBeforeEnd) {\n expect(player.currentTime)\n .withContext('currentTime')\n .toBeLessThan(endTime + affordanceAfter)\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAUO,IAAM,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACClC,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACDzB,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEzB,IAAM,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
6
- "names": ["data", "_a", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "spyFactory", "createSpyFactory", "MockEvent", "MockEvent", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "spyFactory", "createSpyFactory", "MockEvent", "MockEvent", "MockEvent", "MockEvent", "createSpyFactory", "spyFactory", "createSpyFactory", "MockEventTarget", "createSpyFactory", "spyFactory", "createSpyFactory", "MockEventTarget", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "EventHostImpl", "data", "spyFactory", "createSpyFactory", "data", "EventHostImpl", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "MockEventHost", "RangesImpl", "spyFactory", "createSpyFactory", "MockEventHost", "RangesImpl", "MockEventHost", "createSpyFactory", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "data", "spyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "noop", "data", "createSpy", "data", "noop", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "RangesImpl", "spyFactory", "createSpyFactory", "RangesImpl", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createEmptyMediaQualityMetadata", "defaultQualitySelectorImplOptions", "createSpyFactory", "data", "createSpy", "emptyTimeline", "spyFactory", "createEmptyMediaQualityMetadata", "defaultQualitySelectorImplOptions", "RangesImpl", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "RangesImpl", "_a", "createSpyFactory", "createSpyFactory", "createLogPrefix", "IllegalStateError", "logDebug", "createLogPrefix", "IllegalStateError", "_a", "logDebug", "noop", "createDisposer", "closeTo", "sleep", "nextEventAsPromise", "createDisposer", "noop", "closeTo", "createDisposer", "createEventSpy", "sleep", "createDisposer", "createEventSpy", "_a"]
3
+ "sources": ["../../test/vinylTestUtil/assets/dash_personalizedResponse.ts", "../../test/vinylTestUtil/assets/dash_segmentBase.ts", "../../test/vinylTestUtil/assets/dash_segmentList.ts", "../../test/vinylTestUtil/assets/dash_segmentListMediaRange.ts", "../../test/vinylTestUtil/assets/vinylTestAssets.ts", "../../test/vinylTestUtil/media/FrequencyAnalyzer.ts", "../../test/vinylTestUtil/player/mediaRef.ts", "../../test/vinylTestUtil/media/unlockMediaElement.ts", "../../test/vinylTestUtil/ui/requireUserInteraction.ts", "../../test/vinylTestUtil/mediaSource/ControlledMediaSource.ts", "../../test/vinylTestUtil/mock/ad/MockAdController.ts", "../../test/vinylTestUtil/mock/client/MockCapabilities.ts", "../../test/vinylTestUtil/mock/client/MockClient.ts", "../../test/vinylTestUtil/mock/dash/mockDashManifest.ts", "../../test/vinylTestUtil/mock/dash/MockDashManifestController.ts", "../../test/vinylTestUtil/mock/dom/ms/MockMSMediaKeyError.ts", "../../test/vinylTestUtil/mock/dom/ms/MockMSMediaKeyMessageEvent.ts", "../../test/vinylTestUtil/mock/dom/ms/MockMSMediaKeys.ts", "../../test/vinylTestUtil/mock/dom/ms/MockMSMediaKeySession.ts", "../../test/vinylTestUtil/mock/dom/webkit/MockWebKitMediaKeyError.ts", "../../test/vinylTestUtil/mock/dom/webkit/MockWebKitMediaKeyMessageEvent.ts", "../../test/vinylTestUtil/mock/dom/webkit/MockWebKitMediaKeys.ts", "../../test/vinylTestUtil/mock/dom/webkit/MockWebKitMediaKeySession.ts", "../../test/vinylTestUtil/mock/dom/webkit/useWebKitMediaKeys.ts", "../../test/vinylTestUtil/mock/drm/MockCommonEme.ts", "../../test/vinylTestUtil/mock/drm/MockCommonMediaKeys.ts", "../../test/vinylTestUtil/mock/drm/MockCommonMediaKeySession.ts", "../../test/vinylTestUtil/mock/drm/MockCommonMediaKeySystemAccess.ts", "../../test/vinylTestUtil/mock/drm/MockDrmController.ts", "../../test/vinylTestUtil/mock/hls/mockHlsManifest.ts", "../../test/vinylTestUtil/mock/hls/MockHlsManifestController.ts", "../../test/vinylTestUtil/mock/logging/MockHistoryLogHandler.ts", "../../test/vinylTestUtil/mock/playback/MockLoudnessNormalizationController.ts", "../../test/vinylTestUtil/mock/playback/MockPlaybackController.ts", "../../test/vinylTestUtil/mock/playback/MockPlaybackSource.ts", "../../test/vinylTestUtil/mock/player/MockVinylPlayerDependencies.ts", "../../test/vinylTestUtil/mock/track/MockTrackController.ts", "../../test/vinylTestUtil/mock/track/dash/createMockDashDependencies.ts", "../../test/vinylTestUtil/mock/streaming/buffering/MockMediaSourceController.ts", "../../test/vinylTestUtil/mock/streaming/MockContentStream.ts", "../../test/vinylTestUtil/mock/text/MockTextTrackController.ts", "../../test/vinylTestUtil/mock/track/MockAutoResetController.ts", "../../test/vinylTestUtil/mock/streaming/abr/MockQualitySelector.ts", "../../test/vinylTestUtil/mock/streaming/buffering/MockBufferingController.ts", "../../test/vinylTestUtil/mock/streaming/buffering/MockSourceBufferController.ts", "../../test/vinylTestUtil/mock/streaming/MockSegmentController.ts", "../../test/vinylTestUtil/mock/track/hls/createMockHlsDependencies.ts", "../../test/vinylTestUtil/mock/track/MockTrack.ts", "../../test/vinylTestUtil/mock/track/MockTrackFactory.ts", "../../test/vinylTestUtil/player/createVinylSuite.ts", "../../test/vinylTestUtil/util/playback/eventPromises.ts", "../../test/vinylTestUtil/util/playback/expectTrackCanSeek.ts", "../../test/vinylTestUtil/util/playback/playbackStateExpectations.ts", "../../test/vinylTestUtil/util/playback/expectTrackPlays.ts", "../../test/vinylTestUtil/util/playback/expectTrackPlaysUntil.ts"],
4
+ "sourcesContent": ["/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Example pulled from https://docs.aws.amazon.com/mediatailor/latest/ug/single-period-dash-manifest-example.html\n * Note: does not currently support xmlns http://www.scte.org/schemas/35/2016\n */\n// language=XML\nexport const dash_personalizedResponse = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<MPD minBufferTime=\"PT10.00S\" profiles=\"urn:mpeg:dash:profile:isoff-live:2011\" xmlns=\"urn:mpeg:dash:schema:mpd:2011\">\n <Period id=\"0.0\" start=\"PT0S\">\n <BaseURL>dash/</BaseURL>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"0\"\n startNumber=\"1\" timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48129\" t=\"74412130844415\"/>\n <S d=\"48128\" t=\"74412130892544\"/>\n <S d=\"48127\" t=\"74412130940672\"/>\n <S d=\"48129\" t=\"74412130988799\"/>\n <S d=\"48128\" t=\"74412131036928\"/>\n <S d=\"47104\" t=\"74412131085056\"/>\n <S d=\"48128\" t=\"74412131132160\"/>\n <S d=\"48127\" t=\"74412131180288\"/>\n <S d=\"48129\" t=\"74412131228415\"/>\n <S d=\"48128\" t=\"74412131276544\"/>\n <S d=\"48127\" t=\"74412131324672\"/>\n <S d=\"48129\" t=\"74412131372799\"/>\n <S d=\"48128\" t=\"74412131420928\"/>\n <S d=\"47104\" t=\"74412131469056\"/>\n <S d=\"48128\" t=\"74412131516160\"/>\n <S d=\"48127\" t=\"74412131564288\"/>\n <S d=\"48129\" t=\"74412131612415\"/>\n <S d=\"48128\" t=\"74412131660544\"/>\n <S d=\"48127\" t=\"74412131708672\"/>\n <S d=\"48129\" t=\"74412131756799\"/>\n <S d=\"48128\" t=\"74412131804928\"/>\n <S d=\"47104\" t=\"74412131853056\"/>\n <S d=\"48128\" t=\"74412131900160\"/>\n <S d=\"48127\" t=\"74412131948288\"/>\n <S d=\"48129\" t=\"74412131996415\"/>\n <S d=\"48128\" t=\"74412132044544\"/>\n <S d=\"48127\" t=\"74412132092672\"/>\n <S d=\"48129\" t=\"74412132140799\"/>\n <S d=\"48128\" t=\"74412132188928\"/>\n <S d=\"47104\" t=\"74412132237056\"/>\n <S d=\"48128\" t=\"74412132284160\"/>\n <S d=\"48127\" t=\"74412132332288\"/>\n <S d=\"48129\" t=\"74412132380415\"/>\n <S d=\"48128\" t=\"74412132428544\"/>\n <S d=\"48127\" t=\"74412132476672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"0\"\n startNumber=\"1\" timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"34\" t=\"139522745250000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252760.0_1\" start=\"PT430625H46M\">\n <BaseURL>http://d2gh0tfpz97e4o.cloudfront.net/visitalps/</BaseURL>\n <AdaptationSet bitstreamSwitching=\"false\" frameRate=\"30/1\" mimeType=\"video/mp4\" segmentAlignment=\"true\"\n startWithSAP=\"1\" subsegmentAlignment=\"true\" subsegmentStartsWithSAP=\"1\">\n <SegmentTemplate startNumber=\"1\" timescale=\"90000\"/>\n <Representation bandwidth=\"7500000\" codecs=\"avc1.640028\" height=\"1080\" id=\"1\" width=\"1920\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_1080p_10init.mp4\"\n media=\"visitalps_1080p30_video_1080p_10_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"3000000\" codecs=\"avc1.64001f\" height=\"720\" id=\"2\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_9init.mp4\"\n media=\"visitalps_1080p30_video_720p_9_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1875000\" codecs=\"avc1.64001f\" height=\"720\" id=\"3\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_8init.mp4\"\n media=\"visitalps_1080p30_video_720p_8_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"270000\" r=\"3\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1500000\" codecs=\"avc1.64001f\" height=\"540\" id=\"4\" width=\"960\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_540p_7init.mp4\"\n media=\"visitalps_1080p30_video_540p_7_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1012500\" codecs=\"avc1.64001e\" height=\"396\" id=\"5\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_6init.mp4\"\n media=\"visitalps_1080p30_video_396p_6_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"675000\" codecs=\"avc1.64001e\" height=\"396\" id=\"6\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_5init.mp4\"\n media=\"visitalps_1080p30_video_396p_5_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"450000\" codecs=\"avc1.64001e\" height=\"396\" id=\"7\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_4init.mp4\"\n media=\"visitalps_1080p30_video_396p_4_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"337500\" codecs=\"avc1.640016\" height=\"288\" id=\"8\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_3init.mp4\"\n media=\"visitalps_1080p30_video_288p_3_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"225000\" codecs=\"avc1.640016\" height=\"288\" id=\"9\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_2init.mp4\"\n media=\"visitalps_1080p30_video_288p_2_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"150000\" codecs=\"avc1.640016\" height=\"288\" id=\"10\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_1init.mp4\"\n media=\"visitalps_1080p30_video_288p_1_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet lang=\"eng\" mimeType=\"audio/mp4\" segmentAlignment=\"0\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\"/>\n <Representation audioSamplingRate=\"48000\" bandwidth=\"128000\" codecs=\"mp4a.40.2\" id=\"11\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"96000\" r=\"6\" t=\"0\"/>\n <S d=\"46368\" t=\"672000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252760.0\" start=\"PT430625H46M14.966S\">\n <BaseURL>dash/</BaseURL>\n <EventStream schemeIdUri=\"urn:scte:scte35:2014:xml+bin\" timescale=\"1\">\n <Event duration=\"24\" id=\"136\" presentationTime=\"1550252760\">\n <Signal xmlns=\"http://www.scte.org/schemas/35/2016\">\n <Binary>/DAhAAAAAAAAAP/wEAUAAACIf+9/fgAg9YDAAAAAAABiJjIs</Binary>\n </Signal>\n </Event>\n </EventStream>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"74412133198368\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48128\" t=\"74412133196544\"/>\n <S d=\"48127\" t=\"74412133244672\"/>\n <S d=\"48129\" t=\"74412133292799\"/>\n <S d=\"48128\" t=\"74412133340928\"/>\n <S d=\"47104\" t=\"74412133389056\"/>\n <S d=\"48128\" t=\"74412133436160\"/>\n <S d=\"48127\" t=\"74412133484288\"/>\n <S d=\"48129\" t=\"74412133532415\"/>\n <S d=\"48128\" t=\"74412133580544\"/>\n <S d=\"48127\" t=\"74412133628672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"139522749746940\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"9\" t=\"139522749660000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252784.0\" start=\"PT430625H46M24S\">\n <BaseURL>dash/</BaseURL>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"74412133632000\"\n startNumber=\"60\" timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48129\" t=\"74412133676799\"/>\n <S d=\"48128\" t=\"74412133724928\"/>\n <S d=\"47104\" t=\"74412133773056\"/>\n <S d=\"48128\" t=\"74412133820160\"/>\n <S d=\"48127\" t=\"74412133868288\"/>\n <S d=\"48129\" t=\"74412133916415\"/>\n <S d=\"48128\" t=\"74412133964544\"/>\n <S d=\"48127\" t=\"74412134012672\"/>\n <S d=\"48129\" t=\"74412134060799\"/>\n <S d=\"48128\" t=\"74412134108928\"/>\n <S d=\"47104\" t=\"74412134157056\"/>\n <S d=\"48128\" t=\"74412134204160\"/>\n <S d=\"48127\" t=\"74412134252288\"/>\n <S d=\"48129\" t=\"74412134300415\"/>\n <S d=\"48128\" t=\"74412134348544\"/>\n <S d=\"48127\" t=\"74412134396672\"/>\n <S d=\"48129\" t=\"74412134444799\"/>\n <S d=\"48128\" t=\"74412134492928\"/>\n <S d=\"47104\" t=\"74412134541056\"/>\n <S d=\"48128\" t=\"74412134588160\"/>\n <S d=\"48127\" t=\"74412134636288\"/>\n <S d=\"48129\" t=\"74412134684415\"/>\n <S d=\"48128\" t=\"74412134732544\"/>\n <S d=\"48127\" t=\"74412134780672\"/>\n <S d=\"48129\" t=\"74412134828799\"/>\n <S d=\"48128\" t=\"74412134876928\"/>\n <S d=\"47104\" t=\"74412134925056\"/>\n <S d=\"48128\" t=\"74412134972160\"/>\n <S d=\"48127\" t=\"74412135020288\"/>\n <S d=\"48129\" t=\"74412135068415\"/>\n <S d=\"48128\" t=\"74412135116544\"/>\n <S d=\"48127\" t=\"74412135164672\"/>\n <S d=\"48129\" t=\"74412135212799\"/>\n <S d=\"48128\" t=\"74412135260928\"/>\n <S d=\"47104\" t=\"74412135309056\"/>\n <S d=\"48128\" t=\"74412135356160\"/>\n <S d=\"48127\" t=\"74412135404288\"/>\n <S d=\"48129\" t=\"74412135452415\"/>\n <S d=\"48128\" t=\"74412135500544\"/>\n <S d=\"48127\" t=\"74412135548672\"/>\n <S d=\"48129\" t=\"74412135596799\"/>\n <S d=\"48128\" t=\"74412135644928\"/>\n <S d=\"47104\" t=\"74412135693056\"/>\n <S d=\"48128\" t=\"74412135740160\"/>\n <S d=\"48127\" t=\"74412135788288\"/>\n <S d=\"48129\" t=\"74412135836415\"/>\n <S d=\"48128\" t=\"74412135884544\"/>\n <S d=\"48127\" t=\"74412135932672\"/>\n <S d=\"48129\" t=\"74412135980799\"/>\n <S d=\"48128\" t=\"74412136028928\"/>\n <S d=\"47104\" t=\"74412136077056\"/>\n <S d=\"48128\" t=\"74412136124160\"/>\n <S d=\"48127\" t=\"74412136172288\"/>\n <S d=\"48129\" t=\"74412136220415\"/>\n <S d=\"48128\" t=\"74412136268544\"/>\n <S d=\"48127\" t=\"74412136316672\"/>\n <S d=\"48129\" t=\"74412136364799\"/>\n <S d=\"48128\" t=\"74412136412928\"/>\n <S d=\"47104\" t=\"74412136461056\"/>\n <S d=\"48128\" t=\"74412136508160\"/>\n <S d=\"48127\" t=\"74412136556288\"/>\n <S d=\"48129\" t=\"74412136604415\"/>\n <S d=\"48128\" t=\"74412136652544\"/>\n <S d=\"48127\" t=\"74412136700672\"/>\n <S d=\"48129\" t=\"74412136748799\"/>\n <S d=\"48128\" t=\"74412136796928\"/>\n <S d=\"47104\" t=\"74412136845056\"/>\n <S d=\"48128\" t=\"74412136892160\"/>\n <S d=\"48127\" t=\"74412136940288\"/>\n <S d=\"48129\" t=\"74412136988415\"/>\n <S d=\"48128\" t=\"74412137036544\"/>\n <S d=\"48127\" t=\"74412137084672\"/>\n <S d=\"48129\" t=\"74412137132799\"/>\n <S d=\"48128\" t=\"74412137180928\"/>\n <S d=\"47104\" t=\"74412137229056\"/>\n <S d=\"48128\" t=\"74412137276160\"/>\n <S d=\"48127\" t=\"74412137324288\"/>\n <S d=\"48129\" t=\"74412137372415\"/>\n <S d=\"48128\" t=\"74412137420544\"/>\n <S d=\"48127\" t=\"74412137468672\"/>\n <S d=\"48129\" t=\"74412137516799\"/>\n <S d=\"48128\" t=\"74412137564928\"/>\n <S d=\"47104\" t=\"74412137613056\"/>\n <S d=\"48128\" t=\"74412137660160\"/>\n <S d=\"48127\" t=\"74412137708288\"/>\n <S d=\"48129\" t=\"74412137756415\"/>\n <S d=\"48128\" t=\"74412137804544\"/>\n <S d=\"48127\" t=\"74412137852672\"/>\n <S d=\"48129\" t=\"74412137900799\"/>\n <S d=\"48128\" t=\"74412137948928\"/>\n <S d=\"47104\" t=\"74412137997056\"/>\n <S d=\"48128\" t=\"74412138044160\"/>\n <S d=\"48127\" t=\"74412138092288\"/>\n <S d=\"48129\" t=\"74412138140415\"/>\n <S d=\"48128\" t=\"74412138188544\"/>\n <S d=\"48127\" t=\"74412138236672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"139522750560000\"\n startNumber=\"60\" timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"95\" t=\"139522750560000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252880.0_1\" start=\"PT430625H48M\">\n <BaseURL>http://d2gh0tfpz97e4o.cloudfront.net/visitalps/</BaseURL>\n <AdaptationSet bitstreamSwitching=\"false\" frameRate=\"30/1\" mimeType=\"video/mp4\" segmentAlignment=\"true\"\n startWithSAP=\"1\" subsegmentAlignment=\"true\" subsegmentStartsWithSAP=\"1\">\n <SegmentTemplate startNumber=\"1\" timescale=\"90000\"/>\n <Representation bandwidth=\"7500000\" codecs=\"avc1.640028\" height=\"1080\" id=\"1\" width=\"1920\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_1080p_10init.mp4\"\n media=\"visitalps_1080p30_video_1080p_10_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"3000000\" codecs=\"avc1.64001f\" height=\"720\" id=\"2\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_9init.mp4\"\n media=\"visitalps_1080p30_video_720p_9_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1875000\" codecs=\"avc1.64001f\" height=\"720\" id=\"3\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_8init.mp4\"\n media=\"visitalps_1080p30_video_720p_8_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"270000\" r=\"3\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1500000\" codecs=\"avc1.64001f\" height=\"540\" id=\"4\" width=\"960\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_540p_7init.mp4\"\n media=\"visitalps_1080p30_video_540p_7_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1012500\" codecs=\"avc1.64001e\" height=\"396\" id=\"5\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_6init.mp4\"\n media=\"visitalps_1080p30_video_396p_6_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"675000\" codecs=\"avc1.64001e\" height=\"396\" id=\"6\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_5init.mp4\"\n media=\"visitalps_1080p30_video_396p_5_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"450000\" codecs=\"avc1.64001e\" height=\"396\" id=\"7\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_4init.mp4\"\n media=\"visitalps_1080p30_video_396p_4_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"337500\" codecs=\"avc1.640016\" height=\"288\" id=\"8\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_3init.mp4\"\n media=\"visitalps_1080p30_video_288p_3_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"225000\" codecs=\"avc1.640016\" height=\"288\" id=\"9\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_2init.mp4\"\n media=\"visitalps_1080p30_video_288p_2_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"150000\" codecs=\"avc1.640016\" height=\"288\" id=\"10\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_1init.mp4\"\n media=\"visitalps_1080p30_video_288p_1_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet lang=\"eng\" mimeType=\"audio/mp4\" segmentAlignment=\"0\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\"/>\n <Representation audioSamplingRate=\"48000\" bandwidth=\"128000\" codecs=\"mp4a.40.2\" id=\"11\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"96000\" r=\"6\" t=\"0\"/>\n <S d=\"46368\" t=\"672000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252880.0\" start=\"PT430625H48M14.966S\">\n <BaseURL>dash/</BaseURL>\n <EventStream schemeIdUri=\"urn:scte:scte35:2014:xml+bin\" timescale=\"1\">\n <Event duration=\"24\" id=\"137\" presentationTime=\"1550252880\">\n <Signal xmlns=\"http://www.scte.org/schemas/35/2016\">\n <Binary>/DAhAAAAAAAAAP/wEAUAAACJf+9/fgAg9YDAAAAAAAC/KdNe</Binary>\n </Signal>\n </Event>\n </EventStream>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"74412138958368\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48128\" t=\"74412138956544\"/>\n <S d=\"48127\" t=\"74412139004672\"/>\n <S d=\"48129\" t=\"74412139052799\"/>\n <S d=\"48128\" t=\"74412139100928\"/>\n <S d=\"47104\" t=\"74412139149056\"/>\n <S d=\"48128\" t=\"74412139196160\"/>\n <S d=\"48127\" t=\"74412139244288\"/>\n <S d=\"48129\" t=\"74412139292415\"/>\n <S d=\"48128\" t=\"74412139340544\"/>\n <S d=\"48127\" t=\"74412139388672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"139522760546940\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"9\" t=\"139522760460000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550252904.0\" start=\"PT430625H48M24S\">\n <BaseURL>dash/</BaseURL>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"74412139392000\"\n startNumber=\"180\" timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48129\" t=\"74412139436799\"/>\n <S d=\"48128\" t=\"74412139484928\"/>\n <S d=\"47104\" t=\"74412139533056\"/>\n <S d=\"48128\" t=\"74412139580160\"/>\n <S d=\"48127\" t=\"74412139628288\"/>\n <S d=\"48129\" t=\"74412139676415\"/>\n <S d=\"48128\" t=\"74412139724544\"/>\n <S d=\"48127\" t=\"74412139772672\"/>\n <S d=\"48129\" t=\"74412139820799\"/>\n <S d=\"48128\" t=\"74412139868928\"/>\n <S d=\"47104\" t=\"74412139917056\"/>\n <S d=\"48128\" t=\"74412139964160\"/>\n <S d=\"48127\" t=\"74412140012288\"/>\n <S d=\"48129\" t=\"74412140060415\"/>\n <S d=\"48128\" t=\"74412140108544\"/>\n <S d=\"48127\" t=\"74412140156672\"/>\n <S d=\"48129\" t=\"74412140204799\"/>\n <S d=\"48128\" t=\"74412140252928\"/>\n <S d=\"47104\" t=\"74412140301056\"/>\n <S d=\"48128\" t=\"74412140348160\"/>\n <S d=\"48127\" t=\"74412140396288\"/>\n <S d=\"48129\" t=\"74412140444415\"/>\n <S d=\"48128\" t=\"74412140492544\"/>\n <S d=\"48127\" t=\"74412140540672\"/>\n <S d=\"48129\" t=\"74412140588799\"/>\n <S d=\"48128\" t=\"74412140636928\"/>\n <S d=\"47104\" t=\"74412140685056\"/>\n <S d=\"48128\" t=\"74412140732160\"/>\n <S d=\"48127\" t=\"74412140780288\"/>\n <S d=\"48129\" t=\"74412140828415\"/>\n <S d=\"48128\" t=\"74412140876544\"/>\n <S d=\"48127\" t=\"74412140924672\"/>\n <S d=\"48129\" t=\"74412140972799\"/>\n <S d=\"48128\" t=\"74412141020928\"/>\n <S d=\"47104\" t=\"74412141069056\"/>\n <S d=\"48128\" t=\"74412141116160\"/>\n <S d=\"48127\" t=\"74412141164288\"/>\n <S d=\"48129\" t=\"74412141212415\"/>\n <S d=\"48128\" t=\"74412141260544\"/>\n <S d=\"48127\" t=\"74412141308672\"/>\n <S d=\"48129\" t=\"74412141356799\"/>\n <S d=\"48128\" t=\"74412141404928\"/>\n <S d=\"47104\" t=\"74412141453056\"/>\n <S d=\"48128\" t=\"74412141500160\"/>\n <S d=\"48127\" t=\"74412141548288\"/>\n <S d=\"48129\" t=\"74412141596415\"/>\n <S d=\"48128\" t=\"74412141644544\"/>\n <S d=\"48127\" t=\"74412141692672\"/>\n <S d=\"48129\" t=\"74412141740799\"/>\n <S d=\"48128\" t=\"74412141788928\"/>\n <S d=\"47104\" t=\"74412141837056\"/>\n <S d=\"48128\" t=\"74412141884160\"/>\n <S d=\"48127\" t=\"74412141932288\"/>\n <S d=\"48129\" t=\"74412141980415\"/>\n <S d=\"48128\" t=\"74412142028544\"/>\n <S d=\"48127\" t=\"74412142076672\"/>\n <S d=\"48129\" t=\"74412142124799\"/>\n <S d=\"48128\" t=\"74412142172928\"/>\n <S d=\"47104\" t=\"74412142221056\"/>\n <S d=\"48128\" t=\"74412142268160\"/>\n <S d=\"48127\" t=\"74412142316288\"/>\n <S d=\"48129\" t=\"74412142364415\"/>\n <S d=\"48128\" t=\"74412142412544\"/>\n <S d=\"48127\" t=\"74412142460672\"/>\n <S d=\"48129\" t=\"74412142508799\"/>\n <S d=\"48128\" t=\"74412142556928\"/>\n <S d=\"47104\" t=\"74412142605056\"/>\n <S d=\"48128\" t=\"74412142652160\"/>\n <S d=\"48127\" t=\"74412142700288\"/>\n <S d=\"48129\" t=\"74412142748415\"/>\n <S d=\"48128\" t=\"74412142796544\"/>\n <S d=\"48127\" t=\"74412142844672\"/>\n <S d=\"48129\" t=\"74412142892799\"/>\n <S d=\"48128\" t=\"74412142940928\"/>\n <S d=\"47104\" t=\"74412142989056\"/>\n <S d=\"48128\" t=\"74412143036160\"/>\n <S d=\"48127\" t=\"74412143084288\"/>\n <S d=\"48129\" t=\"74412143132415\"/>\n <S d=\"48128\" t=\"74412143180544\"/>\n <S d=\"48127\" t=\"74412143228672\"/>\n <S d=\"48129\" t=\"74412143276799\"/>\n <S d=\"48128\" t=\"74412143324928\"/>\n <S d=\"47104\" t=\"74412143373056\"/>\n <S d=\"48128\" t=\"74412143420160\"/>\n <S d=\"48127\" t=\"74412143468288\"/>\n <S d=\"48129\" t=\"74412143516415\"/>\n <S d=\"48128\" t=\"74412143564544\"/>\n <S d=\"48127\" t=\"74412143612672\"/>\n <S d=\"48129\" t=\"74412143660799\"/>\n <S d=\"48128\" t=\"74412143708928\"/>\n <S d=\"47104\" t=\"74412143757056\"/>\n <S d=\"48128\" t=\"74412143804160\"/>\n <S d=\"48127\" t=\"74412143852288\"/>\n <S d=\"48129\" t=\"74412143900415\"/>\n <S d=\"48128\" t=\"74412143948544\"/>\n <S d=\"48127\" t=\"74412143996672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"139522761360000\"\n startNumber=\"180\" timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"95\" t=\"139522761360000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550253000.0_1\" start=\"PT430625H50M\">\n <BaseURL>http://d2gh0tfpz97e4o.cloudfront.net/visitalps/</BaseURL>\n <AdaptationSet bitstreamSwitching=\"false\" frameRate=\"30/1\" mimeType=\"video/mp4\" segmentAlignment=\"true\"\n startWithSAP=\"1\" subsegmentAlignment=\"true\" subsegmentStartsWithSAP=\"1\">\n <SegmentTemplate startNumber=\"1\" timescale=\"90000\"/>\n <Representation bandwidth=\"7500000\" codecs=\"avc1.640028\" height=\"1080\" id=\"1\" width=\"1920\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_1080p_10init.mp4\"\n media=\"visitalps_1080p30_video_1080p_10_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"3000000\" codecs=\"avc1.64001f\" height=\"720\" id=\"2\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_9init.mp4\"\n media=\"visitalps_1080p30_video_720p_9_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1875000\" codecs=\"avc1.64001f\" height=\"720\" id=\"3\" width=\"1280\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_720p_8init.mp4\"\n media=\"visitalps_1080p30_video_720p_8_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"270000\" r=\"3\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1500000\" codecs=\"avc1.64001f\" height=\"540\" id=\"4\" width=\"960\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_540p_7init.mp4\"\n media=\"visitalps_1080p30_video_540p_7_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"1012500\" codecs=\"avc1.64001e\" height=\"396\" id=\"5\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_6init.mp4\"\n media=\"visitalps_1080p30_video_396p_6_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"675000\" codecs=\"avc1.64001e\" height=\"396\" id=\"6\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_5init.mp4\"\n media=\"visitalps_1080p30_video_396p_5_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"450000\" codecs=\"avc1.64001e\" height=\"396\" id=\"7\" width=\"704\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_396p_4init.mp4\"\n media=\"visitalps_1080p30_video_396p_4_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"337500\" codecs=\"avc1.640016\" height=\"288\" id=\"8\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_3init.mp4\"\n media=\"visitalps_1080p30_video_288p_3_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"225000\" codecs=\"avc1.640016\" height=\"288\" id=\"9\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_2init.mp4\"\n media=\"visitalps_1080p30_video_288p_2_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"360000\" r=\"2\" t=\"0\"/>\n <S d=\"266940\" t=\"1080000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n <Representation bandwidth=\"150000\" codecs=\"avc1.640016\" height=\"288\" id=\"10\" width=\"512\">\n <SegmentTemplate initialization=\"visitalps_1080p30_video_288p_1init.mp4\"\n media=\"visitalps_1080p30_video_288p_1_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"180000\" r=\"6\" t=\"0\"/>\n <S d=\"86940\" t=\"1260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet lang=\"eng\" mimeType=\"audio/mp4\" segmentAlignment=\"0\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\"/>\n <Representation audioSamplingRate=\"48000\" bandwidth=\"128000\" codecs=\"mp4a.40.2\" id=\"11\">\n <SegmentTemplate initialization=\"visitalps_1080p30_audio_aac_128kinit.mp4\"\n media=\"visitalps_1080p30_audio_aac_128k_$Number%09d$.mp4\" startNumber=\"1\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"96000\" r=\"6\" t=\"0\"/>\n <S d=\"46368\" t=\"672000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n <Period id=\"1550253000.0\" start=\"PT430625H50M14.966S\">\n <BaseURL>dash/</BaseURL>\n <EventStream schemeIdUri=\"urn:scte:scte35:2014:xml+bin\" timescale=\"1\">\n <Event duration=\"24\" id=\"138\" presentationTime=\"1550253000\">\n <Signal xmlns=\"http://www.scte.org/schemas/35/2016\">\n <Binary>/DAhAAAAAAAAAP/wEAUAAACKf+9/fgAg9YDAAAAAAADc+O1/</Binary>\n </Signal>\n </Event>\n </EventStream>\n <AdaptationSet audioSamplingRate=\"48000\" codecs=\"mp4a.40.2\" contentType=\"audio\" group=\"1\" id=\"1\"\n mimeType=\"audio/mp4\" segmentAlignment=\"true\" startWithSAP=\"1\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"1\"/>\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"69000\" id=\"audio=69000\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"74412144718368\"\n timescale=\"48000\">\n <SegmentTimeline>\n <S d=\"48128\" t=\"74412144716544\"/>\n <S d=\"48127\" t=\"74412144764672\"/>\n <S d=\"48129\" t=\"74412144812799\"/>\n <S d=\"48128\" t=\"74412144860928\"/>\n <S d=\"47104\" t=\"74412144909056\"/>\n <S d=\"48128\" t=\"74412144956160\"/>\n <S d=\"48127\" t=\"74412145004288\"/>\n <S d=\"48129\" t=\"74412145052415\"/>\n <S d=\"48128\" t=\"74412145100544\"/>\n <S d=\"48127\" t=\"74412145148672\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n <AdaptationSet codecs=\"avc1.64001F\" contentType=\"video\" group=\"2\" height=\"720\" id=\"2\" mimeType=\"video/mp4\"\n par=\"16:9\" sar=\"1:1\" segmentAlignment=\"true\" startWithSAP=\"1\" width=\"1280\">\n <Role schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"main\"/>\n <Representation bandwidth=\"700000\" id=\"video=700000\" scanType=\"progressive\">\n <SegmentTemplate initialization=\"scte35-$RepresentationID$.dash\"\n media=\"scte35-$RepresentationID$-$Time$.dash\" presentationTimeOffset=\"139522771346940\"\n timescale=\"90000\">\n <SegmentTimeline>\n <S d=\"90000\" r=\"9\" t=\"139522771260000\"/>\n </SegmentTimeline>\n </SegmentTemplate>\n </Representation>\n </AdaptationSet>\n </Period>\n</MPD>\n`\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// noinspection XmlPathReference\n\n/**\n * A Dash manifest that uses SegmentBase with index ranges.\n */\n// language=XML\nexport const dash_segmentBase = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--Generated with https://github.com/google/shaka-packager version v2.6.1-634af65-release-->\n<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd\" profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\" minBufferTime=\"PT2S\" type=\"static\" mediaPresentationDuration=\"PT60S\">\n <Period id=\"0\">\n <AdaptationSet id=\"0\" contentType=\"audio\" subsegmentAlignment=\"true\">\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"1,2\"/>\n <Representation id=\"0\" bandwidth=\"51160\" codecs=\"mp4a.40.2\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/aac_60s_2ch_16bit_44100Hz_48kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"826-929\" timescale=\"44100\">\n <Initialization range=\"0-825\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"14\" bandwidth=\"124766\" codecs=\"mp4a.40.2\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/aac_60s_2ch_16bit_44100Hz_256kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"826-929\" timescale=\"44100\">\n <Initialization range=\"0-825\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"15\" bandwidth=\"114639\" codecs=\"mp4a.40.2\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/aac_60s_2ch_16bit_44100Hz_128kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"826-929\" timescale=\"44100\">\n <Initialization range=\"0-825\"/>\n </SegmentBase>\n </Representation>\n </AdaptationSet>\n <AdaptationSet id=\"1\" contentType=\"audio\">\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"0,2\"/>\n <Representation id=\"1\" bandwidth=\"141719\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_44100Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"44100\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"3\" bandwidth=\"541361\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_48000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"48000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"4\" bandwidth=\"470315\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_192000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"192000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"6\" bandwidth=\"2192360\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_192000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"192000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"8\" bandwidth=\"153326\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_48000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"48000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"10\" bandwidth=\"257514\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_96000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"96000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"11\" bandwidth=\"495381\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_44100Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"44100\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"16\" bandwidth=\"1074424\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_96000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"96000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n </AdaptationSet>\n <AdaptationSet id=\"2\" contentType=\"audio\" subsegmentAlignment=\"true\">\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"0,1\"/>\n <Representation id=\"2\" bandwidth=\"322671\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_44100Hz_320kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"5\" bandwidth=\"50194\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_44100Hz_48kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"7\" bandwidth=\"50194\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_192000Hz_48kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"9\" bandwidth=\"162390\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_192000Hz_160kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"12\" bandwidth=\"322671\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_192000Hz_320kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"13\" bandwidth=\"162390\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_44100Hz_160kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n </AdaptationSet>\n </Period>\n</MPD>\n`\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * An Amazon catalog AAC track.\n * Uses SegmentList with SegmentURL without media ranges.\n */\n// language=XML\nexport const dash_segmentList = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<MPD minBufferTime=\"PT10S\" type=\"static\" mediaPresentationDuration=\"PT2M59.515S\" profiles=\"urn:mpeg:dash:profile:isoff-live:2011\" xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xmlns:amz-music=\"urn:amazon:music:drm:2019\" xmlns:cenc=\"urn:mpeg:cenc:2013\" xmlns:mspr=\"urn:microsoft:playready\">\n <Period>\n <AdaptationSet segmentAlignment=\"true\" mimeType=\"audio/mp4\" startWithSAP=\"1\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"5e2905f0-1f87-1c2a-cdc9-a698b13460a0\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95\" value=\"2.0\">\n <mspr:pro>gAIAAAEAAQB2AjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AOABBAFUAcABYAG8AYwBmAEsAaAB6AE4AeQBhAGEAWQBzAFQAUgBnAG8AQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBvAHYAQwA0AFQAaQA0AFgAOQBRADAAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBtAHUAcwBpAGMALgBhAG0AYQB6AG8AbgAuAGMAbwBtAC8AZABtAGwAcwAvAGEAYwBxAHUAaQByAGUATABpAGMAZQBuAHMAZQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>\n <cenc:pssh>AAACoHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAoCAAgAAAQABAHYCPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgA4AEEAVQBwAFgAbwBjAGYASwBoAHoATgB5AGEAYQBZAHMAVABSAGcAbwBBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AG8AdgBDADQAVABpADQAWAA5AFEAMAA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAG0AdQBzAGkAYwAuAGEAbQBhAHoAbwBuAC4AYwBvAG0ALwBkAG0AbABzAC8AYQBjAHEAdQBpAHIAZQBMAGkAYwBlAG4AcwBlADwALwBMAEEAXwBVAFIATAA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</cenc:pssh>\n </ContentProtection>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAZnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEYIARIQXikF8B+HHCrNyaaYsTRgoBoLQW1hem9uTXVzaWMiHGNpZDpYaWtGOEIrSEhDck55YWFZc1RSZ29BPT0qBUFVRElP</cenc:pssh>\n </ContentProtection>\n <Representation id=\"48kbps\" bitrate=\"48\" codecs=\"mp4a.40.5\" audioSamplingRate=\"44100\" bandwidth=\"49207\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SegmentList timescale=\"1000\" duration=\"9999\">\n <Initialization sourceURL=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/e995b206-11e7-3b45-97c2-b6a3547d2f4e.mp4?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/7074f18b-9540-330a-afe2-219d0ce7833c.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5f820f1c-2afc-3131-bed4-fb5bdef897f0.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/cd6c620a-04de-3782-92b2-c662b6c1072f.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/f7f821c5-5e35-3add-ad3a-9bbe0dbb1e3e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/9746d8ad-cff5-3494-9496-81f4f55e1ef6.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5f3f7a43-ab6d-3c3a-911b-eead57689bd6.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/fd21ca6a-2754-33ea-8880-6b5ef5b20ee4.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d12751c0-7376-3f3e-93d4-aaa2e0604a27.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/deb6a2fe-cf1c-3cd3-b0c0-14605b19b6f7.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/b4f7e818-9b5d-3961-a30a-efb5662b4266.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/44654895-2ecc-3a8d-8314-b38554bd7cab.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/8bdf4924-bd51-376f-93f5-1a681f67b5f0.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d376f5de-404a-3ec6-9c9b-ec4f1a0bb396.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/1cb253cb-53e0-3ce0-899e-66ab521b243e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5189c800-ada3-3851-af3f-1eb221eb1e46.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/aaba2b17-fb35-34ef-9e02-f5d4751537af.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/7c91714e-b106-3738-88b6-a6de127876ab.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/181177ec-f49d-3adf-9e54-54bc8829a4aa.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"128kbps\" bitrate=\"128\" codecs=\"mp4a.40.5\" audioSamplingRate=\"44100\" bandwidth=\"128940\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SegmentList timescale=\"1000\" duration=\"9999\">\n <Initialization sourceURL=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/48ad8390-8f20-3375-ad88-a6b9e30443c9.mp4?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/b60dac8a-6ef4-3831-a94a-1c45fcee6b2d.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/657d1268-facc-3395-88e9-27c5c126ce48.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5195eaa4-b1fe-35db-a6a2-f44b2f5c5ab3.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/4c03a31b-a7df-348f-85ba-849be71d8429.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/892c0d03-6f0a-3816-bab9-f086b1cc58ca.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/47997981-1b94-33a6-a49b-f213625515c0.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/4363a296-1ee3-386a-b866-bbc3209a70af.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/1080dd32-1782-3329-aa25-9f70425726f6.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/2afd08bd-9018-365e-a7ca-215ec749d5f4.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/db3c6e55-4dcd-32f4-9d86-d699760e37c9.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/38bc1afd-2930-3e41-809c-1c2472b2f7e2.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/df6643b3-5b9e-31cf-a3fa-e271e9f70040.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/6e833e36-ed37-3d57-8d2c-dbe058e04b9d.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/ec9caaf6-2205-3ef9-b456-b91fdea6991e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/f1b8ccdf-9848-3b00-9d12-bab2ca18f857.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/da935cc3-be5e-3b3e-b1eb-7f91bd507a90.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/dbbae462-fd17-38d3-9b2a-ce25d1e67583.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/75b367ea-5dc3-3c95-8ff1-e727723ca423.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n <AdaptationSet segmentAlignment=\"true\" mimeType=\"audio/mp4\" startWithSAP=\"1\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"5e2905f0-1f87-1c2a-cdc9-a698b13460a0\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95\" value=\"2.0\">\n <mspr:pro>gAIAAAEAAQB2AjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AOABBAFUAcABYAG8AYwBmAEsAaAB6AE4AeQBhAGEAWQBzAFQAUgBnAG8AQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBvAHYAQwA0AFQAaQA0AFgAOQBRADAAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBtAHUAcwBpAGMALgBhAG0AYQB6AG8AbgAuAGMAbwBtAC8AZABtAGwAcwAvAGEAYwBxAHUAaQByAGUATABpAGMAZQBuAHMAZQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>\n <cenc:pssh>AAACoHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAoCAAgAAAQABAHYCPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgA4AEEAVQBwAFgAbwBjAGYASwBoAHoATgB5AGEAYQBZAHMAVABSAGcAbwBBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AG8AdgBDADQAVABpADQAWAA5AFEAMAA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAG0AdQBzAGkAYwAuAGEAbQBhAHoAbwBuAC4AYwBvAG0ALwBkAG0AbABzAC8AYQBjAHEAdQBpAHIAZQBMAGkAYwBlAG4AcwBlADwALwBMAEEAXwBVAFIATAA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</cenc:pssh>\n </ContentProtection>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAZnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEYIARIQXikF8B+HHCrNyaaYsTRgoBoLQW1hem9uTXVzaWMiHGNpZDpYaWtGOEIrSEhDck55YWFZc1RSZ29BPT0qBUFVRElP</cenc:pssh>\n </ContentProtection>\n <Representation id=\"256kbps\" bitrate=\"256\" codecs=\"mp4a.40.2\" audioSamplingRate=\"44100\" bandwidth=\"257571\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SegmentList timescale=\"1000\" duration=\"10001\">\n <Initialization sourceURL=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/491172b7-47c7-3c85-8d21-d1b5932f17a2.mp4?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/826bac71-7b31-3a24-9d49-37847e2a6729.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/388d5f9e-91a8-3f11-af1a-ae4a05f97ec9.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/a33b04dd-497b-32a8-8d79-185c3ff64abc.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5177f418-6081-3d74-962e-a22103b0bd9b.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/21130156-4c73-34e4-8d9f-3bb4835907f5.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/e38d0c76-959c-3ea2-9194-a909b79dcb2e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/280aa567-f6e5-355b-910e-86dd3d877058.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/a00d6c29-4f5d-3fec-a925-238376fccb23.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/547acecd-34c8-308d-afa7-4cabfa08828a.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/dade48dd-b7b7-3584-8282-d485b4dcb4ac.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/06a7b39c-bf4c-3a84-8c3a-3130cf8d8796.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/e23e7877-351f-3907-bc21-5ad52e79bea3.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/8bd58682-d178-31e8-9158-647294632481.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/9940b7d6-a080-36e9-bc74-701bc86f1d04.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d3f0bf8f-c7bb-390f-a69f-6c5f76fea173.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/85d1acbe-8bdb-3eb9-a6f1-dabbd39dcac7.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/55329bcb-7009-36c2-acc5-38100b7e7299.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d12a306c-2d45-3e5b-8240-8ebea0437442.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&amp;rs=NA&amp;mt=US\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n </Period>\n</MPD>\n`\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * An Amazon flac/opus catalog track example.\n * A SegmentList with SegmentURL elements using media ranges.\n *\n * (Mothership connection, parliament)\n */\n// language=XML\nexport const dash_segmentListMediaRange = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<MPD minBufferTime=\"PT2S\" type=\"static\" mediaPresentationDuration=\"PT400.0133056640625S\" profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\" xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xmlns:amz-music=\"urn:amazon:music:drm:2019\" xmlns:cenc=\"urn:mpeg:cenc:2013\" xmlns:mspr=\"urn:microsoft:playready\">\n <Period id=\"0\">\n <AdaptationSet id=\"1\" contentType=\"audio\" selectionPriority=\"2000\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"53443d2c-a548-037d-dfca-b6873a3b16a7\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAXXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAD0SEFNEPSylSAN938q2hzo7FqcaC0FtYXpvbk11c2ljIhxjaWQ6VTBROUxLVklBMzNmeXJhSE9qc1dwdz09</cenc:pssh>\n </ContentProtection>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:ProgramLoudness\" value=\"-13.5 LUFS\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:trackType\" value=\"HD\"/>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"2\"/>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:AnchorLoudness\" value=\"-11.7 LUFS\"/>\n <Representation id=\"1\" qualityRanking=\"4\" codecs=\"flac\" audioSamplingRate=\"44100\" bandwidth=\"1021104\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:bitDepth\" value=\"16\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/a3ce7553-e9a3-3ca6-8fda-8f354b8cee0f.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=HD_44&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"44100\" duration=\"441000\">\n <Initialization range=\"0-1067\"/>\n <SegmentURL mediaRange=\"1580-1124387\"/>\n <SegmentURL mediaRange=\"1124388-2301681\"/>\n <SegmentURL mediaRange=\"2301682-3413884\"/>\n <SegmentURL mediaRange=\"3413885-4563668\"/>\n <SegmentURL mediaRange=\"4563669-5789595\"/>\n <SegmentURL mediaRange=\"5789596-7027203\"/>\n <SegmentURL mediaRange=\"7027204-8258589\"/>\n <SegmentURL mediaRange=\"8258590-9476689\"/>\n <SegmentURL mediaRange=\"9476690-10663879\"/>\n <SegmentURL mediaRange=\"10663880-11801656\"/>\n <SegmentURL mediaRange=\"11801657-13028295\"/>\n <SegmentURL mediaRange=\"13028296-14259035\"/>\n <SegmentURL mediaRange=\"14259036-15501034\"/>\n <SegmentURL mediaRange=\"15501035-16715074\"/>\n <SegmentURL mediaRange=\"16715075-17945696\"/>\n <SegmentURL mediaRange=\"17945697-19181760\"/>\n <SegmentURL mediaRange=\"19181761-20430664\"/>\n <SegmentURL mediaRange=\"20430665-21668186\"/>\n <SegmentURL mediaRange=\"21668187-22889588\"/>\n <SegmentURL mediaRange=\"22889589-24105876\"/>\n <SegmentURL mediaRange=\"24105877-25286931\"/>\n <SegmentURL mediaRange=\"25286932-26474293\"/>\n <SegmentURL mediaRange=\"26474294-27717336\"/>\n <SegmentURL mediaRange=\"27717337-28944000\"/>\n <SegmentURL mediaRange=\"28944001-30217943\"/>\n <SegmentURL mediaRange=\"30217944-31494322\"/>\n <SegmentURL mediaRange=\"31494323-32753722\"/>\n <SegmentURL mediaRange=\"32753723-33819438\"/>\n <SegmentURL mediaRange=\"33819439-34871800\"/>\n <SegmentURL mediaRange=\"34871801-35987451\"/>\n <SegmentURL mediaRange=\"35987452-37198633\"/>\n <SegmentURL mediaRange=\"37198634-38400513\"/>\n <SegmentURL mediaRange=\"38400514-39590378\"/>\n <SegmentURL mediaRange=\"39590379-40775418\"/>\n <SegmentURL mediaRange=\"40775419-42023162\"/>\n <SegmentURL mediaRange=\"42023163-43262782\"/>\n <SegmentURL mediaRange=\"43262783-44466388\"/>\n <SegmentURL mediaRange=\"44466389-45664349\"/>\n <SegmentURL mediaRange=\"45664350-46838625\"/>\n <SegmentURL mediaRange=\"46838626-47421889\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"2\" qualityRanking=\"3\" codecs=\"flac\" audioSamplingRate=\"48000\" bandwidth=\"1855801\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:bitDepth\" value=\"24\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/f5b706c9-5892-3a17-9d01-4da362cfad35.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=UHD_48&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1067\"/>\n <SegmentURL mediaRange=\"1580-2140301\"/>\n <SegmentURL mediaRange=\"2140302-4352961\"/>\n <SegmentURL mediaRange=\"4352962-6499834\"/>\n <SegmentURL mediaRange=\"6499835-8687556\"/>\n <SegmentURL mediaRange=\"8687557-10955471\"/>\n <SegmentURL mediaRange=\"10955472-13235819\"/>\n <SegmentURL mediaRange=\"13235820-15509496\"/>\n <SegmentURL mediaRange=\"15509497-17768731\"/>\n <SegmentURL mediaRange=\"17768732-19993372\"/>\n <SegmentURL mediaRange=\"19993373-22167125\"/>\n <SegmentURL mediaRange=\"22167126-24434254\"/>\n <SegmentURL mediaRange=\"24434255-26706557\"/>\n <SegmentURL mediaRange=\"26706558-28990196\"/>\n <SegmentURL mediaRange=\"28990197-31245239\"/>\n <SegmentURL mediaRange=\"31245240-33516976\"/>\n <SegmentURL mediaRange=\"33516977-35793411\"/>\n <SegmentURL mediaRange=\"35793412-38083225\"/>\n <SegmentURL mediaRange=\"38083226-40361780\"/>\n <SegmentURL mediaRange=\"40361781-42623154\"/>\n <SegmentURL mediaRange=\"42623155-44879987\"/>\n <SegmentURL mediaRange=\"44879988-47098315\"/>\n <SegmentURL mediaRange=\"47098316-49322904\"/>\n <SegmentURL mediaRange=\"49322905-51607367\"/>\n <SegmentURL mediaRange=\"51607368-53874862\"/>\n <SegmentURL mediaRange=\"53874863-56192866\"/>\n <SegmentURL mediaRange=\"56192867-58512617\"/>\n <SegmentURL mediaRange=\"58512618-60815181\"/>\n <SegmentURL mediaRange=\"60815182-62914181\"/>\n <SegmentURL mediaRange=\"62914182-65000611\"/>\n <SegmentURL mediaRange=\"65000612-67150839\"/>\n <SegmentURL mediaRange=\"67150840-69402495\"/>\n <SegmentURL mediaRange=\"69402496-71643660\"/>\n <SegmentURL mediaRange=\"71643661-73870974\"/>\n <SegmentURL mediaRange=\"73870975-76093618\"/>\n <SegmentURL mediaRange=\"76093619-78383457\"/>\n <SegmentURL mediaRange=\"78383458-80665083\"/>\n <SegmentURL mediaRange=\"80665084-82909593\"/>\n <SegmentURL mediaRange=\"82909594-85145972\"/>\n <SegmentURL mediaRange=\"85145973-87356513\"/>\n <SegmentURL mediaRange=\"87356514-88804457\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"3\" qualityRanking=\"2\" codecs=\"flac\" audioSamplingRate=\"96000\" bandwidth=\"3278164\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:bitDepth\" value=\"24\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/02b134c4-8144-3ab1-b125-5af2d0133d5b.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=UHD_96&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"96000\" duration=\"960000\">\n <Initialization range=\"0-1067\"/>\n <SegmentURL mediaRange=\"1580-3813567\"/>\n <SegmentURL mediaRange=\"3813568-7746339\"/>\n <SegmentURL mediaRange=\"7746340-11599579\"/>\n <SegmentURL mediaRange=\"11599580-15505023\"/>\n <SegmentURL mediaRange=\"15505024-19519493\"/>\n <SegmentURL mediaRange=\"19519494-23556777\"/>\n <SegmentURL mediaRange=\"23556778-27581158\"/>\n <SegmentURL mediaRange=\"27581159-31586807\"/>\n <SegmentURL mediaRange=\"31586808-35549718\"/>\n <SegmentURL mediaRange=\"35549719-39435585\"/>\n <SegmentURL mediaRange=\"39435586-43443650\"/>\n <SegmentURL mediaRange=\"43443651-47467685\"/>\n <SegmentURL mediaRange=\"47467686-51498910\"/>\n <SegmentURL mediaRange=\"51498911-55496614\"/>\n <SegmentURL mediaRange=\"55496615-59513566\"/>\n <SegmentURL mediaRange=\"59513567-63538385\"/>\n <SegmentURL mediaRange=\"63538386-67582593\"/>\n <SegmentURL mediaRange=\"67582594-71608871\"/>\n <SegmentURL mediaRange=\"71608872-75612860\"/>\n <SegmentURL mediaRange=\"75612861-79601033\"/>\n <SegmentURL mediaRange=\"79601034-83549776\"/>\n <SegmentURL mediaRange=\"83549777-87488907\"/>\n <SegmentURL mediaRange=\"87488908-91534801\"/>\n <SegmentURL mediaRange=\"91534802-95552040\"/>\n <SegmentURL mediaRange=\"95552041-99649744\"/>\n <SegmentURL mediaRange=\"99649745-103743373\"/>\n <SegmentURL mediaRange=\"103743374-107815594\"/>\n <SegmentURL mediaRange=\"107815595-111613915\"/>\n <SegmentURL mediaRange=\"111613916-115390443\"/>\n <SegmentURL mediaRange=\"115390444-119249732\"/>\n <SegmentURL mediaRange=\"119249733-123233807\"/>\n <SegmentURL mediaRange=\"123233808-127209398\"/>\n <SegmentURL mediaRange=\"127209399-131167116\"/>\n <SegmentURL mediaRange=\"131167117-135119879\"/>\n <SegmentURL mediaRange=\"135119880-139163685\"/>\n <SegmentURL mediaRange=\"139163686-143201079\"/>\n <SegmentURL mediaRange=\"143201080-147195194\"/>\n <SegmentURL mediaRange=\"147195195-151164220\"/>\n <SegmentURL mediaRange=\"151164221-155096800\"/>\n <SegmentURL mediaRange=\"155096801-157757393\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"4\" qualityRanking=\"1\" codecs=\"flac\" audioSamplingRate=\"192000\" bandwidth=\"5666448\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:bitDepth\" value=\"24\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/edf9f9cb-46ce-33bd-96e1-8456547fbef4.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=UHD_192&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"192000\" duration=\"1920000\">\n <Initialization range=\"0-1067\"/>\n <SegmentURL mediaRange=\"1580-6720450\"/>\n <SegmentURL mediaRange=\"6720451-13610816\"/>\n <SegmentURL mediaRange=\"13610817-20415282\"/>\n <SegmentURL mediaRange=\"20415283-27272412\"/>\n <SegmentURL mediaRange=\"27272413-34250251\"/>\n <SegmentURL mediaRange=\"34250252-41260291\"/>\n <SegmentURL mediaRange=\"41260292-48255248\"/>\n <SegmentURL mediaRange=\"48255249-55224355\"/>\n <SegmentURL mediaRange=\"55224356-62157463\"/>\n <SegmentURL mediaRange=\"62157464-68996670\"/>\n <SegmentURL mediaRange=\"68996671-75970335\"/>\n <SegmentURL mediaRange=\"75970336-82964531\"/>\n <SegmentURL mediaRange=\"82964532-89965755\"/>\n <SegmentURL mediaRange=\"89965756-96928368\"/>\n <SegmentURL mediaRange=\"96928369-103911265\"/>\n <SegmentURL mediaRange=\"103911266-110903999\"/>\n <SegmentURL mediaRange=\"110904000-117921608\"/>\n <SegmentURL mediaRange=\"117921609-124920837\"/>\n <SegmentURL mediaRange=\"124920838-131897214\"/>\n <SegmentURL mediaRange=\"131897215-138848614\"/>\n <SegmentURL mediaRange=\"138848615-145764349\"/>\n <SegmentURL mediaRange=\"145764350-152655256\"/>\n <SegmentURL mediaRange=\"152655257-159680382\"/>\n <SegmentURL mediaRange=\"159680383-166667521\"/>\n <SegmentURL mediaRange=\"166667522-173750581\"/>\n <SegmentURL mediaRange=\"173750582-180827932\"/>\n <SegmentURL mediaRange=\"180827933-187877145\"/>\n <SegmentURL mediaRange=\"187877146-194626820\"/>\n <SegmentURL mediaRange=\"194626821-201345524\"/>\n <SegmentURL mediaRange=\"201345525-208145573\"/>\n <SegmentURL mediaRange=\"208145574-215088653\"/>\n <SegmentURL mediaRange=\"215088654-222022478\"/>\n <SegmentURL mediaRange=\"222022479-228934595\"/>\n <SegmentURL mediaRange=\"228934596-235844464\"/>\n <SegmentURL mediaRange=\"235844465-242852767\"/>\n <SegmentURL mediaRange=\"242852768-249863893\"/>\n <SegmentURL mediaRange=\"249863894-256824103\"/>\n <SegmentURL mediaRange=\"256824104-263749124\"/>\n <SegmentURL mediaRange=\"263749125-270634182\"/>\n <SegmentURL mediaRange=\"270634183-275673081\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n <AdaptationSet id=\"2\" contentType=\"audio\" selectionPriority=\"1000\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"f65d52c1-4de5-e5b6-7296-2f48eddf7378\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAXXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAD0SEPZdUsFN5eW2cpYvSO3fc3gaC0FtYXpvbk11c2ljIhxjaWQ6OWwxU3dVM2w1Ylp5bGk5STdkOXplQT09</cenc:pssh>\n </ContentProtection>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:ProgramLoudness\" value=\"-13.5 LUFS\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:trackType\" value=\"SD\"/>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"1\"/>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:AnchorLoudness\" value=\"-11.7 LUFS\"/>\n <Representation id=\"5\" qualityRanking=\"3\" codecs=\"opus\" audioSamplingRate=\"48000\" bandwidth=\"52950\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/7e2d628d-7666-3ad5-a9df-8ba4e1c6391c.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=SD_LOW&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1031\"/>\n <SegmentURL mediaRange=\"1544-61799\"/>\n <SegmentURL mediaRange=\"61800-121935\"/>\n <SegmentURL mediaRange=\"121936-182071\"/>\n <SegmentURL mediaRange=\"182072-246260\"/>\n <SegmentURL mediaRange=\"246261-310449\"/>\n <SegmentURL mediaRange=\"310450-374638\"/>\n <SegmentURL mediaRange=\"374639-438827\"/>\n <SegmentURL mediaRange=\"438828-503016\"/>\n <SegmentURL mediaRange=\"503017-567205\"/>\n <SegmentURL mediaRange=\"567206-631394\"/>\n <SegmentURL mediaRange=\"631395-695583\"/>\n <SegmentURL mediaRange=\"695584-759772\"/>\n <SegmentURL mediaRange=\"759773-823961\"/>\n <SegmentURL mediaRange=\"823962-888150\"/>\n <SegmentURL mediaRange=\"888151-952339\"/>\n <SegmentURL mediaRange=\"952340-1016528\"/>\n <SegmentURL mediaRange=\"1016529-1080717\"/>\n <SegmentURL mediaRange=\"1080718-1144906\"/>\n <SegmentURL mediaRange=\"1144907-1209095\"/>\n <SegmentURL mediaRange=\"1209096-1273284\"/>\n <SegmentURL mediaRange=\"1273285-1337473\"/>\n <SegmentURL mediaRange=\"1337474-1401662\"/>\n <SegmentURL mediaRange=\"1401663-1465851\"/>\n <SegmentURL mediaRange=\"1465852-1530040\"/>\n <SegmentURL mediaRange=\"1530041-1594229\"/>\n <SegmentURL mediaRange=\"1594230-1658418\"/>\n <SegmentURL mediaRange=\"1658419-1722607\"/>\n <SegmentURL mediaRange=\"1722608-1786796\"/>\n <SegmentURL mediaRange=\"1786797-1850985\"/>\n <SegmentURL mediaRange=\"1850986-1915174\"/>\n <SegmentURL mediaRange=\"1915175-1979363\"/>\n <SegmentURL mediaRange=\"1979364-2043552\"/>\n <SegmentURL mediaRange=\"2043553-2107741\"/>\n <SegmentURL mediaRange=\"2107742-2171930\"/>\n <SegmentURL mediaRange=\"2171931-2236119\"/>\n <SegmentURL mediaRange=\"2236120-2300308\"/>\n <SegmentURL mediaRange=\"2300309-2364497\"/>\n <SegmentURL mediaRange=\"2364498-2428686\"/>\n <SegmentURL mediaRange=\"2428687-2492875\"/>\n <SegmentURL mediaRange=\"2492876-2559060\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"6\" qualityRanking=\"2\" codecs=\"opus\" audioSamplingRate=\"48000\" bandwidth=\"196953\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/8e453bd1-9428-30fa-940f-fa85911368c2.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=SD_MEDIUM&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1031\"/>\n <SegmentURL mediaRange=\"1544-242159\"/>\n <SegmentURL mediaRange=\"242160-482295\"/>\n <SegmentURL mediaRange=\"482296-722431\"/>\n <SegmentURL mediaRange=\"722432-966620\"/>\n <SegmentURL mediaRange=\"966621-1210809\"/>\n <SegmentURL mediaRange=\"1210810-1454998\"/>\n <SegmentURL mediaRange=\"1454999-1699187\"/>\n <SegmentURL mediaRange=\"1699188-1943376\"/>\n <SegmentURL mediaRange=\"1943377-2187565\"/>\n <SegmentURL mediaRange=\"2187566-2431754\"/>\n <SegmentURL mediaRange=\"2431755-2675943\"/>\n <SegmentURL mediaRange=\"2675944-2920132\"/>\n <SegmentURL mediaRange=\"2920133-3164321\"/>\n <SegmentURL mediaRange=\"3164322-3408510\"/>\n <SegmentURL mediaRange=\"3408511-3652699\"/>\n <SegmentURL mediaRange=\"3652700-3896888\"/>\n <SegmentURL mediaRange=\"3896889-4141077\"/>\n <SegmentURL mediaRange=\"4141078-4385266\"/>\n <SegmentURL mediaRange=\"4385267-4629455\"/>\n <SegmentURL mediaRange=\"4629456-4873644\"/>\n <SegmentURL mediaRange=\"4873645-5117833\"/>\n <SegmentURL mediaRange=\"5117834-5362022\"/>\n <SegmentURL mediaRange=\"5362023-5606211\"/>\n <SegmentURL mediaRange=\"5606212-5850400\"/>\n <SegmentURL mediaRange=\"5850401-6094589\"/>\n <SegmentURL mediaRange=\"6094590-6338778\"/>\n <SegmentURL mediaRange=\"6338779-6582967\"/>\n <SegmentURL mediaRange=\"6582968-6827156\"/>\n <SegmentURL mediaRange=\"6827157-7071345\"/>\n <SegmentURL mediaRange=\"7071346-7315534\"/>\n <SegmentURL mediaRange=\"7315535-7559723\"/>\n <SegmentURL mediaRange=\"7559724-7803912\"/>\n <SegmentURL mediaRange=\"7803913-8048101\"/>\n <SegmentURL mediaRange=\"8048102-8292290\"/>\n <SegmentURL mediaRange=\"8292291-8536479\"/>\n <SegmentURL mediaRange=\"8536480-8780668\"/>\n <SegmentURL mediaRange=\"8780669-9024857\"/>\n <SegmentURL mediaRange=\"9024858-9269046\"/>\n <SegmentURL mediaRange=\"9269047-9513235\"/>\n <SegmentURL mediaRange=\"9513236-9759420\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"7\" qualityRanking=\"1\" codecs=\"opus\" audioSamplingRate=\"48000\" bandwidth=\"324955\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/40ba3a06-d285-3130-838f-0c1508c1d18b.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=SD_HIGH&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1031\"/>\n <SegmentURL mediaRange=\"1544-402479\"/>\n <SegmentURL mediaRange=\"402480-802615\"/>\n <SegmentURL mediaRange=\"802616-1202751\"/>\n <SegmentURL mediaRange=\"1202752-1606940\"/>\n <SegmentURL mediaRange=\"1606941-2011129\"/>\n <SegmentURL mediaRange=\"2011130-2415318\"/>\n <SegmentURL mediaRange=\"2415319-2819507\"/>\n <SegmentURL mediaRange=\"2819508-3223696\"/>\n <SegmentURL mediaRange=\"3223697-3627885\"/>\n <SegmentURL mediaRange=\"3627886-4032074\"/>\n <SegmentURL mediaRange=\"4032075-4436263\"/>\n <SegmentURL mediaRange=\"4436264-4840452\"/>\n <SegmentURL mediaRange=\"4840453-5244641\"/>\n <SegmentURL mediaRange=\"5244642-5648830\"/>\n <SegmentURL mediaRange=\"5648831-6053019\"/>\n <SegmentURL mediaRange=\"6053020-6457208\"/>\n <SegmentURL mediaRange=\"6457209-6861397\"/>\n <SegmentURL mediaRange=\"6861398-7265586\"/>\n <SegmentURL mediaRange=\"7265587-7669775\"/>\n <SegmentURL mediaRange=\"7669776-8073964\"/>\n <SegmentURL mediaRange=\"8073965-8478153\"/>\n <SegmentURL mediaRange=\"8478154-8882342\"/>\n <SegmentURL mediaRange=\"8882343-9286531\"/>\n <SegmentURL mediaRange=\"9286532-9690720\"/>\n <SegmentURL mediaRange=\"9690721-10094909\"/>\n <SegmentURL mediaRange=\"10094910-10499098\"/>\n <SegmentURL mediaRange=\"10499099-10903287\"/>\n <SegmentURL mediaRange=\"10903288-11307476\"/>\n <SegmentURL mediaRange=\"11307477-11711665\"/>\n <SegmentURL mediaRange=\"11711666-12115854\"/>\n <SegmentURL mediaRange=\"12115855-12520043\"/>\n <SegmentURL mediaRange=\"12520044-12924232\"/>\n <SegmentURL mediaRange=\"12924233-13328421\"/>\n <SegmentURL mediaRange=\"13328422-13732610\"/>\n <SegmentURL mediaRange=\"13732611-14136799\"/>\n <SegmentURL mediaRange=\"14136800-14540988\"/>\n <SegmentURL mediaRange=\"14540989-14945177\"/>\n <SegmentURL mediaRange=\"14945178-15349366\"/>\n <SegmentURL mediaRange=\"15349367-15753555\"/>\n <SegmentURL mediaRange=\"15753556-16159740\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n <AdaptationSet id=\"3\" contentType=\"audio\" selectionPriority=\"500\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"4e4c6e3a-d760-ffd5-78b0-3824890da09d\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAXXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAD0SEE5MbjrXYP/VeLA4JIkNoJ0aC0FtYXpvbk11c2ljIhxjaWQ6VGt4dU90ZGcvOVY0c0Rna2lRMmduUT09</cenc:pssh>\n </ContentProtection>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:ProgramLoudness\" value=\"-13.5 LUFS\"/>\n <SupplementalProperty schemeIdUri=\"amz-music:trackType\" value=\"LD\"/>\n <SupplementalProperty schemeIdUri=\"urn:mpeg:mpegB:cicp:AnchorLoudness\" value=\"-11.7 LUFS\"/>\n <Representation id=\"8\" qualityRanking=\"2000\" codecs=\"opus\" audioSamplingRate=\"48000\" bandwidth=\"52950\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/748096ab-6991-368b-b9ca-5477bf90ba5a.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=LD_LOW&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1031\"/>\n <SegmentURL mediaRange=\"1544-61799\"/>\n <SegmentURL mediaRange=\"61800-121935\"/>\n <SegmentURL mediaRange=\"121936-182071\"/>\n <SegmentURL mediaRange=\"182072-246260\"/>\n <SegmentURL mediaRange=\"246261-310449\"/>\n <SegmentURL mediaRange=\"310450-374638\"/>\n <SegmentURL mediaRange=\"374639-438827\"/>\n <SegmentURL mediaRange=\"438828-503016\"/>\n <SegmentURL mediaRange=\"503017-567205\"/>\n <SegmentURL mediaRange=\"567206-631394\"/>\n <SegmentURL mediaRange=\"631395-695583\"/>\n <SegmentURL mediaRange=\"695584-759772\"/>\n <SegmentURL mediaRange=\"759773-823961\"/>\n <SegmentURL mediaRange=\"823962-888150\"/>\n <SegmentURL mediaRange=\"888151-952339\"/>\n <SegmentURL mediaRange=\"952340-1016528\"/>\n <SegmentURL mediaRange=\"1016529-1080717\"/>\n <SegmentURL mediaRange=\"1080718-1144906\"/>\n <SegmentURL mediaRange=\"1144907-1209095\"/>\n <SegmentURL mediaRange=\"1209096-1273284\"/>\n <SegmentURL mediaRange=\"1273285-1337473\"/>\n <SegmentURL mediaRange=\"1337474-1401662\"/>\n <SegmentURL mediaRange=\"1401663-1465851\"/>\n <SegmentURL mediaRange=\"1465852-1530040\"/>\n <SegmentURL mediaRange=\"1530041-1594229\"/>\n <SegmentURL mediaRange=\"1594230-1658418\"/>\n <SegmentURL mediaRange=\"1658419-1722607\"/>\n <SegmentURL mediaRange=\"1722608-1786796\"/>\n <SegmentURL mediaRange=\"1786797-1850985\"/>\n <SegmentURL mediaRange=\"1850986-1915174\"/>\n <SegmentURL mediaRange=\"1915175-1979363\"/>\n <SegmentURL mediaRange=\"1979364-2043552\"/>\n <SegmentURL mediaRange=\"2043553-2107741\"/>\n <SegmentURL mediaRange=\"2107742-2171930\"/>\n <SegmentURL mediaRange=\"2171931-2236119\"/>\n <SegmentURL mediaRange=\"2236120-2300308\"/>\n <SegmentURL mediaRange=\"2300309-2364497\"/>\n <SegmentURL mediaRange=\"2364498-2428686\"/>\n <SegmentURL mediaRange=\"2428687-2492875\"/>\n <SegmentURL mediaRange=\"2492876-2559060\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"9\" qualityRanking=\"1000\" codecs=\"opus\" audioSamplingRate=\"48000\" bandwidth=\"164952\" mimeType=\"audio/mp4\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>https://d17vo8z6jop21h.cloudfront.net/94bd1ece-d200000391583662/8be307d6-71ea-3111-a869-40720e08a6f9.mp4?r=2e86bfd7-93aa-48a0-9d32-7bee6d2897a4&amp;rs=NA&amp;mt=US&amp;ql=LD_MEDIUM&amp;dtype=A16ZV8BU3SN1N3</BaseURL>\n <SegmentList timescale=\"48000\" duration=\"480000\">\n <Initialization range=\"0-1031\"/>\n <SegmentURL mediaRange=\"1544-202079\"/>\n <SegmentURL mediaRange=\"202080-402215\"/>\n <SegmentURL mediaRange=\"402216-602351\"/>\n <SegmentURL mediaRange=\"602352-806540\"/>\n <SegmentURL mediaRange=\"806541-1010729\"/>\n <SegmentURL mediaRange=\"1010730-1214918\"/>\n <SegmentURL mediaRange=\"1214919-1419107\"/>\n <SegmentURL mediaRange=\"1419108-1623296\"/>\n <SegmentURL mediaRange=\"1623297-1827485\"/>\n <SegmentURL mediaRange=\"1827486-2031674\"/>\n <SegmentURL mediaRange=\"2031675-2235863\"/>\n <SegmentURL mediaRange=\"2235864-2440052\"/>\n <SegmentURL mediaRange=\"2440053-2644241\"/>\n <SegmentURL mediaRange=\"2644242-2848430\"/>\n <SegmentURL mediaRange=\"2848431-3052619\"/>\n <SegmentURL mediaRange=\"3052620-3256808\"/>\n <SegmentURL mediaRange=\"3256809-3460997\"/>\n <SegmentURL mediaRange=\"3460998-3665186\"/>\n <SegmentURL mediaRange=\"3665187-3869375\"/>\n <SegmentURL mediaRange=\"3869376-4073564\"/>\n <SegmentURL mediaRange=\"4073565-4277753\"/>\n <SegmentURL mediaRange=\"4277754-4481942\"/>\n <SegmentURL mediaRange=\"4481943-4686131\"/>\n <SegmentURL mediaRange=\"4686132-4890320\"/>\n <SegmentURL mediaRange=\"4890321-5094509\"/>\n <SegmentURL mediaRange=\"5094510-5298698\"/>\n <SegmentURL mediaRange=\"5298699-5502887\"/>\n <SegmentURL mediaRange=\"5502888-5707076\"/>\n <SegmentURL mediaRange=\"5707077-5911265\"/>\n <SegmentURL mediaRange=\"5911266-6115454\"/>\n <SegmentURL mediaRange=\"6115455-6319643\"/>\n <SegmentURL mediaRange=\"6319644-6523832\"/>\n <SegmentURL mediaRange=\"6523833-6728021\"/>\n <SegmentURL mediaRange=\"6728022-6932210\"/>\n <SegmentURL mediaRange=\"6932211-7136399\"/>\n <SegmentURL mediaRange=\"7136400-7340588\"/>\n <SegmentURL mediaRange=\"7340589-7544777\"/>\n <SegmentURL mediaRange=\"7544778-7748966\"/>\n <SegmentURL mediaRange=\"7748967-7953155\"/>\n <SegmentURL mediaRange=\"7953156-8159340\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n </Period>\n</MPD>`\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport interface SegmentedAsset {\n /**\n * The path to the initialization segment.\n */\n readonly init: string\n\n /**\n * A path to the segments, where {0} represents the segment index.\n */\n readonly part: string\n\n /**\n * The number of segments.\n */\n readonly numSegments: number\n\n /**\n * The duration of the track.\n */\n readonly duration: number\n}\n\n// Assets generated by DMTestAssetBuilder\nexport const vinylTestAssets = {\n prog: {\n libmp3lame_60s_2ch_16bit_44100Hz_48kbps: `https://assets.dev.vinyl.music.amazon.dev/prog/libmp3lame_60s_2ch_16bit_44100Hz_48kbps.mp3`,\n libmp3lame_1800s_2ch_16bit_44100Hz_48kbps: `https://assets.dev.vinyl.music.amazon.dev/prog/libmp3lame_1800s_2ch_16bit_44100Hz_48kbps.mp3`,\n libmp3lame_1s_2ch_16bit_44100Hz_48kbps: `https://assets.dev.vinyl.music.amazon.dev/prog/libmp3lame_1s_2ch_16bit_44100Hz_48kbps.mp3`,\n },\n dash: {\n live_static_aac_opus_flac_60s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentTemplate/manifest.mpd`,\n live_static_aac_opus_flac_60s_segmentBase: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentBase/manifest.mpd`,\n live_static_webm_vp9_opus_60s_segmentBase: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_webm_vp9_opus_60s_segmentBase/manifest.mpd`,\n live_static_video_audio_60s_2s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_audio_60s_2s_segmentTemplate/manifest.mpd`,\n live_static_video_audio_60s_4s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_audio_60s_4s_segmentTemplate/manifest.mpd`,\n live_static_video_audio_60s_2s_segmentTemplate_widevine_cl10: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_audio_60s_2s_segmentTemplate_widevine_cl10/manifest.mpd`,\n live_static_video_audio_60s_4s_segmentTemplate_widevine_cl10: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_audio_60s_4s_segmentTemplate_widevine_cl10/manifest.mpd`,\n live_static_video_60s_2s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_60s_2s_segmentTemplate/manifest.mpd`,\n live_static_video_60s_4s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_video_60s_4s_segmentTemplate/manifest.mpd`,\n live_static_aac_opus_flac_60s_segmentBase_widevine_cl10: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentBase_widevine_cl10/manifest.mpd`,\n live_static_aac_opus_flac_60s_segmentBase_widevine: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentBase_widevine/manifest.mpd`,\n live_static_aac_1800s_segmentBase_widevine_cl30: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_1800s_segmentBase_widevine_cl30/manifest.mpd`,\n\n // Edge-case tracks: ultra-short 1s assets (audio-only + video), no\n // captions or translations.\n edge_static_aac_1s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/edge_static_aac_1s_segmentTemplate/manifest.mpd`,\n edge_static_video_1s_segmentTemplate: `https://assets.dev.vinyl.music.amazon.dev/dash/edge_static_video_1s_segmentTemplate/manifest.mpd`,\n\n // Ad-break assets (see DMTestAssetBuilder src/adBreaks): a ~3-min\n // labeled ABR ladder with five-language narration, full + forced\n // captions.\n vinyl_ad_breaks_av: `https://assets.dev.vinyl.music.amazon.dev/dash/vinyl_ad_breaks_av/manifest.mpd`,\n vinyl_ad_breaks_audio: `https://assets.dev.vinyl.music.amazon.dev/dash/vinyl_ad_breaks_audio/manifest.mpd`,\n // Stitched (SSAI) multi-Period ad breaks signalled with SCTE-35 MPD\n // events, and alternative MPD (SGAI) events. See DMTestAssetBuilder\n // docs/AD_BREAK_ASSETS.md for each scenario's timeline.\n vinyl_ad_breaks_av__ssai_scte35_xmlbin: `https://assets.dev.vinyl.music.amazon.dev/dash/ssai_scte35_xmlbin/stream.mpd`,\n vinyl_ad_breaks_av__ssai_scte35_xml: `https://assets.dev.vinyl.music.amazon.dev/dash/ssai_scte35_xml/stream.mpd`,\n vinyl_ad_breaks_av__ssai_pod_time_signal: `https://assets.dev.vinyl.music.amazon.dev/dash/ssai_pod_time_signal/stream.mpd`,\n vinyl_ad_breaks_av__ssai_pre_mid_post: `https://assets.dev.vinyl.music.amazon.dev/dash/ssai_pre_mid_post/stream.mpd`,\n vinyl_ad_breaks_av__altmpd_insert: `https://assets.dev.vinyl.music.amazon.dev/dash/altmpd_insert/stream.mpd`,\n vinyl_ad_breaks_av__altmpd_replace: `https://assets.dev.vinyl.music.amazon.dev/dash/altmpd_replace/stream.mpd`,\n // A list MPD, an alternative MPD whose uri is a list MPD pod, and an\n // XLink remote Period.\n vinyl_ad_breaks_av__list_mpd: `https://assets.dev.vinyl.music.amazon.dev/dash/list_mpd/stream.mpd`,\n vinyl_ad_breaks_av__altmpd_list: `https://assets.dev.vinyl.music.amazon.dev/dash/altmpd_list/stream.mpd`,\n vinyl_ad_breaks_av__xlink_remote_period: `https://assets.dev.vinyl.music.amazon.dev/dash/xlink_remote_period/stream.mpd`,\n },\n hls: {\n live_static_video_audio_60s_2s: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_audio_60s_2s/main.m3u8`,\n live_static_video_audio_60s_4s: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_audio_60s_4s/main.m3u8`,\n live_static_aac_opus_flac_60s: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_aac_opus_flac_60s/main.m3u8`,\n live_static_aac_60s_mpegts: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_aac_60s_mpegts/main.m3u8`,\n live_static_video_60s_2s: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_60s_2s/main.m3u8`,\n live_static_video_60s_4s: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_60s_4s/main.m3u8`,\n live_static_video_60s_2s_mpegts: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_60s_2s_mpegts/main.m3u8`,\n live_static_video_60s_4s_mpegts: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_60s_4s_mpegts/main.m3u8`,\n live_static_video_audio_60s_2s_mpegts: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_audio_60s_2s_mpegts/main.m3u8`,\n live_static_video_audio_60s_4s_mpegts: `https://assets.dev.vinyl.music.amazon.dev/hls/live_static_video_audio_60s_4s_mpegts/main.m3u8`,\n\n // Edge-case tracks: ultra-short 1s assets (audio-only + video), no\n // captions or translations.\n edge_static_aac_1s: `https://assets.dev.vinyl.music.amazon.dev/hls/edge_static_aac_1s/main.m3u8`,\n edge_static_video_1s: `https://assets.dev.vinyl.music.amazon.dev/hls/edge_static_video_1s/main.m3u8`,\n\n // Ad-break assets: base content + HLS Interstitial scenario variants.\n // `*_av` = video+audio, `*_audio` = audio-only; each `__<scenario>`\n // injects a different ad-break configuration. See DMTestAssetBuilder\n // docs/AD_BREAK_ASSETS.md for the \"where to expect ads\" table.\n vinyl_ad_breaks_av: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/main.m3u8`,\n vinyl_ad_breaks_audio: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_audio/main.m3u8`,\n vinyl_ad_breaks_av__single_uri_pre_mid_post: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/single_uri_pre_mid_post.m3u8`,\n vinyl_ad_breaks_av__asset_list_midroll: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/asset_list_midroll.m3u8`,\n vinyl_ad_breaks_av__empty_breaks_pre_mid_post: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/empty_breaks_pre_mid_post.m3u8`,\n vinyl_ad_breaks_av__cue_once_midroll: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/cue_once_midroll.m3u8`,\n vinyl_ad_breaks_av__restrict_skip_and_jump: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/restrict_skip_and_jump.m3u8`,\n vinyl_ad_breaks_av__long_preroll_early_midroll: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/long_preroll_early_midroll.m3u8`,\n vinyl_ad_breaks_av__resume_offset_and_playout_limit: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_av/resume_offset_and_playout_limit.m3u8`,\n vinyl_ad_breaks_audio__single_uri_pre_mid_post: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_audio/single_uri_pre_mid_post.m3u8`,\n vinyl_ad_breaks_audio__asset_list_midroll: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_audio/asset_list_midroll.m3u8`,\n vinyl_ad_breaks_audio__empty_breaks_pre_mid_post: `https://assets.dev.vinyl.music.amazon.dev/hls/vinyl_ad_breaks_audio/empty_breaks_pre_mid_post.m3u8`,\n // Stitched (SSAI) ad breaks signalled with SCTE-35 EXT-X-DATERANGE.\n vinyl_ad_breaks_av__ssai_scte35: `https://assets.dev.vinyl.music.amazon.dev/hls/ssai_scte35/main.m3u8`,\n vinyl_ad_breaks_av__ssai_scte35_cmd: `https://assets.dev.vinyl.music.amazon.dev/hls/ssai_scte35_cmd/main.m3u8`,\n },\n\n // Segmented streaming is added by hand, ControlledMediaSource provides a way to test\n // Media source extensions without reading a dash manifest.\n segmentedStreaming: {\n aac_60s_2ch_16bit_44100Hz_48kbps: {\n init: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentTemplate/segments/aac_60s_2ch_16bit_44100Hz_48kbps/sample.mp4`,\n part: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_60s_segmentTemplate/segments/aac_60s_2ch_16bit_44100Hz_48kbps/part_{index}.m4s`,\n numSegments: 6,\n duration: 60,\n },\n\n // For testing Widevine, use a ControlledMediaSource with this asset.\n // EME requires using a media source, but DRM testing does not need to test buffering.\n aac_60s_2ch_16bit_44100Hz_48kbps_widevine_cl10: {\n init: `https://assets.dev.vinyl.music.amazon.dev/dash/live_static_aac_opus_flac_segmentBase_widevine_60s_cl10/representations/aac_60s_2ch_16bit_44100Hz_48kbps.mp4`,\n part: ``,\n numSegments: 0,\n duration: 60,\n },\n },\n} as const satisfies {\n readonly prog: Record<keyof any, string>\n readonly segmentedStreaming: Record<keyof any, SegmentedAsset>\n readonly dash: Record<keyof any, string>\n readonly hls: Record<keyof any, string>\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getAudioContext } from '@amazon/vinyl'\nimport { type LogTarget, TimeoutError } from '@amazon/vinyl-util'\nimport { sleep } from '@amazon/vinyl-util'\nimport { parseBoolean } from '@amazon/vinyl-util'\nimport { logDebug } from '@amazon/vinyl-util'\nimport { getSearchParams } from '@amazon/vinyl-util'\nimport { createLogPrefix } from '@amazon/vinyl-util'\nimport { mediaRef } from '../player/mediaRef'\n\n/**\n * The percent tolerance the time estimate based on the analyzed frequency can be off from the actual currentTime.\n */\nconst TIME_ESTIMATE_TOLERANCE = 0.02\n\nexport interface FrequencyAnalyzerOptions {\n /**\n * The frequency the sweep starts at.\n */\n readonly startFrequency: number\n\n /**\n * The frequency the sweep ends at.\n */\n readonly endFrequency: number\n\n /**\n * The window size in samples. Default: 4096.\n * A higher value will result in more details in the frequency domain but fewer details in the amplitude domain.\n */\n readonly fftSize:\n 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768\n}\n\nconst defaultFrequencyAnalyzerOptions = {\n startFrequency: 100,\n endFrequency: 6000,\n fftSize: 4096,\n} as const satisfies FrequencyAnalyzerOptions\n\nexport class FrequencyAnalyzer implements LogTarget {\n private readonly data: Float32Array<ArrayBuffer>\n private readonly analyser: AnalyserNode\n\n private readonly options: FrequencyAnalyzerOptions\n\n readonly logPrefix = createLogPrefix('FrequencyAnalyzer')\n\n constructor(\n private readonly audioContext: AudioContext,\n private readonly source: MediaElementAudioSourceNode,\n options?: Partial<FrequencyAnalyzerOptions>\n ) {\n this.options = {\n ...defaultFrequencyAnalyzerOptions,\n ...options,\n }\n // Set up the AnalyserNode\n this.analyser = this.audioContext.createAnalyser()\n this.analyser.fftSize = this.options.fftSize\n this.analyser.connect(this.audioContext.destination)\n this.data = new Float32Array(this.analyser.frequencyBinCount)\n this.source.connect(this.analyser)\n }\n\n /**\n * Estimates the frequency of the current frame window.\n *\n * The frequency estimate is the frequency of the highest decibel bin within the frame window. The number of\n * bins is 1/2 the fftSize.\n */\n get frequency(): number {\n const audioCtx = this.audioContext\n const analyser = this.analyser\n const data = this.data\n analyser.getFloatFrequencyData(data)\n const maxIndex = data.reduce(\n (iMax, x, i, arr) => (x > arr[iMax] ? i : iMax),\n 0\n )\n return (maxIndex * audioCtx.sampleRate) / analyser.fftSize\n }\n\n get estimatedTime(): number {\n const frequency = this.frequency\n const start = this.options.startFrequency\n const end = this.options.endFrequency\n return (\n ((frequency - start) / (end - start)) *\n this.source.mediaElement.duration\n )\n }\n\n /**\n * Asserts that the next samples of audio plays at its expected frequency.\n */\n async assertFrequency(timeout = 10) {\n // Reconnect the analyzer to clear the buffer\n this.analyser.disconnect()\n this.analyser.connect(this.audioContext.destination)\n\n const media = this.source.mediaElement\n if (isNaN(media.duration)) fail('media is not loaded')\n if (media.paused) fail('media is paused')\n const startTime = Date.now()\n const mediaStartTime = media.currentTime\n // The minimum amount of time to fill the buffer up with data from the time the frequency assertion is\n // requested.\n const playbackTime = 0.25\n\n const maxDifference = media.duration * TIME_ESTIMATE_TOLERANCE\n\n // Check if there is enough time remaining in track to accurately test frequency.\n if (media.currentTime + playbackTime >= media.duration) {\n logDebug(\n this,\n 'Ignoring assertFrequency, currentTime is at duration'\n )\n return\n }\n\n let estimatedTime: number\n let diff: number\n let elapsed: number\n do {\n if (Date.now() - startTime > timeout * 1000) {\n throw new TimeoutError(\n 'Frequency data could not be filled, media is not playing.'\n )\n }\n elapsed = media.currentTime - mediaStartTime\n estimatedTime = this.estimatedTime\n diff = Math.abs(estimatedTime - media.currentTime)\n await sleep(playbackTime)\n } while (elapsed < playbackTime && diff > maxDifference)\n\n logDebug(\n this,\n 'time from frequency:',\n estimatedTime.toFixed(2),\n 'actual time:',\n media.currentTime.toFixed(2)\n )\n if (diff > maxDifference) {\n const percentFormatter = new Intl.NumberFormat('en-US', {\n style: 'percent',\n })\n fail(\n `The measured frequency at time ${media.currentTime.toFixed(2)} ` +\n `was measured to be ${this.frequency.toFixed(2)}Hz. ` +\n `The expected time is ${estimatedTime.toFixed(2)}, the actual time ` +\n `is ${media.currentTime.toFixed(2)}, ` +\n `for a difference of ${percentFormatter.format(\n diff / media.duration\n )} track duration. (Tolerance is ${percentFormatter.format(TIME_ESTIMATE_TOLERANCE)})`\n )\n }\n }\n}\n\n/**\n * The volume integ tests play at when checkAudio is set. Analyzers do not work at volume 0 or muted, and the\n * measured dB is affected at very low volumes.\n */\nexport const ANALYZER_VOLUME = 0.01\n\n/**\n * A query param, if present, will indicate that audio should be analyzed. Does not work in CI environments.\n */\nexport const shouldCheckAudio = parseBoolean(\n (getSearchParams().get('checkAudio') ?? '0').toLowerCase()\n)\n\nlet frequencyAnalyzer: FrequencyAnalyzer | null = null\n\n/**\n * If `shouldCheckAudio` is true and AudioContext is supported, asserts that the currently playing media is playing\n * the frequency expected from the sweep tone of the test assets.\n */\nexport function assertFrequency(): Promise<void> {\n return frequencyAnalyzer?.assertFrequency() ?? Promise.resolve()\n}\n\n/**\n * Attaches an analyzer to the shared media element if checkAudio is present in the query params.\n *\n * The checkAudio query param, if present, indicates that the actual sound output should be analyzed. The analyzer is\n * created after the media element is unlocked, so `initializeMediaUnlock` must be called first.\n */\nexport function initializeFrequencyAnalyzer() {\n if (!shouldCheckAudio) return\n beforeAll(() => {\n const media = mediaRef.value\n media.crossOrigin = 'anonymous'\n media.volume = ANALYZER_VOLUME\n const audioContext = getAudioContext()\n if (audioContext) {\n const source = audioContext.createMediaElementSource(media)\n frequencyAnalyzer = new FrequencyAnalyzer(audioContext, source)\n } else {\n console.warn('AudioContext not supported')\n }\n })\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { lazy } from '@amazon/vinyl-util'\n\n/**\n * The volume integ tests play at: low enough not to be heard, but not 0 or muted. Safari 27 ends progressive\n * playback that starts silently without a user gesture, and the media element is unlocked at this volume.\n */\nexport const MEDIA_VOLUME = 0.0001\n\n/**\n * For reliable integ tests on 3P devices, there should be a single media element.\n * When using the media element, unload any sources and reset any state after each test.\n *\n * The element is unmuted at {@link MEDIA_VOLUME}; see `initializeMediaUnlock`.\n */\nexport const mediaRef = lazy<HTMLMediaElement>(() => {\n const media = document.createElement('video')\n media.volume = MEDIA_VOLUME\n media.playsInline = true // needed for iOS\n media.disableRemotePlayback = true // Disables casting. Needed for ManagedMediaSource\n return media\n})\n\nafterEach(() => {\n if (mediaRef.constructed) {\n // Reset the media element.\n const media = mediaRef.value\n media.removeAttribute('src')\n media.load()\n }\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getAudioContext } from '@amazon/vinyl'\nimport { mediaRef } from '../player/mediaRef'\nimport { vinylTestAssets } from '../assets/vinylTestAssets'\nimport { requireUserInteraction } from '../ui/requireUserInteraction'\nimport { noop } from '@amazon/vinyl-util'\n\n/**\n * The largest timeout jasmine accepts; there is no limit to how long a person may take to click.\n */\nconst MAX_TIMEOUT_MS = 2_147_483_647\n\n/**\n * 'Unlocks' the media element by playing and immediately pausing a src track, and resumes the AudioContext.\n * This allows play() to settle on the media element without a user gesture later.\n *\n * Must be called synchronously from a user gesture handler. Rejects if the browser did not accept the gesture.\n */\nexport async function unlockMediaElement(): Promise<void> {\n const media = mediaRef.value\n media.src = vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps\n const played = media.play()\n const resumed = getAudioContext()?.resume().catch(noop)\n try {\n await played\n } finally {\n media.pause()\n media.removeAttribute('src')\n media.load()\n }\n await resumed\n}\n\n/**\n * In a browser, prompts for a click before any spec runs, unlocking the shared media element in response.\n *\n * Starting playback without a user gesture is only allowed for muted media, and some browsers (Safari 27)\n * end progressive playback that starts silently without one, so integ tests play unmuted after this unlock.\n */\nexport function initializeMediaUnlock() {\n if (typeof document === 'undefined') return\n beforeAll(async () => {\n await requireUserInteraction(unlockMediaElement)\n console.info('Media element unlocked')\n }, MAX_TIMEOUT_MS)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Displays a full-page prompt, resolving after a click or key press.\n *\n * @param onInteraction If provided, invoked from within the click or key event handler, so that it may start media\n * playback or resume an AudioContext. If its promise rejects, the error is logged and the prompt remains until the\n * next interaction.\n */\nexport async function requireUserInteraction(\n onInteraction?: () => Promise<void>\n): Promise<void> {\n const prompt = document.getElementById('unlockAudioPrompt')!\n prompt.style.removeProperty('display')\n prompt.querySelector('button')?.focus()\n\n await new Promise<void>((resolve) => {\n let handling = false\n const handler = (event: Event) => {\n if (handling) return\n handling = true\n const result = onInteraction?.() ?? Promise.resolve()\n result\n .then(() => {\n prompt.removeEventListener('click', handler)\n document.removeEventListener('keydown', handler)\n resolve()\n })\n .catch((error: unknown) => {\n console.warn(\n `The ${event.type} (isTrusted: ${event.isTrusted}) was not accepted as a user gesture; ` +\n 'interact again.',\n error\n )\n })\n .finally(() => {\n handling = false\n })\n }\n prompt.addEventListener('click', handler)\n document.addEventListener('keydown', handler)\n })\n prompt.style.display = 'none'\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createMediaSource, isTypeSupported } from '@amazon/vinyl'\nimport {\n IllegalStateError,\n requestWithRetry,\n substitute,\n} from '@amazon/vinyl-util'\nimport { type SegmentedAsset, vinylTestAssets } from '../assets/vinylTestAssets'\n\nconst mimeCodec = 'audio/mp4;codecs=\"mp4a.40.5\"'\n\n/**\n * Creates a media source with controlled appends, gives the ability to test when playback\n * runs out of data.\n */\nexport class ControlledMediaSource {\n readonly length: number\n private _currentIndex = 0\n\n private readonly mediaSource = createMediaSource()\n private readonly sourceBufferPromise: Promise<SourceBuffer>\n private segments: readonly ArrayBuffer[] | null = null\n\n constructor(\n readonly sourceAsset: SegmentedAsset = vinylTestAssets\n .segmentedStreaming.aac_60s_2ch_16bit_44100Hz_48kbps\n ) {\n this.length = sourceAsset.numSegments + 1\n if (isTypeSupported(mimeCodec)) {\n this.sourceBufferPromise = new Promise((resolve) => {\n this.mediaSource.addEventListener(\n 'sourceopen',\n () => {\n this.mediaSource.duration = sourceAsset.duration\n const sourceBuffer =\n this.mediaSource.addSourceBuffer(mimeCodec)\n resolve(sourceBuffer)\n },\n { once: true }\n )\n })\n } else {\n throw new Error(`Unsupported MIME type or codec: ${mimeCodec}`)\n }\n }\n\n /**\n * Gets the data for all segments.\n * All data is preloaded in order to have reproducible test conditions.\n */\n private async getSegments(): Promise<ArrayBuffer[]> {\n // Populate the assets from the template. index 0 - init segment, index 1 through\n // numSegments is sourceAsset.part where {index} is replaced with the index (1-indexed).\n const segments = new Array<ArrayBuffer>(this.length)\n const initResponse = await requestWithRetry(this.sourceAsset.init)\n segments[0] = await initResponse.arrayBuffer()\n for (let i = 1; i <= this.sourceAsset.numSegments; i++) {\n const mediaResponse = await requestWithRetry(\n substitute(this.sourceAsset.part, { index: i })\n )\n segments[i] = await mediaResponse.arrayBuffer()\n }\n return segments\n }\n\n /**\n * Gets the media source.\n * This promise resolves when all assets are ready.\n * Note: in Firefox, you must set this object url on the element immediately. Creating the\n * URL and setting it later can cause errors.\n */\n async getMediaSource(): Promise<MediaSource> {\n this.segments = await this.getSegments()\n return this.mediaSource\n }\n\n async appendNext(): Promise<void> {\n if (!this.segments)\n throw new IllegalStateError('cannot append before getMediaSource')\n const sourceBuffer = await this.sourceBufferPromise\n if (this._currentIndex >= this.length)\n throw new Error(`Only ${this.length} segments`)\n const buff = this.segments[this._currentIndex++]\n await onSourceBufferReady(sourceBuffer)\n const updateEnd = onUpdateEnd(sourceBuffer)\n sourceBuffer.appendBuffer(buff)\n await updateEnd\n if (this._currentIndex === this.length) {\n this.mediaSource.endOfStream()\n }\n }\n}\n\nasync function onSourceBufferReady(sourceBuffer: SourceBuffer): Promise<void> {\n if (!sourceBuffer.updating) return\n await onUpdateEnd(sourceBuffer)\n return onSourceBufferReady(sourceBuffer)\n}\n\n/**\n * Resolves on the next updateend event.\n * @param sourceBuffer\n * @private\n */\nfunction onUpdateEnd(sourceBuffer: SourceBuffer): Promise<void> {\n return new Promise((resolve) => {\n sourceBuffer.addEventListener(\n 'updateend',\n () => {\n resolve(void 0)\n },\n { once: true }\n )\n })\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AdBreakInfo,\n AdController,\n AdInfo,\n TrackAds,\n} from '../../../../src'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<AdController>()\nexport class MockAdController extends MockEventHost implements AdController {\n currentTrackAds: TrackAds | null = null\n currentAd: AdInfo | null = null\n currentAdBreak: AdBreakInfo | null = null\n\n setAdsProvider = spyFactory('setAdsProvider')\n failAd = spyFactory('failAd')\n skipAd = spyFactory('skipAd')\n skipAdBreak = spyFactory('skipAdBreak')\n enterPreroll = spyFactory('enterPreroll')\n enterPostroll = spyFactory('enterPostroll')\n\n constructor() {\n super()\n // enterPreroll/enterPostroll are awaited by the TrackController, so\n // default them to resolve with \"no roll\" (null); tests override with\n // resolveTo() as needed.\n this.enterPreroll.and.resolveTo(null)\n this.enterPostroll.and.resolveTo(null)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { type Capabilities } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<Capabilities>()\nexport class MockCapabilities implements Capabilities {\n sampleRate: number | null = null\n dash = false\n hls = false\n mse = false\n eme = false\n\n canPlayType = spyFactory('canPlayType')\n canPlayTypeMse = spyFactory('canPlayTypeMse')\n supportsKeySystem = spyFactory('supportsKeySystem')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Client } from '@amazon/vinyl'\nimport { MockCapabilities } from './MockCapabilities'\n\nexport class MockClient implements Client {\n capabilities = new MockCapabilities()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Required properties on AdaptationSetType\nimport { parseDashManifest } from '@amazon/vinyl-mpd-parser'\n\nexport const mockDashManifest = parseDashManifest(\n // language=XML\n `<?xml version=\"1.0\" ?>\n<MPD profiles=\"\" minBufferTime=\"PT0.0S\" type=\"static\" xmlns=\"urn:mpeg:dash:schema:mpd:2011\">\n <Period>\n <AdaptationSet>\n <Representation id=\"0\" bandwidth=\"0\"/>\n </AdaptationSet>\n </Period>\n</MPD>`\n)\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport type {\n DashManifestController,\n DashManifestData,\n ManifestControllerEventMap,\n} from '@amazon/vinyl'\nimport {\n type EventHandler,\n EventHostImpl,\n type SignalOptions,\n} from '@amazon/vinyl-util'\nimport { data } from '@amazon/vinyl-observable'\nimport { mockDashManifest } from './mockDashManifest'\n\nconst spyFactory = createSpyFactory<DashManifestController>()\n\n/**\n * Mock implementation of DashManifestController.\n *\n * Uses a real MutableValue internally so that map/pick/onData work correctly.\n */\nexport class MockDashManifestController implements DashManifestController {\n private readonly _data = data<Promise<DashManifestData>>(\n Promise.resolve({\n manifest: mockDashManifest,\n baseUrl: 'https://example.com',\n })\n )\n private readonly events = new EventHostImpl<ManifestControllerEventMap>()\n\n refresh = spyFactory('refresh')\n reset = spyFactory('reset')\n\n on<K extends keyof ManifestControllerEventMap>(\n type: K,\n handler: EventHandler<ManifestControllerEventMap[K]>,\n options?: SignalOptions\n ) {\n return this.events.on(type, handler, options)\n }\n\n dispatch<K extends keyof ManifestControllerEventMap>(\n type: K,\n event: ManifestControllerEventMap[K]\n ) {\n this.events.dispatch(type, event)\n }\n\n hasAnyListeners() {\n return this.events.hasAnyListeners()\n }\n\n hasListeners(type: keyof ManifestControllerEventMap) {\n return this.events.hasListeners(type)\n }\n\n readonly __eventMapType = this.events.__eventMapType\n\n get value() {\n return this._data.value\n }\n\n get changeId() {\n return this._data.changeId\n }\n\n getValue() {\n return this._data.getValue()\n }\n\n onData(\n callback: (\n value: Promise<DashManifestData>,\n previous: Promise<DashManifestData> | undefined\n ) => void\n ) {\n return this._data.onData(callback)\n }\n\n map<U>(transform: (value: Promise<DashManifestData>) => U) {\n return this._data.map(transform)\n }\n\n pick<K extends keyof NonNullable<Promise<DashManifestData>>>(prop: K) {\n return this._data.pick(prop)\n }\n\n setManifest(manifest: Promise<DashManifestData>) {\n this._data.value = manifest\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MockEvent } from '@amazon/vinyl-util/browserTestUtil'\n\nexport class MockMSMediaKeyError extends MockEvent implements MSMediaKeyError {\n static readonly MS_MEDIA_KEYERR_CLIENT = 1\n static readonly MS_MEDIA_KEYERR_DOMAIN = 2\n static readonly MS_MEDIA_KEYERR_HARDWARECHANGE = 3\n static readonly MS_MEDIA_KEYERR_OUTPUT = 4\n static readonly MS_MEDIA_KEYERR_SERVICE = 5\n static readonly MS_MEDIA_KEYERR_UNKNOWN = 6\n\n code: number = 0\n systemCode: number = 0\n\n constructor() {\n super()\n this.type = 'mskeyerror'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { MSMediaKeyMessageEvent } from '@amazon/vinyl'\nimport { MockEvent } from '@amazon/vinyl-util/browserTestUtil'\n\nexport class MockMSMediaKeyMessageEvent\n extends MockEvent\n implements MSMediaKeyMessageEvent\n{\n message = new Uint8Array(0)\n\n constructor() {\n super()\n this.type = 'mskeymessage'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DrmKeySystem } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<typeof MSMediaKeys & MSMediaKeys>()\n\nexport class MockMSMediaKeys implements MSMediaKeys {\n constructor(readonly keySystem: DrmKeySystem) {}\n\n createSession = spyFactory('createSession')\n\n static isTypeSupported = spyFactory('isTypeSupported')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n createSpyFactory,\n MockEventTarget,\n} from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<MSMediaKeySession>()\nexport class MockMSMediaKeySession\n extends MockEventTarget\n implements MSMediaKeySession\n{\n error: MSMediaKeyError | null = null\n keySystem = ''\n onmskeyadded = null\n onmskeyerror = null\n onmskeymessage = null\n sessionId = ''\n\n close = spyFactory('close')\n\n update = spyFactory('update')\n\n addEventListener = spyFactory('addEventListener')\n\n dispatchEvent = spyFactory('dispatchEvent')\n\n removeEventListener = spyFactory('removeEventListener')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MockEvent } from '@amazon/vinyl-util/browserTestUtil'\n\nexport class MockWebKitMediaKeyError\n extends MockEvent\n implements WebKitMediaKeyError\n{\n static readonly MEDIA_KEYERR_UNKNOWN = 1\n static readonly MEDIA_KEYERR_CLIENT = 2\n static readonly MEDIA_KEYERR_SERVICE = 3\n static readonly MEDIA_KEYERR_OUTPUT = 4\n static readonly MEDIA_KEYERR_HARDWARECHANGE = 5\n static readonly MEDIA_KEYERR_DOMAIN = 6\n code: number = 0\n systemCode: number = 0\n\n constructor() {\n super()\n this.type = 'webkitkeyerror'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { WebKitMediaKeyMessageEvent } from '@amazon/vinyl'\nimport { MockEvent } from '@amazon/vinyl-util/browserTestUtil'\n\nexport class MockWebKitMediaKeyMessageEvent\n extends MockEvent\n implements WebKitMediaKeyMessageEvent\n{\n message = new Uint8Array(0)\n\n constructor() {\n super()\n this.type = 'webkitkeymessage'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DrmKeySystem } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<typeof WebKitMediaKeys & WebKitMediaKeys>()\n\nexport class MockWebKitMediaKeys implements WebKitMediaKeys {\n constructor(public readonly keySystem: DrmKeySystem) {}\n\n createSession = spyFactory('createSession')\n\n static isTypeSupported = spyFactory('isTypeSupported')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n MockEventTarget,\n createSpyFactory,\n} from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<WebKitMediaKeySession>()\nexport class MockWebKitMediaKeySession\n extends MockEventTarget\n implements WebKitMediaKeySession\n{\n error: WebKitMediaKeyError | null = null\n keySystem = ''\n onwebkitkeyadded = null\n onwebkitkeyerror = null\n onwebkitkeymessage = null\n sessionId = ''\n\n close = spyFactory('close')\n\n update = spyFactory('update')\n\n addEventListener = spyFactory('addEventListener')\n\n dispatchEvent = spyFactory('dispatchEvent')\n\n removeEventListener = spyFactory('removeEventListener')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { overrideGlobalInit } from '@amazon/vinyl-util/testUtil'\nimport { mediaKeySupportRef } from '@amazon/vinyl'\n\n/**\n * Overrides media key support.\n */\nexport function useWebKitMediaKeys(present: boolean): void {\n overrideGlobalInit(mediaKeySupportRef, () => {\n return {\n webkitEme: present,\n standardEme: false,\n msEme: false,\n }\n })\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CommonEme } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<CommonEme>()\n\nexport class MockCommonEme implements CommonEme {\n requestMediaKeySystemAccess = spyFactory('requestMediaKeySystemAccess')\n\n addEncryptedListener = spyFactory('addEncryptedListener')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { type CommonMediaKeys, DrmKeySystem } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<CommonMediaKeys>()\nexport class MockCommonMediaKeys implements CommonMediaKeys {\n keySystem: DrmKeySystem = DrmKeySystem.CLEAR_KEY\n clearFromElement = spyFactory('clearFromElement')\n createSession = spyFactory('createSession')\n setOnElement = spyFactory('setOnElement')\n setServerCertificate = spyFactory('setServerCertificate')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DrmInitDataType } from '@amazon/vinyl'\nimport {\n type CommonMediaKeySession,\n type CommonMediaKeySessionEventMap,\n type EncryptedInitData,\n} from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<CommonMediaKeySession>()\nexport class MockCommonMediaKeySession\n extends MockEventHost<CommonMediaKeySessionEventMap>\n implements CommonMediaKeySession\n{\n initData: EncryptedInitData = new ArrayBuffer(0)\n initDataType: DrmInitDataType = 'cenc'\n mimeType = ''\n disposed = false\n\n update = spyFactory('update')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DrmKeySystem } from '@amazon/vinyl'\nimport { type CommonMediaKeySystemAccess } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<CommonMediaKeySystemAccess>()\n\nexport class MockCommonMediaKeySystemAccess implements CommonMediaKeySystemAccess {\n constructor(public keySystem: DrmKeySystem) {}\n\n createMediaKeys = spyFactory('createMediaKeys')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DrmController, DrmControllerEventMap } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<DrmController>()\nexport class MockDrmController\n extends MockEventHost<DrmControllerEventMap>\n implements DrmController\n{\n error: Error | null = null\n\n configure = spyFactory('configure')\n isEmeSupported = spyFactory('isEmeSupported')\n isSupported = spyFactory('isSupported')\n initializeForPlayback = spyFactory('initializeForPlayback')\n setBufferingDrmInfo = spyFactory('setBufferingDrmInfo')\n closeSessions = spyFactory('closeSessions')\n reset = spyFactory('reset')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n HlsMainPlaylist,\n HlsMediaPlaylist,\n} from '@amazon/vinyl-hls-parser'\nimport type { HlsManifestData } from '@amazon/vinyl'\n\nexport const mockMediaPlaylist: HlsMediaPlaylist = {\n version: 7,\n targetDuration: 6,\n mediaSequence: 1,\n playlistType: 'VOD',\n ended: true,\n segments: [\n {\n uri: 'segment0.mp4',\n duration: 6,\n sequenceNumber: 1,\n discontinuity: false,\n map: { uri: 'init.mp4' },\n },\n {\n uri: 'segment1.mp4',\n duration: 6,\n sequenceNumber: 2,\n discontinuity: false,\n map: { uri: 'init.mp4' },\n },\n ],\n dateRanges: [],\n}\n\nexport const mockMainPlaylist: HlsMainPlaylist = {\n variants: [\n {\n bandwidth: 500000,\n uri: 'low/prog_index.m3u8',\n codecs: 'avc1.640015,mp4a.40.2',\n width: 480,\n height: 270,\n frameRate: 30,\n audioGroup: 'aud1',\n },\n {\n bandwidth: 1000000,\n uri: 'high/prog_index.m3u8',\n codecs: 'avc1.64001e,mp4a.40.2',\n width: 640,\n height: 360,\n frameRate: 30,\n audioGroup: 'aud1',\n },\n ],\n alternativeRenditions: [\n {\n type: 'AUDIO',\n groupId: 'aud1',\n name: 'English',\n uri: 'audio/prog_index.m3u8',\n language: 'en',\n default: true,\n autoSelect: true,\n },\n ],\n sessionData: [],\n}\n\nexport const mockHlsManifestData: HlsManifestData = {\n mainPlaylist: mockMainPlaylist,\n baseUrl: 'https://example.com/main.m3u8',\n getMediaPlaylist: () => Promise.resolve(mockMediaPlaylist),\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport type {\n HlsManifestController,\n HlsManifestData,\n ManifestControllerEventMap,\n} from '@amazon/vinyl'\nimport {\n type EventHandler,\n EventHostImpl,\n type SignalOptions,\n} from '@amazon/vinyl-util'\nimport { data } from '@amazon/vinyl-observable'\nimport { mockHlsManifestData } from './mockHlsManifest'\n\nconst spyFactory = createSpyFactory<HlsManifestController>()\n\n/**\n * Mock implementation of HlsManifestController.\n *\n * Uses a real MutableValue internally so that map/pick/onData work correctly.\n */\nexport class MockHlsManifestController implements HlsManifestController {\n private readonly _data = data<Promise<HlsManifestData>>(\n Promise.resolve(mockHlsManifestData)\n )\n private readonly events = new EventHostImpl<ManifestControllerEventMap>()\n\n refresh = spyFactory('refresh')\n reset = spyFactory('reset')\n\n on<K extends keyof ManifestControllerEventMap>(\n type: K,\n handler: EventHandler<ManifestControllerEventMap[K]>,\n options?: SignalOptions\n ) {\n return this.events.on(type, handler, options)\n }\n\n hasAnyListeners() {\n return this.events.hasAnyListeners()\n }\n\n hasListeners(type: keyof ManifestControllerEventMap) {\n return this.events.hasListeners(type)\n }\n\n readonly __eventMapType = this.events.__eventMapType\n\n get value() {\n return this._data.value\n }\n\n get changeId() {\n return this._data.changeId\n }\n\n getValue() {\n return this._data.getValue()\n }\n\n onData(\n callback: (\n value: Promise<HlsManifestData>,\n previous: Promise<HlsManifestData> | undefined\n ) => void\n ) {\n return this._data.onData(callback)\n }\n\n map<U>(transform: (value: Promise<HlsManifestData>) => U) {\n return this._data.map(transform)\n }\n\n pick<K extends keyof NonNullable<Promise<HlsManifestData>>>(prop: K) {\n return this._data.pick(prop)\n }\n\n setManifest(manifest: Promise<HlsManifestData>) {\n this._data.value = manifest\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { HistoryLogHandler, HistoryLogItem } from '@amazon/vinyl-util'\nimport { LogLevel } from '@amazon/vinyl-util'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<HistoryLogHandler>()\nexport class MockHistoryLogHandler implements HistoryLogHandler {\n logLevel: LogLevel = LogLevel.DEBUG\n maxHistorySize = 0\n history: HistoryLogItem[] = []\n clear = spyFactory('clear')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n LoudnessNormalizationController,\n LoudnessNormalizationControllerEventMap,\n} from '@amazon/vinyl'\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<LoudnessNormalizationController>()\n\nexport class MockLoudnessNormalizationController\n extends MockEventHost<LoudnessNormalizationControllerEventMap>\n implements LoudnessNormalizationController\n{\n gain = 1.0\n setTrackLoudness = spyFactory('setTrackLoudness')\n clear = spyFactory('clear')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n PlaybackController,\n PlaybackControllerEventMap,\n} from '@amazon/vinyl'\nimport { PlaybackNetworkState, PlaybackReadyState } from '@amazon/vinyl'\nimport { RangesImpl } from '@amazon/vinyl-util'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<PlaybackController>()\n\nexport class MockPlaybackController\n extends MockEventHost<PlaybackControllerEventMap>\n implements PlaybackController\n{\n buffered = new RangesImpl()\n canPlay = false\n canPlayThrough = false\n currentTime = 0\n currentTimePercent = 0\n defaultPlaybackRate = 0\n duration = 0\n ended = false\n error: Error | null = null\n hasMetadata = false\n loop = false\n muted = false\n networkState: PlaybackNetworkState = PlaybackNetworkState.NETWORK_IDLE\n pause = spyFactory('pause')\n paused = false\n play = spyFactory('play')\n playIsPending = false\n playbackRate = 0\n playing = false\n preservesPitch = true\n readyState: PlaybackReadyState = PlaybackReadyState.HAVE_NOTHING\n reset = spyFactory('reset')\n seekTo = spyFactory('seekTo')\n seekable = new RangesImpl()\n seeking = false\n volume = 0\n waiting = false\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CrossOrigin, PlaybackSource } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<PlaybackSource>()\nexport class MockPlaybackSource implements PlaybackSource {\n crossOrigin: CrossOrigin = null\n currentSrc = ''\n src: string | null = null\n srcObject: MediaStream | null = null\n disableRemotePlayback = false\n\n load = spyFactory('load')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n createMediaTextTrackProvider,\n type DashFactoryDeps,\n defaultVinylOptions,\n type DrmKeySystemResolver,\n type VinylDeps,\n type VinylOptions,\n type VinylTrackFactoryDeps,\n} from '@amazon/vinyl'\nimport { MockCapabilities } from '../client/MockCapabilities'\nimport { MockPlaybackController } from '../playback/MockPlaybackController'\nimport { MockPlaybackSource } from '../playback/MockPlaybackSource'\nimport { MockTrackController } from '../track/MockTrackController'\nimport { createMockDashDependencies } from '../track/dash/createMockDashDependencies'\nimport { MockDrmController } from '../drm/MockDrmController'\nimport { MockAutoResetController } from '../track/MockAutoResetController'\nimport { externalDependencies } from '@amazon/vinyl-di'\nimport { noop } from '@amazon/vinyl-util'\nimport { data } from '@amazon/vinyl-observable'\nimport { MockAdController } from '../ad/MockAdController'\nimport createSpy = jasmine.createSpy\n\nexport type MockVinylDependencies = ReturnType<\n typeof createMockVinylDependencies\n>\n\n/**\n * Creates mock dependencies for the Vinyl Player and all track factories.\n */\nexport function createMockVinylDependencies() {\n const playbackController = new MockPlaybackController()\n const media = createMockMedia()\n return {\n options: data<VinylOptions>(defaultVinylOptions),\n trackController: new MockTrackController(),\n playbackSource: new MockPlaybackSource(),\n playbackController,\n capabilities: new MockCapabilities(),\n drmController: new MockDrmController(),\n media,\n textTrackProvider: createMediaTextTrackProvider({ media }),\n textTrackRenderer: null,\n createDashFactories: (_loadOptions) =>\n externalDependencies(createMockDashDependencies()),\n createHlsFactories: (_loadOptions) =>\n externalDependencies(createMockDashDependencies()) as any,\n autoResetController: new MockAutoResetController(),\n adController: new MockAdController(),\n requestInterceptor: noop,\n drmKeySystemResolver: createSpy<DrmKeySystemResolver>(\n 'drmKeySystemResolver'\n ).and.returnValue([]),\n } as const satisfies VinylDeps & VinylTrackFactoryDeps & DashFactoryDeps\n}\n\nfunction createMockMedia(): HTMLMediaElement {\n return {\n addTextTrack(): TextTrack {\n return {\n cues: { length: 0 } as unknown as TextTrackCueList,\n mode: 'disabled',\n addCue() {},\n removeCue() {},\n } as unknown as TextTrack\n },\n } as unknown as HTMLMediaElement\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n Track,\n TrackController,\n TrackControllerEventMap,\n TrackLoadOptions,\n} from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<TrackController<any>>()\n\nexport class MockTrackController<\n TrackLoadOptionsType extends TrackLoadOptions = TrackLoadOptions,\n>\n extends MockEventHost<TrackControllerEventMap<TrackLoadOptionsType>>\n implements TrackController<TrackLoadOptionsType>\n{\n activeTrack: Track | null = null\n\n currentAdTrack: Track | null = null\n\n queue: any[] = []\n\n clearPrefetch = spyFactory('clearPrefetch')\n clearQueue = spyFactory('clearQueue')\n clearTrackCache = spyFactory('clearTrackCache')\n enqueue = spyFactory('enqueue')\n getCachedTrack = spyFactory('getCachedTrack')\n getCachedTracks = spyFactory('getCachedTracks')\n hasNext = spyFactory('hasNext')\n isTrackCached = spyFactory('isTrackCached')\n load = spyFactory('load')\n next = spyFactory('next')\n preload = spyFactory('preload')\n unload = spyFactory('unload')\n reset = spyFactory('reset')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type ContentType,\n createEmptyMediaQualityMetadata,\n type DashMediaQualityMetadataResolver,\n type DashTrackDeps,\n defaultQualitySelectorImplOptions,\n type MediaTimeline,\n type VinylOptions,\n} from '@amazon/vinyl'\nimport { MockDashManifestController } from '../../dash/MockDashManifestController'\nimport { MockMediaSourceController } from '../../streaming/buffering/MockMediaSourceController'\nimport { MockPlaybackSource } from '../../playback/MockPlaybackSource'\nimport { MockContentStream } from '../../streaming/MockContentStream'\nimport { MockPlaybackController } from '../../playback/MockPlaybackController'\nimport { MockDrmController } from '../../drm/MockDrmController'\nimport { MockTextTrackController } from '../../text/MockTextTrackController'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { data } from '@amazon/vinyl-observable'\n\nimport createSpy = jasmine.createSpy\n\nconst emptyTimeline: MediaTimeline = {\n periods: [],\n minBufferTime: 0,\n getAdBreaks: () => Promise.resolve([]),\n getDuration: () => Promise.resolve(Infinity),\n}\n\nconst spyFactory = createSpyFactory<DashTrackDeps>()\nexport function createMockDashDependencies() {\n const playbackController = new MockPlaybackController()\n playbackController.seekTo.and.resolveTo(void 0)\n\n const manifestController = new MockDashManifestController()\n\n return {\n textTrackController: new MockTextTrackController(),\n contentTypesValue: data(Promise.resolve(new Set<ContentType>())),\n contentStreamFactory: spyFactory('contentStreamFactory').and.callFake(\n (contentType) => {\n const stream = new MockContentStream()\n stream.contentType = contentType\n return stream\n }\n ),\n manifestController,\n manifestTransformed: manifestController,\n mediaTimeline: data(Promise.resolve(emptyTimeline)),\n mediaTimelineTransformed: data(Promise.resolve(emptyTimeline)),\n mediaSourceController: new MockMediaSourceController(),\n playbackSource: new MockPlaybackSource(),\n playbackController,\n drmController: new MockDrmController(),\n mediaQualityMetadataResolver:\n createSpy<DashMediaQualityMetadataResolver>().and.callFake(() =>\n createEmptyMediaQualityMetadata()\n ),\n audio: data<VinylOptions['audio']>({\n selection: { language: null, descriptive: false },\n }),\n allowedContentTypes: data<VinylOptions['allowedContentTypes']>(null),\n abr: data<VinylOptions['abr']>(defaultQualitySelectorImplOptions),\n } as const satisfies DashTrackDeps\n}\n\nexport type MockDashDependencies = ReturnType<typeof createMockDashDependencies>\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport {\n type MediaSourceController,\n type MediaSourceControllerEventMap,\n} from '@amazon/vinyl'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<MediaSourceController>()\n\nexport class MockMediaSourceController\n extends MockEventHost<MediaSourceControllerEventMap>\n implements MediaSourceController\n{\n readyState: ReadyState = 'closed'\n createSourceBuffer = spyFactory('createSourceBuffer')\n endOfStream = spyFactory('endOfStream')\n activate = spyFactory('activate')\n deactivate = spyFactory('deactivate')\n readyToAppend = false\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n ContentStream,\n ContentType,\n MediaQualityMetadata,\n StreamingEventMap,\n} from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\nimport { RangesImpl } from '@amazon/vinyl-util'\n\nconst spyFactory = createSpyFactory<ContentStream>()\n\nexport class MockContentStream\n extends MockEventHost<StreamingEventMap>\n implements ContentStream\n{\n contentType: ContentType = 'audio'\n bufferingQuality: MediaQualityMetadata | null = null\n error: Error | null = null\n fetchedRanges = new RangesImpl()\n playbackQuality: MediaQualityMetadata | null = null\n streamingQuality: MediaQualityMetadata | null = null\n bufferingEnded = false\n\n clearPrefetch = spyFactory('clearPrefetch')\n\n activate = spyFactory('activate')\n\n deactivate = spyFactory('deactivate')\n\n preload = spyFactory('preload')\n\n reset = spyFactory('reset')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TextTrackController, TextTrackInfo } from '../../../../src'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nconst spyFactory = createSpyFactory<TextTrackController>()\n\nexport class MockTextTrackController\n extends MockEventHost\n implements TextTrackController\n{\n textTracks: readonly TextTrackInfo[] = []\n activeTextTrack: TextTrackInfo | null = null\n active = false\n\n deactivate = spyFactory('deactivate')\n activate = spyFactory('activate')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AutoResetController,\n AutoResetControllerEventMap,\n} from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<AutoResetController>()\nexport class MockAutoResetController\n extends MockEventHost<AutoResetControllerEventMap>\n implements AutoResetController\n{\n setError = spyFactory('setError')\n clear = spyFactory('clear')\n resetPending = false\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport type { QualitySelector } from '@amazon/vinyl'\n\nconst spyFactory = createSpyFactory<QualitySelector>()\n\nexport class MockQualitySelector implements QualitySelector {\n selectQuality = spyFactory('selectQuality')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport type {\n BufferingController,\n BufferingControllerEventMap,\n MediaQualityMetadata,\n} from '@amazon/vinyl'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<BufferingController>()\n\nexport class MockBufferingController\n extends MockEventHost<BufferingControllerEventMap>\n implements BufferingController\n{\n error: Error | null = null\n active = false\n bufferingEnded = false\n playbackQuality: MediaQualityMetadata | null = null\n bufferingQuality: MediaQualityMetadata | null = null\n activate = spyFactory('activate')\n deactivate = spyFactory('deactivate')\n clear = spyFactory('clear')\n reset = spyFactory('reset')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { type SourceBufferController } from '@amazon/vinyl'\n\nimport { RangesImpl } from '@amazon/vinyl-util'\n\nconst spyFactory = createSpyFactory<SourceBufferController>()\n\nexport class MockSourceBufferController implements SourceBufferController {\n buffered = new RangesImpl()\n\n append = spyFactory('append')\n\n appendInit = spyFactory('appendInit')\n\n clear = spyFactory('clear')\n\n enqueue = spyFactory('enqueue')\n\n isBusy = spyFactory('isBusy')\n\n remove = spyFactory('remove')\n\n setAppendWindow = spyFactory('setAppendWindow')\n\n setTimestampOffset = spyFactory('setTimestampOffset')\n\n dispose = spyFactory('dispose')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport {\n type MediaQualityMetadata,\n type SegmentController,\n type SegmentControllerEventMap,\n} from '@amazon/vinyl'\nimport { emptyRanges } from '@amazon/vinyl-util'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<SegmentController>()\n\nexport class MockSegmentController\n extends MockEventHost<SegmentControllerEventMap>\n implements SegmentController\n{\n error: Error | null = null\n\n configure = spyFactory('configure')\n\n fetchedRanges = emptyRanges\n\n activate = spyFactory('activate')\n\n clear = spyFactory('clear')\n\n deactivate = spyFactory('deactivate')\n\n getSegment = spyFactory('getSegment')\n\n streamingQuality: MediaQualityMetadata | null = null\n\n reset = spyFactory('reset')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type ContentType,\n createEmptyMediaQualityMetadata,\n defaultQualitySelectorImplOptions,\n type HlsMediaQualityMetadataResolver,\n type HlsTrackDeps,\n type MediaTimeline,\n type VinylOptions,\n} from '@amazon/vinyl'\nimport { MockHlsManifestController } from '../../hls/MockHlsManifestController'\nimport { MockMediaSourceController } from '../../streaming/buffering/MockMediaSourceController'\nimport { MockPlaybackSource } from '../../playback/MockPlaybackSource'\nimport { MockContentStream } from '../../streaming/MockContentStream'\nimport { MockPlaybackController } from '../../playback/MockPlaybackController'\nimport { MockDrmController } from '../../drm/MockDrmController'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { data } from '@amazon/vinyl-observable'\n\nimport createSpy = jasmine.createSpy\n\nconst emptyTimeline: MediaTimeline = {\n periods: [],\n minBufferTime: 0,\n getAdBreaks: () => Promise.resolve([]),\n getDuration: () => Promise.resolve(Infinity),\n}\n\nconst spyFactory = createSpyFactory<HlsTrackDeps>()\nexport function createMockHlsDependencies() {\n const playbackController = new MockPlaybackController()\n playbackController.seekTo.and.resolveTo(void 0)\n\n const manifestController = new MockHlsManifestController()\n\n return {\n contentTypesValue: data(Promise.resolve(new Set<ContentType>())),\n contentStreamFactory: spyFactory('contentStreamFactory').and.callFake(\n (contentType) => {\n const stream = new MockContentStream()\n stream.contentType = contentType\n return stream\n }\n ),\n manifestController,\n manifestTransformed: manifestController.map((v) => v),\n mediaTimeline: data(Promise.resolve(emptyTimeline)),\n mediaTimelineTransformed: data(Promise.resolve(emptyTimeline)),\n mediaSourceController: new MockMediaSourceController(),\n playbackSource: new MockPlaybackSource(),\n playbackController,\n drmController: new MockDrmController(),\n mediaQualityMetadataResolver:\n createSpy<HlsMediaQualityMetadataResolver>().and.callFake(() =>\n createEmptyMediaQualityMetadata()\n ),\n audio: data<VinylOptions['audio']>({\n selection: { language: null, descriptive: false },\n }),\n allowedContentTypes: data<VinylOptions['allowedContentTypes']>(null),\n abr: data<VinylOptions['abr']>(defaultQualitySelectorImplOptions),\n } as const satisfies HlsTrackDeps\n}\n\nexport type MockHlsDependencies = ReturnType<typeof createMockHlsDependencies>\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type AdController,\n type ContentType,\n type MediaQualityMetadata,\n type SeekRange,\n type TextTrackController,\n type Track,\n type TrackAds,\n type TrackEventMap,\n} from '@amazon/vinyl'\nimport { RangesImpl } from '@amazon/vinyl-util'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\nimport { MockEventHost } from '@amazon/vinyl-util/testUtil'\n\nconst spyFactory = createSpyFactory<Track>()\n\nexport class MockTrack extends MockEventHost<TrackEventMap> implements Track {\n get [Symbol.toStringTag](): string {\n return `MockTrack(${this.uri})`\n }\n\n ads: TrackAds | null = null\n\n /**\n * Resolves the track's ads. Mirrors the real async `getAds()` contract; the\n * `ads` field is the backing value (defaulting to an empty break list).\n */\n getAds(): Promise<TrackAds> {\n return Promise.resolve(this.ads ?? { trackUri: this.uri, adBreaks: [] })\n }\n\n uri = ''\n type = ''\n active = false\n fetchedRanges = new RangesImpl()\n preload = spyFactory('preload')\n contentTypes: Set<ContentType> = new Set()\n qualities: readonly MediaQualityMetadata[] | null = null\n qualitiesUnfiltered: readonly MediaQualityMetadata[] | null = null\n getStreamingQuality = spyFactory('getStreamingQuality')\n getBufferingQuality = spyFactory('getBufferingQuality')\n getPlaybackQuality = spyFactory('getPlaybackQuality')\n extra: any = undefined\n error: Error | null = null\n textTrackController: TextTrackController | null = null\n adController: AdController | null = null\n seekRange: SeekRange | null = null\n\n activate = spyFactory('activate')\n deactivate = spyFactory('deactivate')\n\n clearPrefetch = spyFactory('clearPrefetch')\n reset = spyFactory('reset')\n disposed = false\n\n /**\n * Installs fakes for activate and deactivate to set active status.\n */\n implementActivateFakes() {\n this.activate.and.callFake(() => {\n this.active = true\n })\n this.deactivate.and.callFake(() => {\n this.active = false\n })\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TrackFactory, TrackLoadOptions } from '@amazon/vinyl'\nimport { createSpyFactory } from '@amazon/vinyl-util/browserTestUtil'\n\nexport class MockTrackFactory<\n TrackLoadOptionsType extends TrackLoadOptions = TrackLoadOptions,\n> implements TrackFactory<TrackLoadOptionsType> {\n private readonly spyFactory =\n createSpyFactory<TrackFactory<TrackLoadOptionsType>>()\n\n validate = this.spyFactory('validate')\n createTrack = this.spyFactory('createTrack')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n createVinylPlayer,\n type VinylDependencyOptions,\n type VinylPlayer,\n} from '@amazon/vinyl'\nimport {\n createDisposer,\n logError,\n toJson,\n type Unsubscribe,\n} from '@amazon/vinyl-util'\nimport {\n createLogPrefix,\n createRequester,\n getGlobalRegistry,\n IllegalStateError,\n logDebug,\n requesterWithRetryRef,\n RetryStrategy,\n} from '@amazon/vinyl-util'\nimport { setTestTimeout } from '@amazon/vinyl-util/browserTestUtil'\nimport { MEDIA_VOLUME, mediaRef } from './mediaRef'\nimport { ANALYZER_VOLUME, shouldCheckAudio } from '../media/FrequencyAnalyzer'\n\nexport interface VinylSuiteOptions {\n /**\n * The number of seconds before the tests in this suite time out.\n * Default is 60s.\n */\n readonly timeout?: number\n\n /**\n * If true, will fail the test on error events.\n * default: true\n */\n readonly failOnError?: boolean\n}\n\nexport class VinylSuite<T extends VinylPlayer<any, any> = VinylPlayer> {\n get [Symbol.toStringTag](): string {\n return 'VinylSuite'\n }\n readonly logPrefix = createLogPrefix(this)\n\n private _player: T | null = null\n\n get player(): T {\n if (!this._player)\n throw new IllegalStateError(\n 'player cannot be accessed outside of a test'\n )\n return this._player\n }\n\n private readonly visibilityChangeHandler = () => {\n if (document.visibilityState === 'hidden') {\n fail('The window must remain visible during the tests.')\n }\n }\n\n constructor(\n /**\n * Constructs a new player.\n */\n private readonly playerFactory: () => T,\n protected readonly options?: VinylSuiteOptions\n ) {}\n\n /**\n * Initializes jasmine test setup.\n */\n init() {\n let playerSub: Unsubscribe | null = null\n setTestTimeout(this.options?.timeout ?? 60)\n beforeEach(() => {\n const { add, dispose } = createDisposer()\n playerSub = dispose\n // Browserstack's network is flaky and prone to transient drops;\n // give integ requests more retries than the production default.\n requesterWithRetryRef.set(() =>\n createRequester({\n retryOptions: { ...RetryStrategy.ONE_RETRY, retries: 3 },\n })\n )\n document.addEventListener(\n 'visibilitychange',\n this.visibilityChangeHandler\n )\n this._player = this.playerFactory()\n // Through the player, so loudness normalization scales this volume rather than replacing it.\n this._player.volume = shouldCheckAudio\n ? ANALYZER_VOLUME\n : MEDIA_VOLUME\n add(\n this._player.on('error', (e) => {\n logError(this, 'player emitted error event', toJson(e))\n })\n )\n if (this.options?.failOnError !== false) {\n add(\n this._player.on('error', (e) => {\n fail(e.error)\n })\n )\n }\n })\n\n afterEach(() => {\n logDebug(this, 'disposing')\n if (playerSub) playerSub()\n this._player?.dispose()\n this._player = null\n document.removeEventListener(\n 'visibilitychange',\n this.visibilityChangeHandler\n )\n getGlobalRegistry().reset()\n })\n }\n}\n\n/**\n * Prepares an integration test for a Vinyl Player.\n * This will create a player, handle disposal and global cleanup, and watch for window\n * visibility changes, which can interfere with test results.\n */\nexport function createVinylSuite(\n playerDependencyOptions?: Partial<VinylDependencyOptions>,\n options?: VinylSuiteOptions\n): VinylSuite {\n const suite = new VinylSuite(() => {\n return createVinylPlayer({\n ...playerDependencyOptions,\n media: mediaRef.value,\n })\n }, options)\n suite.init()\n return suite\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type ChangeEvent,\n nextHasMetadata,\n type ReadonlyPlaybackController,\n} from '@amazon/vinyl'\nimport { nextEventAsPromise } from '@amazon/vinyl-util'\n\n/**\n * Waits until the playbackController is in a playing state.\n *\n * @param playbackController The playbackController reference. Can be the player.\n * @param timeout The timeout (in seconds) before the promise will reject with a timeout.\n */\nexport async function onPlaying(\n playbackController: ReadonlyPlaybackController,\n timeout = 30\n): Promise<void> {\n if (playbackController.playing) return Promise.resolve()\n return nextEventAsPromise(playbackController, 'playing', {\n timeout,\n timeoutMessage: 'playing timed out after {time}s',\n }).then(() => void 0)\n}\n\n/**\n * Resolves when the playbackController has enough data to play audio without stopping.\n *\n * @param playbackController The playbackController reference. Can be the player.\n * @param timeout The timeout (in seconds) before the promise will reject with a timeout.\n */\nexport async function onCanPlayThrough(\n playbackController: ReadonlyPlaybackController,\n timeout = 20\n): Promise<void> {\n if (playbackController.canPlayThrough) return Promise.resolve()\n return nextEventAsPromise(playbackController, 'canPlayThrough', {\n timeout,\n timeoutMessage: 'canPlayThrough timed out after {time}s',\n }).then(() => void 0)\n}\n\n/**\n * Returns a promise that resolves when the playbackController is next in an 'ended' state.\n *\n * @param playbackController The playbackController reference. Can be the player.\n * @param timeout The timeout beyond the remaining track time in which the promise will be\n * rejected with a timeout error.\n * @param metadataTimeout The timeout to await metadata, if metadata is not currently loaded.\n */\nexport async function onEnded(\n playbackController: ReadonlyPlaybackController,\n timeout = 10,\n metadataTimeout = 10\n): Promise<void> {\n if (playbackController.ended) return Promise.resolve()\n await nextHasMetadata(playbackController, { timeout: metadataTimeout })\n return nextEventAsPromise(playbackController, 'ended', {\n // Set the timeout to be the remaining track duration plus a large margin of error for stalls and seek\n // inaccuracy.\n timeout:\n playbackController.duration -\n playbackController.currentTime +\n timeout,\n timeoutMessage: 'ended timed out after {time}s',\n }).then(() => void 0)\n}\n\n/**\n * Returns a promise that resolves after the next 'timeUpdate' event.\n *\n * @param playbackController The playbackController reference. Can be the player.\n * @param timeout The timeout (in seconds) before the promise will reject with a timeout.\n */\nexport function onTimeUpdate(\n playbackController: ReadonlyPlaybackController,\n timeout = 10\n): Promise<ChangeEvent<number>> {\n return nextEventAsPromise(playbackController, 'timeUpdate', {\n timeout,\n timeoutMessage: 'timeUpdate timed out after {time}s',\n })\n}\n\n/**\n * Returns a promise that resolves when the duration is non-zero.\n *\n * @param playbackController The playbackController reference. Can be the player.\n * @param timeout The timeout (in seconds) before the promise will reject with a timeout.\n */\nexport function onDuration(\n playbackController: ReadonlyPlaybackController,\n timeout = 10\n): Promise<void> {\n if (playbackController.duration > 0) return Promise.resolve()\n return nextEventAsPromise(playbackController, 'durationChange', {\n timeout,\n timeoutMessage: 'durationChange timed out after {time}s',\n }).then(() => void 0)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getMinSeekableBufferDefault, type VinylPlayer } from '@amazon/vinyl'\nimport { noop } from '@amazon/vinyl-util'\nimport { createDisposer } from '@amazon/vinyl-util'\nimport { closeTo } from '@amazon/vinyl-util'\nimport { clamp } from '@amazon/vinyl-util'\nimport { createEventSpy } from '@amazon/vinyl-util/testUtil'\nimport {\n expectPausedState,\n expectPlayingState,\n expectTimeDoesNotElapse,\n expectTimeElapses,\n} from './playbackStateExpectations'\nimport { onPlaying } from './eventPromises'\nimport { assertFrequency } from '../../media/FrequencyAnalyzer'\n\nexport async function expectTrackCanSeekTo(player: VinylPlayer, time: number) {\n const tolerance = 0.5\n const { dispose, add } = createDisposer()\n const playedSpy = add(createEventSpy(player, 'played'))\n const seekingSpy = add(createEventSpy(player, 'seeking'))\n const seekedSpy = add(createEventSpy(player, 'seeked'))\n // A seek can be re-issued (WebKit sometimes lands the play head off\n // target), producing several seeking/seeked pairs. Track order so we can\n // assert a seeking preceded the first seeked without requiring a single,\n // non-interleaved pair.\n const eventOrder: string[] = []\n add(player.on('seeking', () => eventOrder.push('seeking')))\n add(player.on('seeked', () => eventOrder.push('seeked')))\n const wasPaused = player.paused\n if (player.playing) {\n seekingSpy\n .next()\n .then(() => {\n // If playing before the seek, a played event is expected.\n // Note, there may be another played event before 'seeked' on certain platforms if a playing/waiting pair\n // happens during the seek.\n expect(playedSpy).toHaveBeenCalledBefore(seekingSpy)\n })\n .catch(noop)\n }\n\n // Expected sequence during a seek:\n // played - if playing\n // seeking\n // timeUpdate\n // seeked\n // loading events such as progress, canPlay, waiting (not tested here)\n // playing - if not paused and can play from new position\n const expectNoop = closeTo(player.currentTime, time, tolerance)\n await player.seekTo(time, tolerance)\n\n // The end-of-range seek buffer is reserved only while playing (so playback\n // can resume near the end); a paused seek lands right up to the range end.\n const expectedTime = clamp(\n time,\n 0,\n player.duration - (wasPaused ? 0 : getMinSeekableBufferDefault())\n )\n // Needs a large tolerance; browser implementations of seek may be imprecise.\n expect(player.currentTime).toBeCloseToWithin(expectedTime, 1)\n\n if (expectNoop) {\n // Seek expected to no-op\n expect(seekingSpy).not.toHaveBeenCalled()\n expect(seekedSpy).not.toHaveBeenCalled()\n } else {\n // Event expectations:\n // If playing before seekTo: played, seeking, seeked\n // If paused: seeking, seeked.\n // A seeking must precede the first seeked (re-issued seeks allowed).\n expect(eventOrder[0]).withContext('first seek event').toBe('seeking')\n\n expect(player.paused).withContext('paused').toBe(wasPaused)\n if (wasPaused) {\n expectPausedState(player)\n await expectTimeDoesNotElapse(player)\n } else {\n // If the track was not paused and the new seek position can be played from, then\n // expect that playback resumes\n await onPlaying(player)\n expectPlayingState(player)\n await assertFrequency()\n await expectTimeElapses(player)\n }\n }\n\n dispose()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ReadonlyPlaybackController } from '@amazon/vinyl'\nimport { sleep } from '@amazon/vinyl-util'\nimport { nextEventAsPromise } from '@amazon/vinyl-util'\nimport { closeTo } from '@amazon/vinyl-util'\nimport { expectNothing } from '@amazon/vinyl-util/browserTestUtil'\n\n/**\n * Expects that the play head does not progress from the current time.\n * This is done with some flexibility; iOS for example after a pause may take some time to settle.\n */\nexport async function expectTimeDoesNotElapse(\n player: ReadonlyPlaybackController\n) {\n const startTime = player.currentTime\n await sleep(0.5)\n if (closeTo(player.currentTime, startTime, 0.1)) {\n // After a short delay, time did not change.\n expectNothing()\n } else {\n // Increase the tolerance and wait longer.\n await sleep(2)\n expect(player.currentTime)\n .withContext('expectTimeDoesNotElapse')\n .toBeCloseToWithin(startTime, 0.3)\n }\n}\n\n/**\n * Expects that time progresses at least 0.5s within a timeout.\n */\nexport async function expectTimeElapses(player: ReadonlyPlaybackController) {\n // Waiting a set amount of time and querying currentTime is unreliable, even after\n // awaiting canPlayThrough.\n // Instead, assert that currentTime progresses within a time window.\n const minTimeDelta = 0.5\n const startTime = player.currentTime\n await nextEventAsPromise(player, 'timeUpdate', {\n filter: () => player.currentTime > startTime + minTimeDelta,\n timeout: 4,\n timeoutMessage: `currentTime did not progress at least ${minTimeDelta}s after {time} seconds.`,\n })\n}\n\n/**\n * Expects the player to be in a paused state.\n */\nexport function expectPausedState(player: ReadonlyPlaybackController) {\n expect(player.paused).withContext('paused').toBeTrue()\n expect(player.playing).withContext('not playing').toBeFalse()\n}\n\n/**\n * Expects the player to be in a playing state.\n */\nexport function expectPlayingState(player: ReadonlyPlaybackController) {\n expect(player.playIsPending).withContext('not pending play').toBeFalse()\n expect(player.paused).withContext('not paused').toBeFalse()\n expect(player.playing).withContext('playing').toBeTrue()\n}\n\n/**\n * Expects the current state to be pending play.\n */\nexport function expectPendingPlaying(player: ReadonlyPlaybackController) {\n expect(player.playIsPending).withContext('pending play').toBeTrue()\n expect(player.playing).withContext('pending, not playing').toBeFalse()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { VinylPlayer } from '@amazon/vinyl'\nimport { type TrackLoadOptions } from '@amazon/vinyl'\nimport { createDisposer } from '@amazon/vinyl-util'\nimport { createEventSpy } from '@amazon/vinyl-util/testUtil'\nimport { onDuration } from './eventPromises'\nimport { expectTrackPlaysUntil } from './expectTrackPlaysUntil'\n\n/**\n * The total amount of time to allow playback for a play test.\n * Plays for PLAYBACK_DURATION / 2, seeks to duration - PLAYBACK_DURATION / 2 and finishes the\n * track.\n */\nconst PLAYBACK_DURATION = 6\n\nexport interface ExpectTrackPlaysOptions {\n /**\n * Multiplies the time allowed to play, for environments that play slower than real time. Default: 1\n */\n readonly timeoutScale?: number\n}\n\nexport async function expectTrackPlays(\n player: VinylPlayer<any>,\n { timeoutScale = 1 }: ExpectTrackPlaysOptions = {}\n): Promise<void> {\n const { dispose, add } = createDisposer()\n const ended = add(createEventSpy(player, 'ended'))\n const timeUpdate = add(createEventSpy(player, 'timeUpdate'))\n expect(player.currentTime)\n .withContext('currentTime starts near the beginning')\n .toBeLessThan(1)\n await onDuration(player) // Wait for duration to be non-zero\n const duration = player.duration\n expect(duration)\n .withContext('duration should be non-zero')\n .toBeGreaterThan(0)\n\n if (player.duration > PLAYBACK_DURATION) {\n // For longer tracks, play from the beginning, then seek to near the end\n // All tracks will play for at most PLAYBACK_DURATION seconds.\n await expectTrackPlaysUntil(\n player,\n player.currentTime + PLAYBACK_DURATION / 2,\n undefined,\n { timeoutScale }\n )\n const time = player.duration - PLAYBACK_DURATION / 2\n await player.seekTo(time)\n }\n\n // Expect that playback continues until the end of the track.\n // Do not use expectTrackPlaysUntil; if there is another track in the queue\n // the expectation will fail due to the next track starting.\n // Add a large buffer for the timeout; Seeking in a progressive track\n // can take a long time on some browsers.\n await ended.next((PLAYBACK_DURATION + 10) * timeoutScale)\n expect(player.currentTime).toBeCloseToWithin(duration, 3)\n expect(player.ended).withContext('ended').toBeTrue()\n // Expect at least one update per second. This varies among platforms.\n expect(timeUpdate.calls.count()).toBeGreaterThanOrEqual(\n Math.floor(PLAYBACK_DURATION)\n )\n dispose()\n}\n\n/**\n * Asserts that every track in a playlist plays.\n * Has assertions for queue events, playback events, time updates, duration,\n * track changes.\n *\n * @param player\n * @param playlist\n * @param options\n */\nexport async function expectPlaylistPlays<T extends TrackLoadOptions>(\n player: VinylPlayer<T>,\n playlist: T[],\n { timeoutScale = 1 }: ExpectTrackPlaysOptions = {}\n): Promise<void> {\n const { dispose, add } = createDisposer()\n // Add a significant buffer to the timeout; progressive tracks can take a long time to load after a seek.\n const trackTimeout = (PLAYBACK_DURATION + 60) * timeoutScale // Timeout to give each track\n const queueEnded = add(createEventSpy(player, 'queueEnded'))\n const queueChange = add(createEventSpy(player, 'queueChange'))\n const trackChange = add(createEventSpy(player, 'trackActivated'))\n function assertQueueChangeCount(count: number) {\n expect(queueChange).toHaveBeenCalledTimes(count)\n queueChange.calls.reset()\n }\n player.load(...playlist)\n assertQueueChangeCount(1)\n\n await player.play()\n for (let i = 0; i < playlist.length; i++) {\n const isLastTrack = i === playlist.length - 1\n expect(player.activeTrack?.uri)\n .withContext('activeTrack uri')\n .toBe(playlist[i].uri)\n const nextTrack = isLastTrack\n ? queueEnded.next(trackTimeout)\n : trackChange.next(trackTimeout)\n await Promise.all([\n expectTrackPlays(player, { timeoutScale }),\n nextTrack,\n ])\n assertQueueChangeCount(isLastTrack ? 0 : 1)\n }\n dispose()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { onPlaying, onTimeUpdate } from './eventPromises'\nimport { assertFrequency } from '../../media/FrequencyAnalyzer'\nimport type { ReadonlyPlaybackController } from '@amazon/vinyl'\nimport { sleep } from '@amazon/vinyl-util'\n\nconst sleepInterval = 1\nconst affordanceBefore = 1\nconst affordanceAfter = 3\n\n/**\n * Plays until a given end time. If the end time is not reached in an acceptable\n * time frame, the test fails.\n *\n * @param player\n * @param endTime\n * @param timeout A timeout beyond the expected amount of time to play.\n * This does not affect waiting for ready state.\n * @param timeoutScale Multiplies the time allowed to play, for environments that play slower than real time.\n */\nexport async function expectTrackPlaysUntil(\n player: ReadonlyPlaybackController,\n endTime: number,\n timeout = 20,\n { timeoutScale = 1 }: { readonly timeoutScale?: number } = {}\n) {\n await onPlaying(player)\n // Safari does not always have an updated currentTime after a seeked event. Await the next time update before\n // asserting currentTime values.\n await onTimeUpdate(player)\n // The playhead may already be at or past endTime when playback resumes\n // from a seek or track reload. Only require forward progress (and bound the\n // overshoot) when playback actually started before endTime; otherwise the\n // target is already satisfied.\n const startedBeforeEnd = player.currentTime < endTime\n await assertFrequency()\n\n let elapsed = 0\n const maxTime = (endTime - player.currentTime + timeout) * timeoutScale\n while (!player.ended && player.currentTime < endTime && elapsed < maxTime) {\n await sleep(sleepInterval)\n elapsed += sleepInterval\n }\n expect(player.currentTime)\n .withContext('currentTime')\n .toBeGreaterThanOrEqual(endTime - affordanceBefore)\n if (startedBeforeEnd) {\n expect(player.currentTime)\n .withContext('currentTime')\n .toBeLessThan(endTime + affordanceAfter)\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAUO,IAAM,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACClC,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACDzB,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEzB,IAAM,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACgBnC,IAAM,kBAAkB;AAAA,EAC3B,MAAM;AAAA,IACF,yCAAyC;AAAA,IACzC,2CAA2C;AAAA,IAC3C,wCAAwC;AAAA,EAC5C;AAAA,EACA,MAAM;AAAA,IACF,+CAA+C;AAAA,IAC/C,2CAA2C;AAAA,IAC3C,2CAA2C;AAAA,IAC3C,gDAAgD;AAAA,IAChD,gDAAgD;AAAA,IAChD,8DAA8D;AAAA,IAC9D,8DAA8D;AAAA,IAC9D,0CAA0C;AAAA,IAC1C,0CAA0C;AAAA,IAC1C,yDAAyD;AAAA,IACzD,oDAAoD;AAAA,IACpD,iDAAiD;AAAA;AAAA;AAAA,IAIjD,oCAAoC;AAAA,IACpC,sCAAsC;AAAA;AAAA;AAAA;AAAA,IAKtC,oBAAoB;AAAA,IACpB,uBAAuB;AAAA;AAAA;AAAA;AAAA,IAIvB,wCAAwC;AAAA,IACxC,qCAAqC;AAAA,IACrC,0CAA0C;AAAA,IAC1C,uCAAuC;AAAA,IACvC,mCAAmC;AAAA,IACnC,oCAAoC;AAAA;AAAA;AAAA,IAGpC,8BAA8B;AAAA,IAC9B,iCAAiC;AAAA,IACjC,yCAAyC;AAAA,EAC7C;AAAA,EACA,KAAK;AAAA,IACD,gCAAgC;AAAA,IAChC,gCAAgC;AAAA,IAChC,+BAA+B;AAAA,IAC/B,4BAA4B;AAAA,IAC5B,0BAA0B;AAAA,IAC1B,0BAA0B;AAAA,IAC1B,iCAAiC;AAAA,IACjC,iCAAiC;AAAA,IACjC,uCAAuC;AAAA,IACvC,uCAAuC;AAAA;AAAA;AAAA,IAIvC,oBAAoB;AAAA,IACpB,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,IAMtB,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,6CAA6C;AAAA,IAC7C,wCAAwC;AAAA,IACxC,+CAA+C;AAAA,IAC/C,sCAAsC;AAAA,IACtC,4CAA4C;AAAA,IAC5C,gDAAgD;AAAA,IAChD,qDAAqD;AAAA,IACrD,gDAAgD;AAAA,IAChD,2CAA2C;AAAA,IAC3C,kDAAkD;AAAA;AAAA,IAElD,iCAAiC;AAAA,IACjC,qCAAqC;AAAA,EACzC;AAAA;AAAA;AAAA,EAIA,oBAAoB;AAAA,IAChB,kCAAkC;AAAA,MAC9B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACd;AAAA;AAAA;AAAA,IAIA,gDAAgD;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACd;AAAA,EACJ;AACJ;;;AC7HA,SAAS,uBAAuB;AAChC,SAAyB,oBAAoB;AAC7C,SAAS,aAAa;AACtB,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;;;ACNhC,SAAS,YAAY;AAMd,IAAM,eAAe;AAQrB,IAAM,WAAW,KAAuB,MAAM;AACjD,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,SAAS;AACf,QAAM,cAAc;AACpB,QAAM,wBAAwB;AAC9B,SAAO;AACX,CAAC;AAED,UAAU,MAAM;AACZ,MAAI,SAAS,aAAa;AAEtB,UAAM,QAAQ,SAAS;AACvB,UAAM,gBAAgB,KAAK;AAC3B,UAAM,KAAK;AAAA,EACf;AACJ,CAAC;;;ADjBD,IAAM,0BAA0B;AAqBhC,IAAM,kCAAkC;AAAA,EACpC,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,SAAS;AACb;AAEO,IAAM,oBAAN,MAA6C;AAAA,EAQhD,YACqB,cACA,QACjB,SACF;AAHmB;AACA;AATrB,wBAAiB;AACjB,wBAAiB;AAEjB,wBAAiB;AAEjB,wBAAS,aAAY,gBAAgB,mBAAmB;AAOpD,SAAK,UAAU,kCACR,kCACA;AAGP,SAAK,WAAW,KAAK,aAAa,eAAe;AACjD,SAAK,SAAS,UAAU,KAAK,QAAQ;AACrC,SAAK,SAAS,QAAQ,KAAK,aAAa,WAAW;AACnD,SAAK,OAAO,IAAI,aAAa,KAAK,SAAS,iBAAiB;AAC5D,SAAK,OAAO,QAAQ,KAAK,QAAQ;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,YAAoB;AACpB,UAAM,WAAW,KAAK;AACtB,UAAM,WAAW,KAAK;AACtB,UAAMA,QAAO,KAAK;AAClB,aAAS,sBAAsBA,KAAI;AACnC,UAAM,WAAWA,MAAK;AAAA,MAClB,CAAC,MAAM,GAAG,GAAG,QAAS,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,MAC1C;AAAA,IACJ;AACA,WAAQ,WAAW,SAAS,aAAc,SAAS;AAAA,EACvD;AAAA,EAEA,IAAI,gBAAwB;AACxB,UAAM,YAAY,KAAK;AACvB,UAAM,QAAQ,KAAK,QAAQ;AAC3B,UAAM,MAAM,KAAK,QAAQ;AACzB,YACM,YAAY,UAAU,MAAM,SAC9B,KAAK,OAAO,aAAa;AAAA,EAEjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,UAAU,IAAI;AAEhC,SAAK,SAAS,WAAW;AACzB,SAAK,SAAS,QAAQ,KAAK,aAAa,WAAW;AAEnD,UAAM,QAAQ,KAAK,OAAO;AAC1B,QAAI,MAAM,MAAM,QAAQ,EAAG,MAAK,qBAAqB;AACrD,QAAI,MAAM,OAAQ,MAAK,iBAAiB;AACxC,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,iBAAiB,MAAM;AAG7B,UAAM,eAAe;AAErB,UAAM,gBAAgB,MAAM,WAAW;AAGvC,QAAI,MAAM,cAAc,gBAAgB,MAAM,UAAU;AACpD;AAAA,QACI;AAAA,QACA;AAAA,MACJ;AACA;AAAA,IACJ;AAEA,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,OAAG;AACC,UAAI,KAAK,IAAI,IAAI,YAAY,UAAU,KAAM;AACzC,cAAM,IAAI;AAAA,UACN;AAAA,QACJ;AAAA,MACJ;AACA,gBAAU,MAAM,cAAc;AAC9B,sBAAgB,KAAK;AACrB,aAAO,KAAK,IAAI,gBAAgB,MAAM,WAAW;AACjD,YAAM,MAAM,YAAY;AAAA,IAC5B,SAAS,UAAU,gBAAgB,OAAO;AAE1C;AAAA,MACI;AAAA,MACA;AAAA,MACA,cAAc,QAAQ,CAAC;AAAA,MACvB;AAAA,MACA,MAAM,YAAY,QAAQ,CAAC;AAAA,IAC/B;AACA,QAAI,OAAO,eAAe;AACtB,YAAM,mBAAmB,IAAI,KAAK,aAAa,SAAS;AAAA,QACpD,OAAO;AAAA,MACX,CAAC;AACD;AAAA,QACI,kCAAkC,MAAM,YAAY,QAAQ,CAAC,CAAC,uBACpC,KAAK,UAAU,QAAQ,CAAC,CAAC,4BACvB,cAAc,QAAQ,CAAC,CAAC,wBAC1C,MAAM,YAAY,QAAQ,CAAC,CAAC,yBACX,iBAAiB;AAAA,UACpC,OAAO,MAAM;AAAA,QACjB,CAAC,kCAAkC,iBAAiB,OAAO,uBAAuB,CAAC;AAAA,MAC3F;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,IAAM,kBAAkB;AAxK/B;AA6KO,IAAM,mBAAmB;AAAA,IAC3B,qBAAgB,EAAE,IAAI,YAAY,MAAlC,YAAuC,KAAK,YAAY;AAC7D;AAEA,IAAI,oBAA8C;AAM3C,SAAS,kBAAiC;AAvLjD,MAAAC;AAwLI,UAAOA,MAAA,uDAAmB,sBAAnB,OAAAA,MAAwC,QAAQ,QAAQ;AACnE;AAQO,SAAS,8BAA8B;AAC1C,MAAI,CAAC,iBAAkB;AACvB,YAAU,MAAM;AACZ,UAAM,QAAQ,SAAS;AACvB,UAAM,cAAc;AACpB,UAAM,SAAS;AACf,UAAM,eAAe,gBAAgB;AACrC,QAAI,cAAc;AACd,YAAM,SAAS,aAAa,yBAAyB,KAAK;AAC1D,0BAAoB,IAAI,kBAAkB,cAAc,MAAM;AAAA,IAClE,OAAO;AACH,cAAQ,KAAK,4BAA4B;AAAA,IAC7C;AAAA,EACJ,CAAC;AACL;;;AE1MA,SAAS,mBAAAC,wBAAuB;;;ACOhC,eAAsB,uBAClB,eACa;AAdjB,MAAAC;AAeI,QAAM,SAAS,SAAS,eAAe,mBAAmB;AAC1D,SAAO,MAAM,eAAe,SAAS;AACrC,GAAAA,MAAA,OAAO,cAAc,QAAQ,MAA7B,gBAAAA,IAAgC;AAEhC,QAAM,IAAI,QAAc,CAAC,YAAY;AACjC,QAAI,WAAW;AACf,UAAM,UAAU,CAAC,UAAiB;AArB1C,UAAAA;AAsBY,UAAI,SAAU;AACd,iBAAW;AACX,YAAM,UAASA,MAAA,4DAAAA,MAAqB,QAAQ,QAAQ;AACpD,aACK,KAAK,MAAM;AACR,eAAO,oBAAoB,SAAS,OAAO;AAC3C,iBAAS,oBAAoB,WAAW,OAAO;AAC/C,gBAAQ;AAAA,MACZ,CAAC,EACA,MAAM,CAAC,UAAmB;AACvB,gBAAQ;AAAA,UACJ,OAAO,MAAM,IAAI,gBAAgB,MAAM,SAAS;AAAA,UAEhD;AAAA,QACJ;AAAA,MACJ,CAAC,EACA,QAAQ,MAAM;AACX,mBAAW;AAAA,MACf,CAAC;AAAA,IACT;AACA,WAAO,iBAAiB,SAAS,OAAO;AACxC,aAAS,iBAAiB,WAAW,OAAO;AAAA,EAChD,CAAC;AACD,SAAO,MAAM,UAAU;AAC3B;;;ADrCA,SAAS,YAAY;AAKrB,IAAM,iBAAiB;AAQvB,eAAsB,qBAAoC;AAtB1D,MAAAC;AAuBI,QAAM,QAAQ,SAAS;AACvB,QAAM,MAAM,gBAAgB,KAAK;AACjC,QAAM,SAAS,MAAM,KAAK;AAC1B,QAAM,WAAUA,MAAAC,iBAAgB,MAAhB,gBAAAD,IAAmB,SAAS,MAAM;AAClD,MAAI;AACA,UAAM;AAAA,EACV,UAAE;AACE,UAAM,MAAM;AACZ,UAAM,gBAAgB,KAAK;AAC3B,UAAM,KAAK;AAAA,EACf;AACA,QAAM;AACV;AAQO,SAAS,wBAAwB;AACpC,MAAI,OAAO,aAAa,YAAa;AACrC,YAAU,YAAY;AAClB,UAAM,uBAAuB,kBAAkB;AAC/C,YAAQ,KAAK,wBAAwB;AAAA,EACzC,GAAG,cAAc;AACrB;;;AE5CA,SAAS,mBAAmB,uBAAuB;AACnD;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAGP,IAAM,YAAY;AAMX,IAAM,wBAAN,MAA4B;AAAA,EAQ/B,YACa,cAA8B,gBAClC,mBAAmB,kCAC1B;AAFW;AARb,wBAAS;AACT,wBAAQ,iBAAgB;AAExB,wBAAiB,eAAc,kBAAkB;AACjD,wBAAiB;AACjB,wBAAQ,YAA0C;AAM9C,SAAK,SAAS,YAAY,cAAc;AACxC,QAAI,gBAAgB,SAAS,GAAG;AAC5B,WAAK,sBAAsB,IAAI,QAAQ,CAAC,YAAY;AAChD,aAAK,YAAY;AAAA,UACb;AAAA,UACA,MAAM;AACF,iBAAK,YAAY,WAAW,YAAY;AACxC,kBAAM,eACF,KAAK,YAAY,gBAAgB,SAAS;AAC9C,oBAAQ,YAAY;AAAA,UACxB;AAAA,UACA,EAAE,MAAM,KAAK;AAAA,QACjB;AAAA,MACJ,CAAC;AAAA,IACL,OAAO;AACH,YAAM,IAAI,MAAM,mCAAmC,SAAS,EAAE;AAAA,IAClE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAAsC;AAGhD,UAAM,WAAW,IAAI,MAAmB,KAAK,MAAM;AACnD,UAAM,eAAe,MAAM,iBAAiB,KAAK,YAAY,IAAI;AACjE,aAAS,CAAC,IAAI,MAAM,aAAa,YAAY;AAC7C,aAAS,IAAI,GAAG,KAAK,KAAK,YAAY,aAAa,KAAK;AACpD,YAAM,gBAAgB,MAAM;AAAA,QACxB,WAAW,KAAK,YAAY,MAAM,EAAE,OAAO,EAAE,CAAC;AAAA,MAClD;AACA,eAAS,CAAC,IAAI,MAAM,cAAc,YAAY;AAAA,IAClD;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAuC;AACzC,SAAK,WAAW,MAAM,KAAK,YAAY;AACvC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,aAA4B;AAC9B,QAAI,CAAC,KAAK;AACN,YAAM,IAAI,kBAAkB,qCAAqC;AACrE,UAAM,eAAe,MAAM,KAAK;AAChC,QAAI,KAAK,iBAAiB,KAAK;AAC3B,YAAM,IAAI,MAAM,QAAQ,KAAK,MAAM,WAAW;AAClD,UAAM,OAAO,KAAK,SAAS,KAAK,eAAe;AAC/C,UAAM,oBAAoB,YAAY;AACtC,UAAM,YAAY,YAAY,YAAY;AAC1C,iBAAa,aAAa,IAAI;AAC9B,UAAM;AACN,QAAI,KAAK,kBAAkB,KAAK,QAAQ;AACpC,WAAK,YAAY,YAAY;AAAA,IACjC;AAAA,EACJ;AACJ;AAEA,eAAe,oBAAoB,cAA2C;AAC1E,MAAI,CAAC,aAAa,SAAU;AAC5B,QAAM,YAAY,YAAY;AAC9B,SAAO,oBAAoB,YAAY;AAC3C;AAOA,SAAS,YAAY,cAA2C;AAC5D,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC5B,iBAAa;AAAA,MACT;AAAA,MACA,MAAM;AACF,gBAAQ,MAAM;AAAA,MAClB;AAAA,MACA,EAAE,MAAM,KAAK;AAAA,IACjB;AAAA,EACJ,CAAC;AACL;;;AC3GA,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AAEjC,IAAM,aAAa,iBAA+B;AAC3C,IAAM,mBAAN,cAA+B,cAAsC;AAAA,EAYxE,cAAc;AACV,UAAM;AAZV,2CAAmC;AACnC,qCAA2B;AAC3B,0CAAqC;AAErC,0CAAiB,WAAW,gBAAgB;AAC5C,kCAAS,WAAW,QAAQ;AAC5B,kCAAS,WAAW,QAAQ;AAC5B,uCAAc,WAAW,aAAa;AACtC,wCAAe,WAAW,cAAc;AACxC,yCAAgB,WAAW,eAAe;AAOtC,SAAK,aAAa,IAAI,UAAU,IAAI;AACpC,SAAK,cAAc,IAAI,UAAU,IAAI;AAAA,EACzC;AACJ;;;AC7BA,SAAS,oBAAAE,yBAAwB;AAEjC,IAAMC,cAAaC,kBAA+B;AAC3C,IAAM,mBAAN,MAA+C;AAAA,EAA/C;AACH,sCAA4B;AAC5B,gCAAO;AACP,+BAAM;AACN,+BAAM;AACN,+BAAM;AAEN,uCAAcD,YAAW,aAAa;AACtC,0CAAiBA,YAAW,gBAAgB;AAC5C,6CAAoBA,YAAW,mBAAmB;AAAA;AACtD;;;ACXO,IAAM,aAAN,MAAmC;AAAA,EAAnC;AACH,wCAAe,IAAI,iBAAiB;AAAA;AACxC;;;ACJA,SAAS,yBAAyB;AAE3B,IAAM,mBAAmB;AAAA;AAAA,EAE5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQJ;;;ACbA,SAAS,oBAAAE,yBAAwB;AAMjC;AAAA,EAEI;AAAA,OAEG;AACP,SAAS,YAAY;AAGrB,IAAMC,cAAaC,kBAAyC;AAOrD,IAAM,6BAAN,MAAmE;AAAA,EAAnE;AACH,wBAAiB,SAAQ;AAAA,MACrB,QAAQ,QAAQ;AAAA,QACZ,UAAU;AAAA,QACV,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,wBAAiB,UAAS,IAAI,cAA0C;AAExE,mCAAUD,YAAW,SAAS;AAC9B,iCAAQA,YAAW,OAAO;AAyB1B,wBAAS,kBAAiB,KAAK,OAAO;AAAA;AAAA,EAvBtC,GACI,MACA,SACA,SACF;AACE,WAAO,KAAK,OAAO,GAAG,MAAM,SAAS,OAAO;AAAA,EAChD;AAAA,EAEA,SACI,MACA,OACF;AACE,SAAK,OAAO,SAAS,MAAM,KAAK;AAAA,EACpC;AAAA,EAEA,kBAAkB;AACd,WAAO,KAAK,OAAO,gBAAgB;AAAA,EACvC;AAAA,EAEA,aAAa,MAAwC;AACjD,WAAO,KAAK,OAAO,aAAa,IAAI;AAAA,EACxC;AAAA,EAIA,IAAI,QAAQ;AACR,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,WAAW;AACX,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,WAAW;AACP,WAAO,KAAK,MAAM,SAAS;AAAA,EAC/B;AAAA,EAEA,OACI,UAIF;AACE,WAAO,KAAK,MAAM,OAAO,QAAQ;AAAA,EACrC;AAAA,EAEA,IAAO,WAAoD;AACvD,WAAO,KAAK,MAAM,IAAI,SAAS;AAAA,EACnC;AAAA,EAEA,KAA6D,MAAS;AAClE,WAAO,KAAK,MAAM,KAAK,IAAI;AAAA,EAC/B;AAAA,EAEA,YAAY,UAAqC;AAC7C,SAAK,MAAM,QAAQ;AAAA,EACvB;AACJ;;;AC1FA,SAAS,iBAAiB;AAEnB,IAAM,sBAAN,cAAkC,UAAqC;AAAA,EAW1E,cAAc;AACV,UAAM;AAJV,gCAAe;AACf,sCAAqB;AAIjB,SAAK,OAAO;AAAA,EAChB;AACJ;AAdI,cADS,qBACO,0BAAyB;AACzC,cAFS,qBAEO,0BAAyB;AACzC,cAHS,qBAGO,kCAAiC;AACjD,cAJS,qBAIO,0BAAyB;AACzC,cALS,qBAKO,2BAA0B;AAC1C,cANS,qBAMO,2BAA0B;;;ACP9C,SAAS,aAAAE,kBAAiB;AAEnB,IAAM,6BAAN,cACKC,WAEZ;AAAA,EAGI,cAAc;AACV,UAAM;AAHV,mCAAU,IAAI,WAAW,CAAC;AAItB,SAAK,OAAO;AAAA,EAChB;AACJ;;;ACZA,SAAS,oBAAAC,yBAAwB;AAEjC,IAAMC,cAAaC,kBAAmD;AAE/D,IAAM,kBAAN,MAA6C;AAAA,EAChD,YAAqB,WAAyB;AAAzB;AAErB,yCAAgBD,YAAW,eAAe;AAAA,EAFK;AAKnD;AADI,cALS,iBAKF,mBAAkBA,YAAW,iBAAiB;;;ACVzD;AAAA,EACI,oBAAAE;AAAA,EACA;AAAA,OACG;AAEP,IAAMC,cAAaC,kBAAoC;AAChD,IAAM,wBAAN,cACK,gBAEZ;AAAA,EAHO;AAAA;AAIH,iCAAgC;AAChC,qCAAY;AACZ,wCAAe;AACf,wCAAe;AACf,0CAAiB;AACjB,qCAAY;AAEZ,iCAAQD,YAAW,OAAO;AAE1B,kCAASA,YAAW,QAAQ;AAE5B,4CAAmBA,YAAW,kBAAkB;AAEhD,yCAAgBA,YAAW,eAAe;AAE1C,+CAAsBA,YAAW,qBAAqB;AAAA;AAC1D;;;AC1BA,SAAS,aAAAE,kBAAiB;AAEnB,IAAM,0BAAN,cACKC,WAEZ;AAAA,EAUI,cAAc;AACV,UAAM;AAJV,gCAAe;AACf,sCAAqB;AAIjB,SAAK,OAAO;AAAA,EAChB;AACJ;AAbI,cAJS,yBAIO,wBAAuB;AACvC,cALS,yBAKO,uBAAsB;AACtC,cANS,yBAMO,wBAAuB;AACvC,cAPS,yBAOO,uBAAsB;AACtC,cARS,yBAQO,+BAA8B;AAC9C,cATS,yBASO,uBAAsB;;;ACV1C,SAAS,aAAAC,kBAAiB;AAEnB,IAAM,iCAAN,cACKC,WAEZ;AAAA,EAGI,cAAc;AACV,UAAM;AAHV,mCAAU,IAAI,WAAW,CAAC;AAItB,SAAK,OAAO;AAAA,EAChB;AACJ;;;ACZA,SAAS,oBAAAC,yBAAwB;AAEjC,IAAMC,cAAaC,kBAA2D;AAEvE,IAAM,sBAAN,MAAqD;AAAA,EACxD,YAA4B,WAAyB;AAAzB;AAE5B,yCAAgBD,YAAW,eAAe;AAAA,EAFY;AAK1D;AADI,cALS,qBAKF,mBAAkBA,YAAW,iBAAiB;;;ACVzD;AAAA,EACI,mBAAAE;AAAA,EACA,oBAAAC;AAAA,OACG;AAEP,IAAMC,cAAaC,kBAAwC;AACpD,IAAM,4BAAN,cACKC,iBAEZ;AAAA,EAHO;AAAA;AAIH,iCAAoC;AACpC,qCAAY;AACZ,4CAAmB;AACnB,4CAAmB;AACnB,8CAAqB;AACrB,qCAAY;AAEZ,iCAAQF,YAAW,OAAO;AAE1B,kCAASA,YAAW,QAAQ;AAE5B,4CAAmBA,YAAW,kBAAkB;AAEhD,yCAAgBA,YAAW,eAAe;AAE1C,+CAAsBA,YAAW,qBAAqB;AAAA;AAC1D;;;AC1BA,SAAS,0BAA0B;AACnC,SAAS,0BAA0B;AAK5B,SAAS,mBAAmB,SAAwB;AACvD,qBAAmB,oBAAoB,MAAM;AACzC,WAAO;AAAA,MACH,WAAW;AAAA,MACX,aAAa;AAAA,MACb,OAAO;AAAA,IACX;AAAA,EACJ,CAAC;AACL;;;ACbA,SAAS,oBAAAG,yBAAwB;AAEjC,IAAMC,cAAaC,kBAA4B;AAExC,IAAM,gBAAN,MAAyC;AAAA,EAAzC;AACH,uDAA8BD,YAAW,6BAA6B;AAEtE,gDAAuBA,YAAW,sBAAsB;AAAA;AAC5D;;;ACTA,SAA+B,oBAAoB;AACnD,SAAS,oBAAAE,yBAAwB;AAEjC,IAAMC,cAAaC,kBAAkC;AAC9C,IAAM,sBAAN,MAAqD;AAAA,EAArD;AACH,qCAA0B,aAAa;AACvC,4CAAmBD,YAAW,kBAAkB;AAChD,yCAAgBA,YAAW,eAAe;AAC1C,wCAAeA,YAAW,cAAc;AACxC,gDAAuBA,YAAW,sBAAsB;AAAA;AAC5D;;;ACJA,SAAS,oBAAAE,0BAAwB;AACjC,SAAS,iBAAAC,sBAAqB;AAE9B,IAAMC,eAAaC,mBAAwC;AACpD,IAAM,4BAAN,cACKC,eAEZ;AAAA,EAHO;AAAA;AAIH,oCAA8B,IAAI,YAAY,CAAC;AAC/C,wCAAgC;AAChC,oCAAW;AACX,oCAAW;AAEX,kCAASF,aAAW,QAAQ;AAAA;AAChC;;;AClBA,SAAS,oBAAAG,0BAAwB;AAEjC,IAAMC,eAAaC,mBAA6C;AAEzD,IAAM,iCAAN,MAA2E;AAAA,EAC9E,YAAmB,WAAyB;AAAzB;AAEnB,2CAAkBD,aAAW,iBAAiB;AAAA,EAFD;AAGjD;;;ACTA,SAAS,oBAAAE,0BAAwB;AACjC,SAAS,iBAAAC,sBAAqB;AAE9B,IAAMC,eAAaC,mBAAgC;AAC5C,IAAM,oBAAN,cACKC,eAEZ;AAAA,EAHO;AAAA;AAIH,iCAAsB;AAEtB,qCAAYF,aAAW,WAAW;AAClC,0CAAiBA,aAAW,gBAAgB;AAC5C,uCAAcA,aAAW,aAAa;AACtC,iDAAwBA,aAAW,uBAAuB;AAC1D,+CAAsBA,aAAW,qBAAqB;AACtD,yCAAgBA,aAAW,eAAe;AAC1C,iCAAQA,aAAW,OAAO;AAAA;AAC9B;;;ACZO,IAAM,oBAAsC;AAAA,EAC/C,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,OAAO;AAAA,EACP,UAAU;AAAA,IACN;AAAA,MACI,KAAK;AAAA,MACL,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,KAAK,EAAE,KAAK,WAAW;AAAA,IAC3B;AAAA,IACA;AAAA,MACI,KAAK;AAAA,MACL,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,KAAK,EAAE,KAAK,WAAW;AAAA,IAC3B;AAAA,EACJ;AAAA,EACA,YAAY,CAAC;AACjB;AAEO,IAAM,mBAAoC;AAAA,EAC7C,UAAU;AAAA,IACN;AAAA,MACI,WAAW;AAAA,MACX,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,MACI,WAAW;AAAA,MACX,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,uBAAuB;AAAA,IACnB;AAAA,MACI,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,MACN,KAAK;AAAA,MACL,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,IAChB;AAAA,EACJ;AAAA,EACA,aAAa,CAAC;AAClB;AAEO,IAAM,sBAAuC;AAAA,EAChD,cAAc;AAAA,EACd,SAAS;AAAA,EACT,kBAAkB,MAAM,QAAQ,QAAQ,iBAAiB;AAC7D;;;ACtEA,SAAS,oBAAAG,0BAAwB;AAMjC;AAAA,EAEI,iBAAAC;AAAA,OAEG;AACP,SAAS,QAAAC,aAAY;AAGrB,IAAMC,eAAaC,mBAAwC;AAOpD,IAAM,4BAAN,MAAiE;AAAA,EAAjE;AACH,wBAAiB,SAAQC;AAAA,MACrB,QAAQ,QAAQ,mBAAmB;AAAA,IACvC;AACA,wBAAiB,UAAS,IAAIC,eAA0C;AAExE,mCAAUH,aAAW,SAAS;AAC9B,iCAAQA,aAAW,OAAO;AAkB1B,wBAAS,kBAAiB,KAAK,OAAO;AAAA;AAAA,EAhBtC,GACI,MACA,SACA,SACF;AACE,WAAO,KAAK,OAAO,GAAG,MAAM,SAAS,OAAO;AAAA,EAChD;AAAA,EAEA,kBAAkB;AACd,WAAO,KAAK,OAAO,gBAAgB;AAAA,EACvC;AAAA,EAEA,aAAa,MAAwC;AACjD,WAAO,KAAK,OAAO,aAAa,IAAI;AAAA,EACxC;AAAA,EAIA,IAAI,QAAQ;AACR,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,WAAW;AACX,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,WAAW;AACP,WAAO,KAAK,MAAM,SAAS;AAAA,EAC/B;AAAA,EAEA,OACI,UAIF;AACE,WAAO,KAAK,MAAM,OAAO,QAAQ;AAAA,EACrC;AAAA,EAEA,IAAO,WAAmD;AACtD,WAAO,KAAK,MAAM,IAAI,SAAS;AAAA,EACnC;AAAA,EAEA,KAA4D,MAAS;AACjE,WAAO,KAAK,MAAM,KAAK,IAAI;AAAA,EAC/B;AAAA,EAEA,YAAY,UAAoC;AAC5C,SAAK,MAAM,QAAQ;AAAA,EACvB;AACJ;;;AC/EA,SAAS,gBAAgB;AACzB,SAAS,oBAAAI,0BAAwB;AAEjC,IAAMC,eAAaC,mBAAoC;AAChD,IAAM,wBAAN,MAAyD;AAAA,EAAzD;AACH,oCAAqB,SAAS;AAC9B,0CAAiB;AACjB,mCAA4B,CAAC;AAC7B,iCAAQD,aAAW,OAAO;AAAA;AAC9B;;;ACLA,SAAS,oBAAAE,0BAAwB;AACjC,SAAS,iBAAAC,sBAAqB;AAE9B,IAAMC,eAAaC,mBAAkD;AAE9D,IAAM,sCAAN,cACKC,eAEZ;AAAA,EAHO;AAAA;AAIH,gCAAO;AACP,4CAAmBF,aAAW,kBAAkB;AAChD,iCAAQA,aAAW,OAAO;AAAA;AAC9B;;;ACbA,SAAS,sBAAsB,0BAA0B;AACzD,SAAS,kBAAkB;AAC3B,SAAS,oBAAAG,0BAAwB;AACjC,SAAS,iBAAAC,sBAAqB;AAE9B,IAAMC,eAAaC,mBAAqC;AAEjD,IAAM,yBAAN,cACKC,eAEZ;AAAA,EAHO;AAAA;AAIH,oCAAW,IAAI,WAAW;AAC1B,mCAAU;AACV,0CAAiB;AACjB,uCAAc;AACd,8CAAqB;AACrB,+CAAsB;AACtB,oCAAW;AACX,iCAAQ;AACR,iCAAsB;AACtB,uCAAc;AACd,gCAAO;AACP,iCAAQ;AACR,wCAAqC,qBAAqB;AAC1D,iCAAQF,aAAW,OAAO;AAC1B,kCAAS;AACT,gCAAOA,aAAW,MAAM;AACxB,yCAAgB;AAChB,wCAAe;AACf,mCAAU;AACV,0CAAiB;AACjB,sCAAiC,mBAAmB;AACpD,iCAAQA,aAAW,OAAO;AAC1B,kCAASA,aAAW,QAAQ;AAC5B,oCAAW,IAAI,WAAW;AAC1B,mCAAU;AACV,kCAAS;AACT,mCAAU;AAAA;AACd;;;ACzCA,SAAS,oBAAAG,0BAAwB;AAEjC,IAAMC,eAAaC,mBAAiC;AAC7C,IAAM,qBAAN,MAAmD;AAAA,EAAnD;AACH,uCAA2B;AAC3B,sCAAa;AACb,+BAAqB;AACrB,qCAAgC;AAChC,iDAAwB;AAExB,gCAAOD,aAAW,MAAM;AAAA;AAC5B;;;ACZA;AAAA,EACI;AAAA,EAEA;AAAA,OAKG;;;ACFP,SAAS,oBAAAE,0BAAwB;AACjC,SAAS,iBAAAC,sBAAqB;AAE9B,IAAMC,eAAaC,mBAAuC;AAEnD,IAAM,sBAAN,cAGKC,eAEZ;AAAA,EALO;AAAA;AAMH,uCAA4B;AAE5B,0CAA+B;AAE/B,iCAAe,CAAC;AAEhB,yCAAgBF,aAAW,eAAe;AAC1C,sCAAaA,aAAW,YAAY;AACpC,2CAAkBA,aAAW,iBAAiB;AAC9C,mCAAUA,aAAW,SAAS;AAC9B,0CAAiBA,aAAW,gBAAgB;AAC5C,2CAAkBA,aAAW,iBAAiB;AAC9C,mCAAUA,aAAW,SAAS;AAC9B,yCAAgBA,aAAW,eAAe;AAC1C,gCAAOA,aAAW,MAAM;AACxB,gCAAOA,aAAW,MAAM;AACxB,mCAAUA,aAAW,SAAS;AAC9B,kCAASA,aAAW,QAAQ;AAC5B,iCAAQA,aAAW,OAAO;AAAA;AAC9B;;;ACpCA;AAAA,EAEI;AAAA,EAGA;AAAA,OAGG;;;ACRP,SAAS,oBAAAG,0BAAwB;AAKjC,SAAS,iBAAAC,sBAAqB;AAE9B,IAAMC,eAAaC,mBAAwC;AAEpD,IAAM,4BAAN,cACKC,eAEZ;AAAA,EAHO;AAAA;AAIH,sCAAyB;AACzB,8CAAqBF,aAAW,oBAAoB;AACpD,uCAAcA,aAAW,aAAa;AACtC,oCAAWA,aAAW,UAAU;AAChC,sCAAaA,aAAW,YAAY;AACpC,yCAAgB;AAAA;AACpB;;;ACbA,SAAS,oBAAAG,0BAAwB;AACjC,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,cAAAC,mBAAkB;AAE3B,IAAMC,eAAaC,mBAAgC;AAE5C,IAAM,oBAAN,cACKC,eAEZ;AAAA,EAHO;AAAA;AAIH,uCAA2B;AAC3B,4CAAgD;AAChD,iCAAsB;AACtB,yCAAgB,IAAIC,YAAW;AAC/B,2CAA+C;AAC/C,4CAAgD;AAChD,0CAAiB;AAEjB,yCAAgBH,aAAW,eAAe;AAE1C,oCAAWA,aAAW,UAAU;AAEhC,sCAAaA,aAAW,YAAY;AAEpC,mCAAUA,aAAW,SAAS;AAE9B,iCAAQA,aAAW,OAAO;AAAA;AAC9B;;;AChCA,SAAS,iBAAAI,sBAAqB;AAC9B,SAAS,oBAAAC,0BAAwB;AAEjC,IAAMC,eAAaC,mBAAsC;AAElD,IAAM,0BAAN,cACKC,eAEZ;AAAA,EAHO;AAAA;AAIH,sCAAuC,CAAC;AACxC,2CAAwC;AACxC,kCAAS;AAET,sCAAaF,aAAW,YAAY;AACpC,oCAAWA,aAAW,UAAU;AAAA;AACpC;;;AHAA,SAAS,oBAAAG,0BAAwB;AACjC,SAAS,QAAAC,aAAY;AAErB,IAAO,YAAY,QAAQ;AAE3B,IAAM,gBAA+B;AAAA,EACjC,SAAS,CAAC;AAAA,EACV,eAAe;AAAA,EACf,aAAa,MAAM,QAAQ,QAAQ,CAAC,CAAC;AAAA,EACrC,aAAa,MAAM,QAAQ,QAAQ,QAAQ;AAC/C;AAEA,IAAMC,eAAaF,mBAAgC;AAC5C,SAAS,6BAA6B;AACzC,QAAM,qBAAqB,IAAI,uBAAuB;AACtD,qBAAmB,OAAO,IAAI,UAAU,MAAM;AAE9C,QAAM,qBAAqB,IAAI,2BAA2B;AAE1D,SAAO;AAAA,IACH,qBAAqB,IAAI,wBAAwB;AAAA,IACjD,mBAAmBC,MAAK,QAAQ,QAAQ,oBAAI,IAAiB,CAAC,CAAC;AAAA,IAC/D,sBAAsBC,aAAW,sBAAsB,EAAE,IAAI;AAAA,MACzD,CAAC,gBAAgB;AACb,cAAM,SAAS,IAAI,kBAAkB;AACrC,eAAO,cAAc;AACrB,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,IACA;AAAA,IACA,qBAAqB;AAAA,IACrB,eAAeD,MAAK,QAAQ,QAAQ,aAAa,CAAC;AAAA,IAClD,0BAA0BA,MAAK,QAAQ,QAAQ,aAAa,CAAC;AAAA,IAC7D,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,gBAAgB,IAAI,mBAAmB;AAAA,IACvC;AAAA,IACA,eAAe,IAAI,kBAAkB;AAAA,IACrC,8BACI,UAA4C,EAAE,IAAI;AAAA,MAAS,MACvD,gCAAgC;AAAA,IACpC;AAAA,IACJ,OAAOA,MAA4B;AAAA,MAC/B,WAAW,EAAE,UAAU,MAAM,aAAa,MAAM;AAAA,IACpD,CAAC;AAAA,IACD,qBAAqBA,MAA0C,IAAI;AAAA,IACnE,KAAKA,MAA0B,iCAAiC;AAAA,EACpE;AACJ;;;AI3DA,SAAS,oBAAAE,0BAAwB;AACjC,SAAS,iBAAAC,uBAAqB;AAE9B,IAAMC,eAAaC,mBAAsC;AAClD,IAAM,0BAAN,cACKC,gBAEZ;AAAA,EAHO;AAAA;AAIH,oCAAWF,aAAW,UAAU;AAChC,iCAAQA,aAAW,OAAO;AAC1B,wCAAe;AAAA;AACnB;;;ANCA,SAAS,4BAA4B;AACrC,SAAS,QAAAG,aAAY;AACrB,SAAS,QAAAC,aAAY;AAErB,IAAOC,aAAY,QAAQ;AASpB,SAAS,8BAA8B;AAC1C,QAAM,qBAAqB,IAAI,uBAAuB;AACtD,QAAM,QAAQ,gBAAgB;AAC9B,SAAO;AAAA,IACH,SAASC,MAAmB,mBAAmB;AAAA,IAC/C,iBAAiB,IAAI,oBAAoB;AAAA,IACzC,gBAAgB,IAAI,mBAAmB;AAAA,IACvC;AAAA,IACA,cAAc,IAAI,iBAAiB;AAAA,IACnC,eAAe,IAAI,kBAAkB;AAAA,IACrC;AAAA,IACA,mBAAmB,6BAA6B,EAAE,MAAM,CAAC;AAAA,IACzD,mBAAmB;AAAA,IACnB,qBAAqB,CAAC,iBAClB,qBAAqB,2BAA2B,CAAC;AAAA,IACrD,oBAAoB,CAAC,iBACjB,qBAAqB,2BAA2B,CAAC;AAAA,IACrD,qBAAqB,IAAI,wBAAwB;AAAA,IACjD,cAAc,IAAI,iBAAiB;AAAA,IACnC,oBAAoBC;AAAA,IACpB,sBAAsBF;AAAA,MAClB;AAAA,IACJ,EAAE,IAAI,YAAY,CAAC,CAAC;AAAA,EACxB;AACJ;AAEA,SAAS,kBAAoC;AACzC,SAAO;AAAA,IACH,eAA0B;AACtB,aAAO;AAAA,QACH,MAAM,EAAE,QAAQ,EAAE;AAAA,QAClB,MAAM;AAAA,QACN,SAAS;AAAA,QAAC;AAAA,QACV,YAAY;AAAA,QAAC;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AACJ;;;AOlEA,SAAS,oBAAAG,0BAAwB;AAGjC,IAAMC,eAAaC,mBAAkC;AAE9C,IAAM,sBAAN,MAAqD;AAAA,EAArD;AACH,yCAAgBD,aAAW,eAAe;AAAA;AAC9C;;;ACPA,SAAS,oBAAAE,0BAAwB;AAMjC,SAAS,iBAAAC,uBAAqB;AAE9B,IAAMC,eAAaC,mBAAsC;AAElD,IAAM,0BAAN,cACKC,gBAEZ;AAAA,EAHO;AAAA;AAIH,iCAAsB;AACtB,kCAAS;AACT,0CAAiB;AACjB,2CAA+C;AAC/C,4CAAgD;AAChD,oCAAWF,aAAW,UAAU;AAChC,sCAAaA,aAAW,YAAY;AACpC,iCAAQA,aAAW,OAAO;AAC1B,iCAAQA,aAAW,OAAO;AAAA;AAC9B;;;ACvBA,SAAS,oBAAAG,0BAAwB;AAGjC,SAAS,cAAAC,mBAAkB;AAE3B,IAAMC,eAAaC,mBAAyC;AAErD,IAAM,6BAAN,MAAmE;AAAA,EAAnE;AACH,oCAAW,IAAIC,YAAW;AAE1B,kCAASF,aAAW,QAAQ;AAE5B,sCAAaA,aAAW,YAAY;AAEpC,iCAAQA,aAAW,OAAO;AAE1B,mCAAUA,aAAW,SAAS;AAE9B,kCAASA,aAAW,QAAQ;AAE5B,kCAASA,aAAW,QAAQ;AAE5B,2CAAkBA,aAAW,iBAAiB;AAE9C,8CAAqBA,aAAW,oBAAoB;AAEpD,mCAAUA,aAAW,SAAS;AAAA;AAClC;;;AC3BA,SAAS,oBAAAG,0BAAwB;AAMjC,SAAS,mBAAmB;AAC5B,SAAS,iBAAAC,uBAAqB;AAE9B,IAAMC,eAAaC,mBAAoC;AAEhD,IAAM,wBAAN,cACKC,gBAEZ;AAAA,EAHO;AAAA;AAIH,iCAAsB;AAEtB,qCAAYF,aAAW,WAAW;AAElC,yCAAgB;AAEhB,oCAAWA,aAAW,UAAU;AAEhC,iCAAQA,aAAW,OAAO;AAE1B,sCAAaA,aAAW,YAAY;AAEpC,sCAAaA,aAAW,YAAY;AAEpC,4CAAgD;AAEhD,iCAAQA,aAAW,OAAO;AAAA;AAC9B;;;AChCA;AAAA,EAEI,mCAAAG;AAAA,EACA,qCAAAC;AAAA,OAKG;AAOP,SAAS,oBAAAC,0BAAwB;AACjC,SAAS,QAAAC,aAAY;AAErB,IAAOC,aAAY,QAAQ;AAE3B,IAAMC,iBAA+B;AAAA,EACjC,SAAS,CAAC;AAAA,EACV,eAAe;AAAA,EACf,aAAa,MAAM,QAAQ,QAAQ,CAAC,CAAC;AAAA,EACrC,aAAa,MAAM,QAAQ,QAAQ,QAAQ;AAC/C;AAEA,IAAMC,eAAaJ,mBAA+B;AAC3C,SAAS,4BAA4B;AACxC,QAAM,qBAAqB,IAAI,uBAAuB;AACtD,qBAAmB,OAAO,IAAI,UAAU,MAAM;AAE9C,QAAM,qBAAqB,IAAI,0BAA0B;AAEzD,SAAO;AAAA,IACH,mBAAmBC,MAAK,QAAQ,QAAQ,oBAAI,IAAiB,CAAC,CAAC;AAAA,IAC/D,sBAAsBG,aAAW,sBAAsB,EAAE,IAAI;AAAA,MACzD,CAAC,gBAAgB;AACb,cAAM,SAAS,IAAI,kBAAkB;AACrC,eAAO,cAAc;AACrB,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,IACA;AAAA,IACA,qBAAqB,mBAAmB,IAAI,CAAC,MAAM,CAAC;AAAA,IACpD,eAAeH,MAAK,QAAQ,QAAQE,cAAa,CAAC;AAAA,IAClD,0BAA0BF,MAAK,QAAQ,QAAQE,cAAa,CAAC;AAAA,IAC7D,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,gBAAgB,IAAI,mBAAmB;AAAA,IACvC;AAAA,IACA,eAAe,IAAI,kBAAkB;AAAA,IACrC,8BACID,WAA2C,EAAE,IAAI;AAAA,MAAS,MACtDG,iCAAgC;AAAA,IACpC;AAAA,IACJ,OAAOJ,MAA4B;AAAA,MAC/B,WAAW,EAAE,UAAU,MAAM,aAAa,MAAM;AAAA,IACpD,CAAC;AAAA,IACD,qBAAqBA,MAA0C,IAAI;AAAA,IACnE,KAAKA,MAA0BK,kCAAiC;AAAA,EACpE;AACJ;;;ACnDA,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,oBAAAC,0BAAwB;AACjC,SAAS,iBAAAC,uBAAqB;AAE9B,IAAMC,eAAaC,mBAAwB;AAEpC,IAAM,YAAN,cAAwBC,gBAA8C;AAAA,EAAtE;AAAA;AAKH,+BAAuB;AAUvB,+BAAM;AACN,gCAAO;AACP,kCAAS;AACT,yCAAgB,IAAIC,YAAW;AAC/B,mCAAUH,aAAW,SAAS;AAC9B,wCAAiC,oBAAI,IAAI;AACzC,qCAAoD;AACpD,+CAA8D;AAC9D,+CAAsBA,aAAW,qBAAqB;AACtD,+CAAsBA,aAAW,qBAAqB;AACtD,8CAAqBA,aAAW,oBAAoB;AACpD;AACA,iCAAsB;AACtB,+CAAkD;AAClD,wCAAoC;AACpC,qCAA8B;AAE9B,oCAAWA,aAAW,UAAU;AAChC,sCAAaA,aAAW,YAAY;AAEpC,yCAAgBA,aAAW,eAAe;AAC1C,iCAAQA,aAAW,OAAO;AAC1B,oCAAW;AAAA;AAAA,EApCX,KAAK,OAAO,WAAW,IAAY;AAC/B,WAAO,aAAa,KAAK,GAAG;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAA4B;AAhChC,QAAAI;AAiCQ,WAAO,QAAQ,SAAQA,MAAA,KAAK,QAAL,OAAAA,MAAY,EAAE,UAAU,KAAK,KAAK,UAAU,CAAC,EAAE,CAAC;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA,EA6BA,yBAAyB;AACrB,SAAK,SAAS,IAAI,SAAS,MAAM;AAC7B,WAAK,SAAS;AAAA,IAClB,CAAC;AACD,SAAK,WAAW,IAAI,SAAS,MAAM;AAC/B,WAAK,SAAS;AAAA,IAClB,CAAC;AAAA,EACL;AACJ;;;ACjEA,SAAS,oBAAAC,0BAAwB;AAE1B,IAAM,mBAAN,MAEyC;AAAA,EAFzC;AAGH,wBAAiB,cACbC,mBAAqD;AAEzD,oCAAW,KAAK,WAAW,UAAU;AACrC,uCAAc,KAAK,WAAW,aAAa;AAAA;AAC/C;;;ACXA;AAAA,EACI;AAAA,OAGG;AACP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OAEG;AACP;AAAA,EACI,mBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAC;AAAA,EACA,YAAAC;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,sBAAsB;AAkBxB,IAAM,aAAN,MAAgE;AAAA,EAsBnE,YAIqB,eACE,SACrB;AAFmB;AACE;AAvBvB,wBAAS,aAAYC,iBAAgB,IAAI;AAEzC,wBAAQ,WAAoB;AAU5B,wBAAiB,2BAA0B,MAAM;AAC7C,UAAI,SAAS,oBAAoB,UAAU;AACvC,aAAK,kDAAkD;AAAA,MAC3D;AAAA,IACJ;AAAA,EAQG;AAAA,EA3BH,KAAK,OAAO,WAAW,IAAY;AAC/B,WAAO;AAAA,EACX;AAAA,EAKA,IAAI,SAAY;AACZ,QAAI,CAAC,KAAK;AACN,YAAM,IAAIC;AAAA,QACN;AAAA,MACJ;AACJ,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAmBA,OAAO;AA5EX,QAAAC,KAAA;AA6EQ,QAAI,YAAgC;AACpC,oBAAe,MAAAA,MAAA,KAAK,YAAL,gBAAAA,IAAc,YAAd,YAAyB,EAAE;AAC1C,eAAW,MAAM;AA/EzB,UAAAA;AAgFY,YAAM,EAAE,KAAK,QAAQ,IAAI,eAAe;AACxC,kBAAY;AAGZ,4BAAsB;AAAA,QAAI,MACtB,gBAAgB;AAAA,UACZ,cAAc,iCAAK,cAAc,YAAnB,EAA8B,SAAS,EAAE;AAAA,QAC3D,CAAC;AAAA,MACL;AACA,eAAS;AAAA,QACL;AAAA,QACA,KAAK;AAAA,MACT;AACA,WAAK,UAAU,KAAK,cAAc;AAElC,WAAK,QAAQ,SAAS,mBAChB,kBACA;AACN;AAAA,QACI,KAAK,QAAQ,GAAG,SAAS,CAAC,MAAM;AAC5B,mBAAS,MAAM,8BAA8B,OAAO,CAAC,CAAC;AAAA,QAC1D,CAAC;AAAA,MACL;AACA,YAAIA,MAAA,KAAK,YAAL,gBAAAA,IAAc,iBAAgB,OAAO;AACrC;AAAA,UACI,KAAK,QAAQ,GAAG,SAAS,CAAC,MAAM;AAC5B,iBAAK,EAAE,KAAK;AAAA,UAChB,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,cAAU,MAAM;AAhHxB,UAAAA;AAiHY,MAAAC,UAAS,MAAM,WAAW;AAC1B,UAAI,UAAW,WAAU;AACzB,OAAAD,MAAA,KAAK,YAAL,gBAAAA,IAAc;AACd,WAAK,UAAU;AACf,eAAS;AAAA,QACL;AAAA,QACA,KAAK;AAAA,MACT;AACA,wBAAkB,EAAE,MAAM;AAAA,IAC9B,CAAC;AAAA,EACL;AACJ;AAOO,SAAS,iBACZ,yBACA,SACU;AACV,QAAM,QAAQ,IAAI,WAAW,MAAM;AAC/B,WAAO,kBAAkB,iCAClB,0BADkB;AAAA,MAErB,OAAO,SAAS;AAAA,IACpB,EAAC;AAAA,EACL,GAAG,OAAO;AACV,QAAM,KAAK;AACX,SAAO;AACX;;;AC1IA;AAAA,EAEI;AAAA,OAEG;AACP,SAAS,0BAA0B;AAQnC,eAAsB,UAClB,oBACA,UAAU,IACG;AACb,MAAI,mBAAmB,QAAS,QAAO,QAAQ,QAAQ;AACvD,SAAO,mBAAmB,oBAAoB,WAAW;AAAA,IACrD;AAAA,IACA,gBAAgB;AAAA,EACpB,CAAC,EAAE,KAAK,MAAM,MAAM;AACxB;AAQA,eAAsB,iBAClB,oBACA,UAAU,IACG;AACb,MAAI,mBAAmB,eAAgB,QAAO,QAAQ,QAAQ;AAC9D,SAAO,mBAAmB,oBAAoB,kBAAkB;AAAA,IAC5D;AAAA,IACA,gBAAgB;AAAA,EACpB,CAAC,EAAE,KAAK,MAAM,MAAM;AACxB;AAUA,eAAsB,QAClB,oBACA,UAAU,IACV,kBAAkB,IACL;AACb,MAAI,mBAAmB,MAAO,QAAO,QAAQ,QAAQ;AACrD,QAAM,gBAAgB,oBAAoB,EAAE,SAAS,gBAAgB,CAAC;AACtE,SAAO,mBAAmB,oBAAoB,SAAS;AAAA;AAAA;AAAA,IAGnD,SACI,mBAAmB,WACnB,mBAAmB,cACnB;AAAA,IACJ,gBAAgB;AAAA,EACpB,CAAC,EAAE,KAAK,MAAM,MAAM;AACxB;AAQO,SAAS,aACZ,oBACA,UAAU,IACkB;AAC5B,SAAO,mBAAmB,oBAAoB,cAAc;AAAA,IACxD;AAAA,IACA,gBAAgB;AAAA,EACpB,CAAC;AACL;AAQO,SAAS,WACZ,oBACA,UAAU,IACG;AACb,MAAI,mBAAmB,WAAW,EAAG,QAAO,QAAQ,QAAQ;AAC5D,SAAO,mBAAmB,oBAAoB,kBAAkB;AAAA,IAC5D;AAAA,IACA,gBAAgB;AAAA,EACpB,CAAC,EAAE,KAAK,MAAM,MAAM;AACxB;;;AClGA,SAAS,mCAAqD;AAC9D,SAAS,QAAAE,aAAY;AACrB,SAAS,kBAAAC,uBAAsB;AAC/B,SAAS,WAAAC,gBAAe;AACxB,SAAS,aAAa;AACtB,SAAS,sBAAsB;;;ACJ/B,SAAS,SAAAC,cAAa;AACtB,SAAS,sBAAAC,2BAA0B;AACnC,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAM9B,eAAsB,wBAClB,QACF;AACE,QAAM,YAAY,OAAO;AACzB,QAAMD,OAAM,GAAG;AACf,MAAI,QAAQ,OAAO,aAAa,WAAW,GAAG,GAAG;AAE7C,kBAAc;AAAA,EAClB,OAAO;AAEH,UAAMA,OAAM,CAAC;AACb,WAAO,OAAO,WAAW,EACpB,YAAY,yBAAyB,EACrC,kBAAkB,WAAW,GAAG;AAAA,EACzC;AACJ;AAKA,eAAsB,kBAAkB,QAAoC;AAIxE,QAAM,eAAe;AACrB,QAAM,YAAY,OAAO;AACzB,QAAMC,oBAAmB,QAAQ,cAAc;AAAA,IAC3C,QAAQ,MAAM,OAAO,cAAc,YAAY;AAAA,IAC/C,SAAS;AAAA,IACT,gBAAgB,yCAAyC,YAAY;AAAA,EACzE,CAAC;AACL;AAKO,SAAS,kBAAkB,QAAoC;AAClE,SAAO,OAAO,MAAM,EAAE,YAAY,QAAQ,EAAE,SAAS;AACrD,SAAO,OAAO,OAAO,EAAE,YAAY,aAAa,EAAE,UAAU;AAChE;AAKO,SAAS,mBAAmB,QAAoC;AACnE,SAAO,OAAO,aAAa,EAAE,YAAY,kBAAkB,EAAE,UAAU;AACvE,SAAO,OAAO,MAAM,EAAE,YAAY,YAAY,EAAE,UAAU;AAC1D,SAAO,OAAO,OAAO,EAAE,YAAY,SAAS,EAAE,SAAS;AAC3D;AAKO,SAAS,qBAAqB,QAAoC;AACrE,SAAO,OAAO,aAAa,EAAE,YAAY,cAAc,EAAE,SAAS;AAClE,SAAO,OAAO,OAAO,EAAE,YAAY,sBAAsB,EAAE,UAAU;AACzE;;;ADnDA,eAAsB,qBAAqB,QAAqB,MAAc;AAC1E,QAAM,YAAY;AAClB,QAAM,EAAE,SAAS,IAAI,IAAIC,gBAAe;AACxC,QAAM,YAAY,IAAI,eAAe,QAAQ,QAAQ,CAAC;AACtD,QAAM,aAAa,IAAI,eAAe,QAAQ,SAAS,CAAC;AACxD,QAAM,YAAY,IAAI,eAAe,QAAQ,QAAQ,CAAC;AAKtD,QAAM,aAAuB,CAAC;AAC9B,MAAI,OAAO,GAAG,WAAW,MAAM,WAAW,KAAK,SAAS,CAAC,CAAC;AAC1D,MAAI,OAAO,GAAG,UAAU,MAAM,WAAW,KAAK,QAAQ,CAAC,CAAC;AACxD,QAAM,YAAY,OAAO;AACzB,MAAI,OAAO,SAAS;AAChB,eACK,KAAK,EACL,KAAK,MAAM;AAIR,aAAO,SAAS,EAAE,uBAAuB,UAAU;AAAA,IACvD,CAAC,EACA,MAAMC,KAAI;AAAA,EACnB;AASA,QAAM,aAAaC,SAAQ,OAAO,aAAa,MAAM,SAAS;AAC9D,QAAM,OAAO,OAAO,MAAM,SAAS;AAInC,QAAM,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,IACA,OAAO,YAAY,YAAY,IAAI,4BAA4B;AAAA,EACnE;AAEA,SAAO,OAAO,WAAW,EAAE,kBAAkB,cAAc,CAAC;AAE5D,MAAI,YAAY;AAEZ,WAAO,UAAU,EAAE,IAAI,iBAAiB;AACxC,WAAO,SAAS,EAAE,IAAI,iBAAiB;AAAA,EAC3C,OAAO;AAKH,WAAO,WAAW,CAAC,CAAC,EAAE,YAAY,kBAAkB,EAAE,KAAK,SAAS;AAEpE,WAAO,OAAO,MAAM,EAAE,YAAY,QAAQ,EAAE,KAAK,SAAS;AAC1D,QAAI,WAAW;AACX,wBAAkB,MAAM;AACxB,YAAM,wBAAwB,MAAM;AAAA,IACxC,OAAO;AAGH,YAAM,UAAU,MAAM;AACtB,yBAAmB,MAAM;AACzB,YAAM,gBAAgB;AACtB,YAAM,kBAAkB,MAAM;AAAA,IAClC;AAAA,EACJ;AAEA,UAAQ;AACZ;;;AErFA,SAAS,kBAAAC,uBAAsB;AAC/B,SAAS,kBAAAC,uBAAsB;;;ACA/B,SAAS,SAAAC,cAAa;AAEtB,IAAM,gBAAgB;AACtB,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AAYxB,eAAsB,sBAClB,QACA,SACA,UAAU,IACV,EAAE,eAAe,EAAE,IAAwC,CAAC,GAC9D;AACE,QAAM,UAAU,MAAM;AAGtB,QAAM,aAAa,MAAM;AAKzB,QAAM,mBAAmB,OAAO,cAAc;AAC9C,QAAM,gBAAgB;AAEtB,MAAI,UAAU;AACd,QAAM,WAAW,UAAU,OAAO,cAAc,WAAW;AAC3D,SAAO,CAAC,OAAO,SAAS,OAAO,cAAc,WAAW,UAAU,SAAS;AACvE,UAAMA,OAAM,aAAa;AACzB,eAAW;AAAA,EACf;AACA,SAAO,OAAO,WAAW,EACpB,YAAY,aAAa,EACzB,uBAAuB,UAAU,gBAAgB;AACtD,MAAI,kBAAkB;AAClB,WAAO,OAAO,WAAW,EACpB,YAAY,aAAa,EACzB,aAAa,UAAU,eAAe;AAAA,EAC/C;AACJ;;;ADtCA,IAAM,oBAAoB;AAS1B,eAAsB,iBAClB,QACA,EAAE,eAAe,EAAE,IAA6B,CAAC,GACpC;AACb,QAAM,EAAE,SAAS,IAAI,IAAIC,gBAAe;AACxC,QAAM,QAAQ,IAAIC,gBAAe,QAAQ,OAAO,CAAC;AACjD,QAAM,aAAa,IAAIA,gBAAe,QAAQ,YAAY,CAAC;AAC3D,SAAO,OAAO,WAAW,EACpB,YAAY,uCAAuC,EACnD,aAAa,CAAC;AACnB,QAAM,WAAW,MAAM;AACvB,QAAM,WAAW,OAAO;AACxB,SAAO,QAAQ,EACV,YAAY,6BAA6B,EACzC,gBAAgB,CAAC;AAEtB,MAAI,OAAO,WAAW,mBAAmB;AAGrC,UAAM;AAAA,MACF;AAAA,MACA,OAAO,cAAc,oBAAoB;AAAA,MACzC;AAAA,MACA,EAAE,aAAa;AAAA,IACnB;AACA,UAAM,OAAO,OAAO,WAAW,oBAAoB;AACnD,UAAM,OAAO,OAAO,IAAI;AAAA,EAC5B;AAOA,QAAM,MAAM,MAAM,oBAAoB,MAAM,YAAY;AACxD,SAAO,OAAO,WAAW,EAAE,kBAAkB,UAAU,CAAC;AACxD,SAAO,OAAO,KAAK,EAAE,YAAY,OAAO,EAAE,SAAS;AAEnD,SAAO,WAAW,MAAM,MAAM,CAAC,EAAE;AAAA,IAC7B,KAAK,MAAM,iBAAiB;AAAA,EAChC;AACA,UAAQ;AACZ;AAWA,eAAsB,oBAClB,QACA,UACA,EAAE,eAAe,EAAE,IAA6B,CAAC,GACpC;AAnFjB,MAAAC;AAoFI,QAAM,EAAE,SAAS,IAAI,IAAIF,gBAAe;AAExC,QAAM,gBAAgB,oBAAoB,MAAM;AAChD,QAAM,aAAa,IAAIC,gBAAe,QAAQ,YAAY,CAAC;AAC3D,QAAM,cAAc,IAAIA,gBAAe,QAAQ,aAAa,CAAC;AAC7D,QAAM,cAAc,IAAIA,gBAAe,QAAQ,gBAAgB,CAAC;AAChE,WAAS,uBAAuB,OAAe;AAC3C,WAAO,WAAW,EAAE,sBAAsB,KAAK;AAC/C,gBAAY,MAAM,MAAM;AAAA,EAC5B;AACA,SAAO,KAAK,GAAG,QAAQ;AACvB,yBAAuB,CAAC;AAExB,QAAM,OAAO,KAAK;AAClB,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,UAAM,cAAc,MAAM,SAAS,SAAS;AAC5C,YAAOC,MAAA,OAAO,gBAAP,gBAAAA,IAAoB,GAAG,EACzB,YAAY,iBAAiB,EAC7B,KAAK,SAAS,CAAC,EAAE,GAAG;AACzB,UAAM,YAAY,cACZ,WAAW,KAAK,YAAY,IAC5B,YAAY,KAAK,YAAY;AACnC,UAAM,QAAQ,IAAI;AAAA,MACd,iBAAiB,QAAQ,EAAE,aAAa,CAAC;AAAA,MACzC;AAAA,IACJ,CAAC;AACD,2BAAuB,cAAc,IAAI,CAAC;AAAA,EAC9C;AACA,UAAQ;AACZ;",
6
+ "names": ["data", "_a", "getAudioContext", "_a", "_a", "getAudioContext", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "spyFactory", "createSpyFactory", "MockEvent", "MockEvent", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "spyFactory", "createSpyFactory", "MockEvent", "MockEvent", "MockEvent", "MockEvent", "createSpyFactory", "spyFactory", "createSpyFactory", "MockEventTarget", "createSpyFactory", "spyFactory", "createSpyFactory", "MockEventTarget", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "EventHostImpl", "data", "spyFactory", "createSpyFactory", "data", "EventHostImpl", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "MockEventHost", "RangesImpl", "spyFactory", "createSpyFactory", "MockEventHost", "RangesImpl", "MockEventHost", "createSpyFactory", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "data", "spyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "noop", "data", "createSpy", "data", "noop", "createSpyFactory", "spyFactory", "createSpyFactory", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createSpyFactory", "RangesImpl", "spyFactory", "createSpyFactory", "RangesImpl", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "createEmptyMediaQualityMetadata", "defaultQualitySelectorImplOptions", "createSpyFactory", "data", "createSpy", "emptyTimeline", "spyFactory", "createEmptyMediaQualityMetadata", "defaultQualitySelectorImplOptions", "RangesImpl", "createSpyFactory", "MockEventHost", "spyFactory", "createSpyFactory", "MockEventHost", "RangesImpl", "_a", "createSpyFactory", "createSpyFactory", "createLogPrefix", "IllegalStateError", "logDebug", "createLogPrefix", "IllegalStateError", "_a", "logDebug", "noop", "createDisposer", "closeTo", "sleep", "nextEventAsPromise", "createDisposer", "noop", "closeTo", "createDisposer", "createEventSpy", "sleep", "createDisposer", "createEventSpy", "_a"]
7
7
  }