aboutsummaryrefslogtreecommitdiffstats
path: root/dist
diff options
context:
space:
mode:
Diffstat (limited to 'dist')
-rw-r--r--dist/plyr.css2
-rw-r--r--dist/plyr.js4218
-rw-r--r--dist/plyr.js.map2
-rw-r--r--dist/plyr.min.js2
-rw-r--r--dist/plyr.min.js.map2
-rw-r--r--dist/plyr.polyfilled.js6634
-rw-r--r--dist/plyr.polyfilled.js.map2
-rw-r--r--dist/plyr.polyfilled.min.js2
-rw-r--r--dist/plyr.polyfilled.min.js.map2
9 files changed, 5065 insertions, 5801 deletions
diff --git a/dist/plyr.css b/dist/plyr.css
index f5400d09..a6b208b8 100644
--- a/dist/plyr.css
+++ b/dist/plyr.css
@@ -1 +1 @@
-@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>div{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:flex;flex:1;position:relative}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr--has-error{pointer-events:none}.plyr--has-error::after{align-items:center;background:#000;color:#fff;content:attr(data-plyr-error);display:flex;font-size:16px;height:100%;justify-content:center;left:0;position:absolute;text-align:center;text-shadow:0 1px 1px #000;top:0;width:100%;z-index:10}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important} \ No newline at end of file
+@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>div{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr__progress{display:flex;flex:1;position:relative}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress--buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin:-3px 0 0;padding:0;position:absolute;top:50%;width:100%}.plyr__progress--buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress--buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress--buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress--buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(183,197,205,.66)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:100% 100%;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1}.plyr--stopped .plyr__poster{opacity:1}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr--has-error{pointer-events:none}.plyr--has-error::after{align-items:center;background:#000;color:#fff;content:attr(data-plyr-error);display:flex;font-size:16px;height:100%;justify-content:center;left:0;position:absolute;text-align:center;text-shadow:0 1px 1px #000;top:0;width:100%;z-index:10}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important} \ No newline at end of file
diff --git a/dist/plyr.js b/dist/plyr.js
index fffa2756..ce5737c1 100644
--- a/dist/plyr.js
+++ b/dist/plyr.js
@@ -4,338 +4,6 @@
(global.Plyr = factory());
}(this, (function () { 'use strict';
-// ==========================================================================
-// Plyr supported types and providers
-// ==========================================================================
-
-var providers = {
- html5: 'html5',
- youtube: 'youtube',
- vimeo: 'vimeo'
-};
-
-var types = {
- audio: 'audio',
- video: 'video'
-};
-
-// ==========================================================================
-// Plyr default config
-// ==========================================================================
-
-var defaults = {
- // Disable
- enabled: true,
-
- // Custom media title
- title: '',
-
- // Logging to console
- debug: false,
-
- // Auto play (if supported)
- autoplay: false,
-
- // Only allow one media playing at once (vimeo only)
- autopause: true,
-
- // Default time to skip when rewind/fast forward
- seekTime: 10,
-
- // Default volume
- volume: 1,
- muted: false,
-
- // Pass a custom duration
- duration: null,
-
- // Display the media duration on load in the current time position
- // If you have opted to display both duration and currentTime, this is ignored
- displayDuration: true,
-
- // Invert the current time to be a countdown
- invertTime: true,
-
- // Clicking the currentTime inverts it's value to show time left rather than elapsed
- toggleInvert: true,
-
- // Aspect ratio (for embeds)
- ratio: '16:9',
-
- // Click video container to play/pause
- clickToPlay: true,
-
- // Auto hide the controls
- hideControls: true,
-
- // Revert to poster on finish (HTML5 - will cause reload)
- showPosterOnEnd: false,
-
- // Disable the standard context menu
- disableContextMenu: true,
-
- // Sprite (for icons)
- loadSprite: true,
- iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.2.4/plyr.svg',
-
- // Blank video (used to prevent errors on source change)
- blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
-
- // Quality default
- quality: {
- default: 576,
- options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240, 'default']
- },
-
- // Set loops
- loop: {
- active: false
- // start: null,
- // end: null,
- },
-
- // Speed default and options to display
- speed: {
- selected: 1,
- options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]
- },
-
- // Keyboard shortcut settings
- keyboard: {
- focused: true,
- global: false
- },
-
- // Display tooltips
- tooltips: {
- controls: false,
- seek: true
- },
-
- // Captions settings
- captions: {
- active: false,
- language: (navigator.language || navigator.userLanguage).split('-')[0]
- },
-
- // Fullscreen settings
- fullscreen: {
- enabled: true, // Allow fullscreen?
- fallback: true, // Fallback for vintage browsers
- iosNative: false // Use the native fullscreen in iOS (disables custom controls)
- },
-
- // Local storage
- storage: {
- enabled: true,
- key: 'plyr'
- },
-
- // Default controls
- controls: ['play-large',
- // 'restart',
- // 'rewind',
- 'play',
- // 'fast-forward',
- 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay', 'fullscreen'],
- settings: ['captions', 'quality', 'speed'],
-
- // Localisation
- i18n: {
- restart: 'Restart',
- rewind: 'Rewind {seektime} secs',
- play: 'Play',
- pause: 'Pause',
- fastForward: 'Forward {seektime} secs',
- seek: 'Seek',
- played: 'Played',
- buffered: 'Buffered',
- currentTime: 'Current time',
- duration: 'Duration',
- volume: 'Volume',
- mute: 'Mute',
- unmute: 'Unmute',
- enableCaptions: 'Enable captions',
- disableCaptions: 'Disable captions',
- enterFullscreen: 'Enter fullscreen',
- exitFullscreen: 'Exit fullscreen',
- frameTitle: 'Player for {title}',
- captions: 'Captions',
- settings: 'Settings',
- speed: 'Speed',
- normal: 'Normal',
- quality: 'Quality',
- loop: 'Loop',
- start: 'Start',
- end: 'End',
- all: 'All',
- reset: 'Reset',
- disabled: 'Disabled',
- enabled: 'Enabled',
- advertisement: 'Ad'
- },
-
- // URLs
- urls: {
- vimeo: {
- api: 'https://player.vimeo.com/api/player.js'
- },
- youtube: {
- api: 'https://www.youtube.com/iframe_api'
- },
- googleIMA: {
- api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'
- }
- },
-
- // Custom control listeners
- listeners: {
- seek: null,
- play: null,
- pause: null,
- restart: null,
- rewind: null,
- fastForward: null,
- mute: null,
- volume: null,
- captions: null,
- fullscreen: null,
- pip: null,
- airplay: null,
- speed: null,
- quality: null,
- loop: null,
- language: null
- },
-
- // Events to watch and bubble
- events: [
- // Events to watch on HTML5 media elements and bubble
- // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events
- 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'seeked', 'emptied', 'ratechange', 'cuechange',
-
- // Custom events
- 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled', 'languagechange', 'controlshidden', 'controlsshown', 'ready',
-
- // YouTube
- 'statechange', 'qualitychange', 'qualityrequested',
-
- // Ads
- 'adsloaded', 'adscontentpause', 'adscontentresume', 'adstarted', 'adsmidpoint', 'adscomplete', 'adsallcomplete', 'adsimpression', 'adsclick'],
-
- // Selectors
- // Change these to match your template if using custom HTML
- selectors: {
- editable: 'input, textarea, select, [contenteditable]',
- container: '.plyr',
- controls: {
- container: null,
- wrapper: '.plyr__controls'
- },
- labels: '[data-plyr]',
- buttons: {
- play: '[data-plyr="play"]',
- pause: '[data-plyr="pause"]',
- restart: '[data-plyr="restart"]',
- rewind: '[data-plyr="rewind"]',
- fastForward: '[data-plyr="fast-forward"]',
- mute: '[data-plyr="mute"]',
- captions: '[data-plyr="captions"]',
- fullscreen: '[data-plyr="fullscreen"]',
- pip: '[data-plyr="pip"]',
- airplay: '[data-plyr="airplay"]',
- settings: '[data-plyr="settings"]',
- loop: '[data-plyr="loop"]'
- },
- inputs: {
- seek: '[data-plyr="seek"]',
- volume: '[data-plyr="volume"]',
- speed: '[data-plyr="speed"]',
- language: '[data-plyr="language"]',
- quality: '[data-plyr="quality"]'
- },
- display: {
- currentTime: '.plyr__time--current',
- duration: '.plyr__time--duration',
- buffer: '.plyr__progress--buffer',
- played: '.plyr__progress--played',
- loop: '.plyr__progress--loop',
- volume: '.plyr__volume--display'
- },
- progress: '.plyr__progress',
- captions: '.plyr__captions',
- menu: {
- quality: '.js-plyr__menu__list--quality'
- }
- },
-
- // Class hooks added to the player in different states
- classNames: {
- video: 'plyr__video-wrapper',
- embed: 'plyr__video-embed',
- ads: 'plyr__ads',
- control: 'plyr__control',
- type: 'plyr--{0}',
- provider: 'plyr--{0}',
- stopped: 'plyr--stopped',
- playing: 'plyr--playing',
- loading: 'plyr--loading',
- error: 'plyr--has-error',
- hover: 'plyr--hover',
- tooltip: 'plyr__tooltip',
- cues: 'plyr__cues',
- hidden: 'plyr__sr-only',
- hideControls: 'plyr--hide-controls',
- isIos: 'plyr--is-ios',
- isTouch: 'plyr--is-touch',
- uiSupported: 'plyr--full-ui',
- noTransition: 'plyr--no-transition',
- menu: {
- value: 'plyr__menu__value',
- badge: 'plyr__badge',
- open: 'plyr--menu-open'
- },
- captions: {
- enabled: 'plyr--captions-enabled',
- active: 'plyr--captions-active'
- },
- fullscreen: {
- enabled: 'plyr--fullscreen-enabled',
- fallback: 'plyr--fullscreen-fallback'
- },
- pip: {
- supported: 'plyr--pip-supported',
- active: 'plyr--pip-active'
- },
- airplay: {
- supported: 'plyr--airplay-supported',
- active: 'plyr--airplay-active'
- },
- tabFocus: 'plyr__tab-focus'
- },
-
- // Embed attributes
- attributes: {
- embed: {
- provider: 'data-plyr-provider',
- id: 'data-plyr-embed-id'
- }
- },
-
- // API keys
- keys: {
- google: null
- },
-
- // Advertisements plugin
- // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio
- ads: {
- enabled: false,
- publisherId: ''
- }
-};
-
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function createCommonjsModule(fn, module) {
@@ -636,6 +304,21 @@ return loadjs;
}));
});
+// ==========================================================================
+// Plyr supported types and providers
+// ==========================================================================
+
+var providers = {
+ html5: 'html5',
+ youtube: 'youtube',
+ vimeo: 'vimeo'
+};
+
+var types = {
+ audio: 'audio',
+ video: 'video'
+};
+
var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
@@ -988,14 +671,14 @@ var utils = {
},
- // Remove an element
+ // Remove element(s)
removeElement: function removeElement(element) {
- if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {
+ if (utils.is.nodeList(element) || utils.is.array(element)) {
+ Array.from(element).forEach(utils.removeElement);
return;
}
- if (utils.is.nodeList(element) || utils.is.array(element)) {
- Array.from(element).forEach(utils.removeElement);
+ if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {
return;
}
@@ -1167,61 +850,6 @@ var utils = {
},
- // Find the UI controls and store references in custom controls
- // TODO: Allow settings menus with custom controls
- findElements: function findElements() {
- try {
- this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);
-
- // Buttons
- this.elements.buttons = {
- play: utils.getElements.call(this, this.config.selectors.buttons.play),
- pause: utils.getElement.call(this, this.config.selectors.buttons.pause),
- restart: utils.getElement.call(this, this.config.selectors.buttons.restart),
- rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),
- fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),
- mute: utils.getElement.call(this, this.config.selectors.buttons.mute),
- pip: utils.getElement.call(this, this.config.selectors.buttons.pip),
- airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),
- settings: utils.getElement.call(this, this.config.selectors.buttons.settings),
- captions: utils.getElement.call(this, this.config.selectors.buttons.captions),
- fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen)
- };
-
- // Progress
- this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);
-
- // Inputs
- this.elements.inputs = {
- seek: utils.getElement.call(this, this.config.selectors.inputs.seek),
- volume: utils.getElement.call(this, this.config.selectors.inputs.volume)
- };
-
- // Display
- this.elements.display = {
- buffer: utils.getElement.call(this, this.config.selectors.display.buffer),
- currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),
- duration: utils.getElement.call(this, this.config.selectors.display.duration)
- };
-
- // Seek tooltip
- if (utils.is.element(this.elements.progress)) {
- this.elements.display.seekTooltip = this.elements.progress.querySelector('.' + this.config.classNames.tooltip);
- }
-
- return true;
- } catch (error) {
- // Log it
- this.debug.warn('It looks like there is a problem with your custom controls HTML', error);
-
- // Restore native video controls
- this.toggleNativeControls(true);
-
- return false;
- }
- },
-
-
// Get the focused element
getFocusElement: function getFocusElement() {
var focused = document.activeElement;
@@ -1395,6 +1023,22 @@ var utils = {
},
+ // Format string
+ format: function format(input) {
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ args[_key - 1] = arguments[_key];
+ }
+
+ if (utils.is.empty(input)) {
+ return input;
+ }
+
+ return input.toString().replace(/{(\d+)}/g, function (match, i) {
+ return utils.is.string(args[i]) ? args[i] : '';
+ });
+ },
+
+
// Get percentage
getPercentage: function getPercentage(current, max) {
if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {
@@ -1508,8 +1152,8 @@ var utils = {
extend: function extend() {
var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- sources[_key - 1] = arguments[_key];
+ for (var _len2 = arguments.length, sources = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+ sources[_key2 - 1] = arguments[_key2];
}
if (!sources.length) {
@@ -1861,279 +1505,157 @@ var support = {
};
// ==========================================================================
-// Console wrapper
-// ==========================================================================
-var noop = function noop() {};
-
-var Console = function () {
- function Console() {
- var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- classCallCheck(this, Console);
-
- this.enabled = window.console && enabled;
-
- if (this.enabled) {
- this.log('Debugging enabled');
- }
- }
-
- createClass(Console, [{
- key: 'log',
- get: function get$$1() {
- // eslint-disable-next-line no-console
- return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;
- }
- }, {
- key: 'warn',
- get: function get$$1() {
- // eslint-disable-next-line no-console
- return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;
- }
- }, {
- key: 'error',
- get: function get$$1() {
- // eslint-disable-next-line no-console
- return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;
+var html5 = {
+ getSources: function getSources() {
+ if (!this.isHTML5) {
+ return null;
}
- }]);
- return Console;
-}();
-
-// ==========================================================================
-
-var browser = utils.getBrowser();
-
-function onChange() {
- if (!this.enabled) {
- return;
- }
- // Update toggle button
- var button = this.player.elements.buttons.fullscreen;
- if (utils.is.element(button)) {
- utils.toggleState(button, this.active);
- }
-
- // Trigger an event
- utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);
-
- // Trap focus in container
- if (!browser.isIos) {
- utils.trapFocus.call(this.player, this.target, this.active);
- }
-}
-
-function toggleFallback() {
- var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
-
- // Store or restore scroll position
- if (toggle) {
- this.scrollPosition = {
- x: window.scrollX || 0,
- y: window.scrollY || 0
- };
- } else {
- window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);
- }
-
- // Toggle scroll
- document.body.style.overflow = toggle ? 'hidden' : '';
-
- // Toggle class hook
- utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);
-
- // Toggle button and fire events
- onChange.call(this);
-}
-
-var Fullscreen = function () {
- function Fullscreen(player) {
- var _this = this;
+ return this.media.querySelectorAll('source');
+ },
- classCallCheck(this, Fullscreen);
- // Keep reference to parent
- this.player = player;
+ // Get quality levels
+ getQualityOptions: function getQualityOptions() {
+ if (!this.isHTML5) {
+ return null;
+ }
- // Get prefix
- this.prefix = Fullscreen.prefix;
- this.property = Fullscreen.property;
+ // Get sources
+ var sources = html5.getSources.call(this);
- // Scroll position
- this.scrollPosition = { x: 0, y: 0 };
+ if (utils.is.empty(sources)) {
+ return null;
+ }
- // Register event listeners
- // Handle event (incase user presses escape etc)
- utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : this.prefix + 'fullscreenchange', function () {
- // TODO: Filter for target??
- onChange.call(_this);
+ // Get <source> with size attribute
+ var sizes = Array.from(sources).filter(function (source) {
+ return !utils.is.empty(source.getAttribute('size'));
});
- // Fullscreen toggle on double click
- utils.on(this.player.elements.container, 'dblclick', function (event) {
- // Ignore double click in controls
- if (utils.is.element(_this.player.elements.controls) && _this.player.elements.controls.contains(event.target)) {
- return;
- }
-
- _this.toggle();
- });
+ // If none, bail
+ if (utils.is.empty(sizes)) {
+ return null;
+ }
- // Update the UI
- this.update();
- }
+ // Reduce to unique list
+ return utils.dedupe(sizes.map(function (source) {
+ return Number(source.getAttribute('size'));
+ }));
+ },
+ extend: function extend() {
+ if (!this.isHTML5) {
+ return;
+ }
- // Determine if native supported
+ var player = this;
+ // Quality
+ Object.defineProperty(player.media, 'quality', {
+ get: function get() {
+ // Get sources
+ var sources = html5.getSources.call(player);
- createClass(Fullscreen, [{
- key: 'update',
+ if (utils.is.empty(sources)) {
+ return null;
+ }
+ var matches = Array.from(sources).filter(function (source) {
+ return source.getAttribute('src') === player.source;
+ });
- // Update UI
- value: function update() {
- if (this.enabled) {
- this.player.debug.log((Fullscreen.native ? 'Native' : 'Fallback') + ' fullscreen enabled');
- } else {
- this.player.debug.log('Fullscreen not supported and fallback disabled');
- }
+ if (utils.is.empty(matches)) {
+ return null;
+ }
- // Add styling hook to show button
- utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);
- }
+ return Number(matches[0].getAttribute('size'));
+ },
+ set: function set(input) {
+ // Get sources
+ var sources = html5.getSources.call(player);
- // Make an element fullscreen
+ if (utils.is.empty(sources)) {
+ return;
+ }
- }, {
- key: 'enter',
- value: function enter() {
- if (!this.enabled) {
- return;
- }
+ // Get matches for requested size
+ var matches = Array.from(sources).filter(function (source) {
+ return Number(source.getAttribute('size')) === input;
+ });
- // iOS native fullscreen doesn't need the request step
- if (browser.isIos && this.player.config.fullscreen.iosNative) {
- if (this.player.playing) {
- this.target.webkitEnterFullscreen();
+ // No matches for requested size
+ if (utils.is.empty(matches)) {
+ return;
}
- } else if (!Fullscreen.native) {
- toggleFallback.call(this, true);
- } else if (!this.prefix) {
- this.target.requestFullscreen();
- } else if (!utils.is.empty(this.prefix)) {
- this.target[this.prefix + 'Request' + this.property]();
- }
- }
- // Bail from fullscreen
+ // Get supported sources
+ var supported = matches.filter(function (source) {
+ return support.mime.call(player, source.getAttribute('type'));
+ });
- }, {
- key: 'exit',
- value: function exit() {
- if (!this.enabled) {
- return;
- }
+ // No supported sources
+ if (utils.is.empty(supported)) {
+ return;
+ }
- // iOS native fullscreen
- if (browser.isIos && this.player.config.fullscreen.iosNative) {
- this.target.webkitExitFullscreen();
- this.player.play();
- } else if (!Fullscreen.native) {
- toggleFallback.call(this, false);
- } else if (!this.prefix) {
- (document.cancelFullScreen || document.exitFullscreen).call(document);
- } else if (!utils.is.empty(this.prefix)) {
- var action = this.prefix === 'moz' ? 'Cancel' : 'Exit';
- document['' + this.prefix + action + this.property]();
- }
- }
+ // Trigger change event
+ utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {
+ quality: input
+ });
- // Toggle state
+ // Get current state
+ var currentTime = player.currentTime,
+ playing = player.playing;
- }, {
- key: 'toggle',
- value: function toggle() {
- if (!this.active) {
- this.enter();
- } else {
- this.exit();
- }
- }
- }, {
- key: 'enabled',
+ // Set new source
+ player.media.src = supported[0].getAttribute('src');
- // Determine if fullscreen is enabled
- get: function get$$1() {
- return (Fullscreen.native || this.player.config.fullscreen.fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;
- }
+ // Load new source
+ player.media.load();
- // Get active state
+ // Resume playing
+ if (playing) {
+ player.play();
+ }
- }, {
- key: 'active',
- get: function get$$1() {
- if (!this.enabled) {
- return false;
- }
+ // Restore time
+ player.currentTime = currentTime;
- // Fallback using classname
- if (!Fullscreen.native) {
- return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);
+ // Trigger change event
+ utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {
+ quality: input
+ });
}
+ });
+ },
- var element = !this.prefix ? document.fullscreenElement : document['' + this.prefix + this.property + 'Element'];
-
- return element === this.target;
- }
-
- // Get target element
- }, {
- key: 'target',
- get: function get$$1() {
- return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;
- }
- }], [{
- key: 'native',
- get: function get$$1() {
- return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);
+ // Cancel current network requests
+ // See https://github.com/sampotts/plyr/issues/174
+ cancelRequests: function cancelRequests() {
+ if (!this.isHTML5) {
+ return;
}
- // Get the prefix for handlers
-
- }, {
- key: 'prefix',
- get: function get$$1() {
- // No prefix
- if (utils.is.function(document.exitFullscreen)) {
- return '';
- }
-
- // Check for fullscreen support by vendor prefix
- var value = '';
- var prefixes = ['webkit', 'moz', 'ms'];
+ // Remove child sources
+ utils.removeElement(html5.getSources());
- prefixes.some(function (pre) {
- if (utils.is.function(document[pre + 'ExitFullscreen']) || utils.is.function(document[pre + 'CancelFullScreen'])) {
- value = pre;
- return true;
- }
+ // Set blank video src attribute
+ // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error
+ // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection
+ this.media.setAttribute('src', this.config.blankVideo);
- return false;
- });
+ // Load the new empty source
+ // This will cancel existing requests
+ // See https://github.com/sampotts/plyr/issues/174
+ this.media.load();
- return value;
- }
- }, {
- key: 'property',
- get: function get$$1() {
- return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';
- }
- }]);
- return Fullscreen;
-}();
+ // Debugging
+ this.debug.log('Cancelled network requests');
+ }
+};
// ==========================================================================
@@ -2167,277 +1689,8 @@ var i18n = {
// ==========================================================================
-var captions = {
- // Setup captions
- setup: function setup() {
- // Requires UI support
- if (!this.supported.ui) {
- return;
- }
-
- // Set default language if not set
- var stored = this.storage.get('language');
-
- if (!utils.is.empty(stored)) {
- this.captions.language = stored;
- }
-
- if (utils.is.empty(this.captions.language)) {
- this.captions.language = this.config.captions.language.toLowerCase();
- }
-
- // Set captions enabled state if not set
- if (!utils.is.boolean(this.captions.active)) {
- var active = this.storage.get('captions');
-
- if (utils.is.boolean(active)) {
- this.captions.active = active;
- } else {
- this.captions.active = this.config.captions.active;
- }
- }
-
- // Only Vimeo and HTML5 video supported at this point
- if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) {
- // Clear menu and hide
- if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {
- controls.setCaptionsMenu.call(this);
- }
-
- return;
- }
-
- // Inject the container
- if (!utils.is.element(this.elements.captions)) {
- this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));
-
- utils.insertAfter(this.elements.captions, this.elements.wrapper);
- }
-
- // Set the class hook
- utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));
-
- // Get tracks
- var tracks = captions.getTracks.call(this);
-
- // If no caption file exists, hide container for caption text
- if (utils.is.empty(tracks)) {
- return;
- }
-
- // Get browser info
- var browser = utils.getBrowser();
-
- // Fix IE captions if CORS is used
- // Fetch captions and inject as blobs instead (data URIs not supported!)
- if (browser.isIE && window.URL) {
- var elements = this.media.querySelectorAll('track');
-
- Array.from(elements).forEach(function (track) {
- var src = track.getAttribute('src');
- var href = utils.parseUrl(src);
-
- if (href.hostname !== window.location.href.hostname && ['http:', 'https:'].includes(href.protocol)) {
- utils.fetch(src, 'blob').then(function (blob) {
- track.setAttribute('src', window.URL.createObjectURL(blob));
- }).catch(function () {
- utils.removeElement(track);
- });
- }
- });
- }
-
- // Set language
- captions.setLanguage.call(this);
-
- // Enable UI
- captions.show.call(this);
-
- // Set available languages in list
- if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {
- controls.setCaptionsMenu.call(this);
- }
- },
-
-
- // Set the captions language
- setLanguage: function setLanguage() {
- var _this = this;
-
- // Setup HTML5 track rendering
- if (this.isHTML5 && this.isVideo) {
- captions.getTracks.call(this).forEach(function (track) {
- // Show track
- utils.on(track, 'cuechange', function (event) {
- return captions.setCue.call(_this, event);
- });
-
- // Turn off native caption rendering to avoid double captions
- // eslint-disable-next-line
- track.mode = 'hidden';
- });
-
- // Get current track
- var currentTrack = captions.getCurrentTrack.call(this);
-
- // Check if suported kind
- if (utils.is.track(currentTrack)) {
- // If we change the active track while a cue is already displayed we need to update it
- if (Array.from(currentTrack.activeCues || []).length) {
- captions.setCue.call(this, currentTrack);
- }
- }
- } else if (this.isVimeo && this.captions.active) {
- this.embed.enableTextTrack(this.language);
- }
- },
-
-
- // Get the tracks
- getTracks: function getTracks() {
- // Return empty array at least
- if (utils.is.nullOrUndefined(this.media)) {
- return [];
- }
-
- // Only get accepted kinds
- return Array.from(this.media.textTracks || []).filter(function (track) {
- return ['captions', 'subtitles'].includes(track.kind);
- });
- },
-
-
- // Get the current track for the current language
- getCurrentTrack: function getCurrentTrack() {
- var _this2 = this;
-
- var tracks = captions.getTracks.call(this);
-
- if (!tracks.length) {
- return null;
- }
-
- // Get track based on current language
- var track = tracks.find(function (track) {
- return track.language.toLowerCase() === _this2.language;
- });
-
- // Get the <track> with default attribute
- if (!track) {
- track = utils.getElement.call(this, 'track[default]');
- }
-
- // Get the first track
- if (!track) {
- var _tracks = slicedToArray(tracks, 1);
-
- track = _tracks[0];
- }
-
- return track;
- },
-
-
- // Get UI label for track
- getLabel: function getLabel(track) {
- var currentTrack = track;
-
- if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {
- currentTrack = captions.getCurrentTrack.call(this);
- }
-
- if (utils.is.track(currentTrack)) {
- if (!utils.is.empty(currentTrack.label)) {
- return currentTrack.label;
- }
-
- if (!utils.is.empty(currentTrack.language)) {
- return track.language.toUpperCase();
- }
-
- return i18n.get('enabled', this.config);
- }
-
- return i18n.get('disabled', this.config);
- },
-
-
- // Display active caption if it contains text
- setCue: function setCue(input) {
- // Get the track from the event if needed
- var track = utils.is.event(input) ? input.target : input;
- var activeCues = track.activeCues;
-
- var active = activeCues.length && activeCues[0];
- var currentTrack = captions.getCurrentTrack.call(this);
-
- // Only display current track
- if (track !== currentTrack) {
- return;
- }
-
- // Display a cue, if there is one
- if (utils.is.cue(active)) {
- captions.setText.call(this, active.getCueAsHTML());
- } else {
- captions.setText.call(this, null);
- }
-
- utils.dispatchEvent.call(this, this.media, 'cuechange');
- },
-
-
- // Set the current caption
- setText: function setText(input) {
- // Requires UI
- if (!this.supported.ui) {
- return;
- }
-
- if (utils.is.element(this.elements.captions)) {
- var content = utils.createElement('span');
-
- // Empty the container
- utils.emptyElement(this.elements.captions);
-
- // Default to empty
- var caption = !utils.is.nullOrUndefined(input) ? input : '';
-
- // Set the span content
- if (utils.is.string(caption)) {
- content.textContent = caption.trim();
- } else {
- content.appendChild(caption);
- }
-
- // Set new caption text
- this.elements.captions.appendChild(content);
- } else {
- this.debug.warn('No captions element to render to');
- }
- },
-
-
- // Display captions container and button (for initialization)
- show: function show() {
- // Try to load the value from storage
- var active = this.storage.get('captions');
-
- // Otherwise fall back to the default config
- if (!utils.is.boolean(active)) {
- active = this.config.captions.active;
- } else {
- this.captions.active = active;
- }
-
- if (active) {
- utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);
- utils.toggleState(this.elements.buttons.captions, true);
- }
- }
-};
-
-// ==========================================================================
+// Sniff out the browser
+var browser = utils.getBrowser();
var ui = {
addStyleHook: function addStyleHook() {
@@ -2516,6 +1769,18 @@ var ui = {
// Update the UI
ui.checkPlaying.call(this);
+ // Check for picture-in-picture support
+ utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);
+
+ // Check for airplay support
+ utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);
+
+ // Add iOS class
+ utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);
+
+ // Add touch class
+ utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);
+
// Ready for API calls
this.ready = true;
@@ -2526,6 +1791,9 @@ var ui = {
// Set the title
ui.setTitle.call(this);
+
+ // Set the poster image
+ ui.setPoster.call(this);
},
@@ -2560,9 +1828,24 @@ var ui = {
// Default to media type
var title = !utils.is.empty(this.config.title) ? this.config.title : 'video';
+ var format = i18n.get('frameTitle', this.config);
+
+ iframe.setAttribute('title', format.replace('{title}', title));
+ }
+ },
- iframe.setAttribute('title', i18n.get('frameTitle', this.config));
+
+ // Set the poster image
+ setPoster: function setPoster() {
+ if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {
+ return;
}
+
+ // Set the inline style
+ var posters = this.poster.split(',');
+ this.elements.poster.style.backgroundImage = posters.map(function (p) {
+ return 'url(\'' + p + '\')';
+ }).join(',');
},
@@ -2570,7 +1853,8 @@ var ui = {
checkPlaying: function checkPlaying() {
// Class hooks
utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);
- utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);
+ utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);
+ utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);
// Set ARIA state
utils.toggleState(this.elements.buttons.play, this.playing);
@@ -2777,159 +2061,6 @@ var ui = {
// ==========================================================================
-var html5 = {
- getSources: function getSources() {
- if (!this.isHTML5) {
- return null;
- }
-
- return this.media.querySelectorAll('source');
- },
-
-
- // Get quality levels
- getQualityOptions: function getQualityOptions() {
- if (!this.isHTML5) {
- return null;
- }
-
- // Get sources
- var sources = html5.getSources.call(this);
-
- if (utils.is.empty(sources)) {
- return null;
- }
-
- // Get <source> with size attribute
- var sizes = Array.from(sources).filter(function (source) {
- return !utils.is.empty(source.getAttribute('size'));
- });
-
- // If none, bail
- if (utils.is.empty(sizes)) {
- return null;
- }
-
- // Reduce to unique list
- return utils.dedupe(sizes.map(function (source) {
- return Number(source.getAttribute('size'));
- }));
- },
- extend: function extend() {
- if (!this.isHTML5) {
- return;
- }
-
- var player = this;
-
- // Quality
- Object.defineProperty(player.media, 'quality', {
- get: function get() {
- // Get sources
- var sources = html5.getSources.call(player);
-
- if (utils.is.empty(sources)) {
- return null;
- }
-
- var matches = Array.from(sources).filter(function (source) {
- return source.getAttribute('src') === player.source;
- });
-
- if (utils.is.empty(matches)) {
- return null;
- }
-
- return Number(matches[0].getAttribute('size'));
- },
- set: function set(input) {
- // Get sources
- var sources = html5.getSources.call(player);
-
- if (utils.is.empty(sources)) {
- return;
- }
-
- // Get matches for requested size
- var matches = Array.from(sources).filter(function (source) {
- return Number(source.getAttribute('size')) === input;
- });
-
- // No matches for requested size
- if (utils.is.empty(matches)) {
- return;
- }
-
- // Get supported sources
- var supported = matches.filter(function (source) {
- return support.mime.call(player, source.getAttribute('type'));
- });
-
- // No supported sources
- if (utils.is.empty(supported)) {
- return;
- }
-
- // Trigger change event
- utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {
- quality: input
- });
-
- // Get current state
- var currentTime = player.currentTime,
- playing = player.playing;
-
- // Set new source
-
- player.media.src = supported[0].getAttribute('src');
-
- // Load new source
- player.media.load();
-
- // Resume playing
- if (playing) {
- player.play();
- }
-
- // Restore time
- player.currentTime = currentTime;
-
- // Trigger change event
- utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {
- quality: input
- });
- }
- });
- },
-
-
- // Cancel current network requests
- // See https://github.com/sampotts/plyr/issues/174
- cancelRequests: function cancelRequests() {
- if (!this.isHTML5) {
- return;
- }
-
- // Remove child sources
- utils.removeElement(html5.getSources());
-
- // Set blank video src attribute
- // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error
- // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection
- this.media.setAttribute('src', this.config.blankVideo);
-
- // Load the new empty source
- // This will cancel existing requests
- // See https://github.com/sampotts/plyr/issues/174
- this.media.load();
-
- // Debugging
- this.debug.log('Cancelled network requests');
- }
-};
-
-// ==========================================================================
-
// Sniff out the browser
var browser$1 = utils.getBrowser();
@@ -2959,18 +2090,76 @@ var controls = {
// Get icon URL
getIconUrl: function getIconUrl() {
+ var url = new URL(this.config.iconUrl, window.location);
+ var cors = url.host !== window.location.host || browser$1.isIE && !window.svg4everybody;
+
return {
url: this.config.iconUrl,
- absolute: this.config.iconUrl.indexOf('http') === 0 || browser$1.isIE && !window.svg4everybody
+ cors: cors
};
},
+ // Find the UI controls and store references in custom controls
+ // TODO: Allow settings menus with custom controls
+ findElements: function findElements() {
+ try {
+ this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);
+
+ // Buttons
+ this.elements.buttons = {
+ play: utils.getElements.call(this, this.config.selectors.buttons.play),
+ pause: utils.getElement.call(this, this.config.selectors.buttons.pause),
+ restart: utils.getElement.call(this, this.config.selectors.buttons.restart),
+ rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),
+ fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),
+ mute: utils.getElement.call(this, this.config.selectors.buttons.mute),
+ pip: utils.getElement.call(this, this.config.selectors.buttons.pip),
+ airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),
+ settings: utils.getElement.call(this, this.config.selectors.buttons.settings),
+ captions: utils.getElement.call(this, this.config.selectors.buttons.captions),
+ fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen)
+ };
+
+ // Progress
+ this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);
+
+ // Inputs
+ this.elements.inputs = {
+ seek: utils.getElement.call(this, this.config.selectors.inputs.seek),
+ volume: utils.getElement.call(this, this.config.selectors.inputs.volume)
+ };
+
+ // Display
+ this.elements.display = {
+ buffer: utils.getElement.call(this, this.config.selectors.display.buffer),
+ currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),
+ duration: utils.getElement.call(this, this.config.selectors.display.duration)
+ };
+
+ // Seek tooltip
+ if (utils.is.element(this.elements.progress)) {
+ this.elements.display.seekTooltip = this.elements.progress.querySelector('.' + this.config.classNames.tooltip);
+ }
+
+ return true;
+ } catch (error) {
+ // Log it
+ this.debug.warn('It looks like there is a problem with your custom controls HTML', error);
+
+ // Restore native video controls
+ this.toggleNativeControls(true);
+
+ return false;
+ }
+ },
+
+
// Create <svg> icon
createIcon: function createIcon(type, attributes) {
var namespace = 'http://www.w3.org/2000/svg';
var iconUrl = controls.getIconUrl.call(this);
- var iconPath = (!iconUrl.absolute ? iconUrl.url : '') + '#' + this.config.iconPrefix;
+ var iconPath = (!iconUrl.cors ? iconUrl.url : '') + '#' + this.config.iconPrefix;
// Create <svg>
var icon = document.createElementNS(namespace, 'svg');
@@ -3742,12 +2931,11 @@ var controls = {
// Toggle Menu
- showTab: function showTab(event) {
+ showTab: function showTab() {
+ var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var menu = this.elements.settings.menu;
- var tab = event.target;
- var show = tab.getAttribute('aria-expanded') === 'false';
- var pane = document.getElementById(tab.getAttribute('aria-controls'));
+ var pane = document.getElementById(target);
// Nothing to show, bail
if (!utils.is.element(pane)) {
@@ -3807,8 +2995,12 @@ var controls = {
current.setAttribute('tabindex', -1);
// Set attributes on target
- utils.toggleHidden(pane, !show);
- tab.setAttribute('aria-expanded', show);
+ utils.toggleHidden(pane, false);
+
+ var tabs = utils.getElements.call(this, '[aria-controls="' + target + '"]');
+ Array.from(tabs).forEach(function (tab) {
+ tab.setAttribute('aria-expanded', true);
+ });
pane.removeAttribute('tabindex');
// Focus the first item
@@ -4071,7 +3263,7 @@ var controls = {
var icon = controls.getIconUrl.call(this);
// Only load external sprite using AJAX
- if (icon.absolute) {
+ if (icon.cors) {
utils.loadSprite(icon.url, 'sprite-plyr');
}
}
@@ -4158,7 +3350,7 @@ var controls = {
// Find the elements if need be
if (!utils.is.element(this.elements.controls)) {
- utils.findElements.call(this);
+ controls.findElements.call(this);
}
// Edge sometimes doesn't finish the paint so force a redraw
@@ -4181,9 +3373,879 @@ var controls = {
// ==========================================================================
-// Sniff out the browser
+var captions = {
+ // Setup captions
+ setup: function setup() {
+ // Requires UI support
+ if (!this.supported.ui) {
+ return;
+ }
+
+ // Set default language if not set
+ var stored = this.storage.get('language');
+
+ if (!utils.is.empty(stored)) {
+ this.captions.language = stored;
+ }
+
+ if (utils.is.empty(this.captions.language)) {
+ this.captions.language = this.config.captions.language.toLowerCase();
+ }
+
+ // Set captions enabled state if not set
+ if (!utils.is.boolean(this.captions.active)) {
+ var active = this.storage.get('captions');
+
+ if (utils.is.boolean(active)) {
+ this.captions.active = active;
+ } else {
+ this.captions.active = this.config.captions.active;
+ }
+ }
+
+ // Only Vimeo and HTML5 video supported at this point
+ if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) {
+ // Clear menu and hide
+ if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {
+ controls.setCaptionsMenu.call(this);
+ }
+
+ return;
+ }
+
+ // Inject the container
+ if (!utils.is.element(this.elements.captions)) {
+ this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));
+
+ utils.insertAfter(this.elements.captions, this.elements.wrapper);
+ }
+
+ // Set the class hook
+ utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));
+
+ // Get tracks
+ var tracks = captions.getTracks.call(this);
+
+ // If no caption file exists, hide container for caption text
+ if (utils.is.empty(tracks)) {
+ return;
+ }
+
+ // Get browser info
+ var browser = utils.getBrowser();
+
+ // Fix IE captions if CORS is used
+ // Fetch captions and inject as blobs instead (data URIs not supported!)
+ if (browser.isIE && window.URL) {
+ var elements = this.media.querySelectorAll('track');
+
+ Array.from(elements).forEach(function (track) {
+ var src = track.getAttribute('src');
+ var href = utils.parseUrl(src);
+
+ if (href.hostname !== window.location.href.hostname && ['http:', 'https:'].includes(href.protocol)) {
+ utils.fetch(src, 'blob').then(function (blob) {
+ track.setAttribute('src', window.URL.createObjectURL(blob));
+ }).catch(function () {
+ utils.removeElement(track);
+ });
+ }
+ });
+ }
+
+ // Set language
+ captions.setLanguage.call(this);
+
+ // Enable UI
+ captions.show.call(this);
+
+ // Set available languages in list
+ if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {
+ controls.setCaptionsMenu.call(this);
+ }
+ },
+
+
+ // Set the captions language
+ setLanguage: function setLanguage() {
+ var _this = this;
+
+ // Setup HTML5 track rendering
+ if (this.isHTML5 && this.isVideo) {
+ captions.getTracks.call(this).forEach(function (track) {
+ // Show track
+ utils.on(track, 'cuechange', function (event) {
+ return captions.setCue.call(_this, event);
+ });
+
+ // Turn off native caption rendering to avoid double captions
+ // eslint-disable-next-line
+ track.mode = 'hidden';
+ });
+
+ // Get current track
+ var currentTrack = captions.getCurrentTrack.call(this);
+
+ // Check if suported kind
+ if (utils.is.track(currentTrack)) {
+ // If we change the active track while a cue is already displayed we need to update it
+ if (Array.from(currentTrack.activeCues || []).length) {
+ captions.setCue.call(this, currentTrack);
+ }
+ }
+ } else if (this.isVimeo && this.captions.active) {
+ this.embed.enableTextTrack(this.language);
+ }
+ },
+
+
+ // Get the tracks
+ getTracks: function getTracks() {
+ // Return empty array at least
+ if (utils.is.nullOrUndefined(this.media)) {
+ return [];
+ }
+
+ // Only get accepted kinds
+ return Array.from(this.media.textTracks || []).filter(function (track) {
+ return ['captions', 'subtitles'].includes(track.kind);
+ });
+ },
+
+
+ // Get the current track for the current language
+ getCurrentTrack: function getCurrentTrack() {
+ var _this2 = this;
+
+ var tracks = captions.getTracks.call(this);
+
+ if (!tracks.length) {
+ return null;
+ }
+
+ // Get track based on current language
+ var track = tracks.find(function (track) {
+ return track.language.toLowerCase() === _this2.language;
+ });
+
+ // Get the <track> with default attribute
+ if (!track) {
+ track = utils.getElement.call(this, 'track[default]');
+ }
+
+ // Get the first track
+ if (!track) {
+ var _tracks = slicedToArray(tracks, 1);
+
+ track = _tracks[0];
+ }
+
+ return track;
+ },
+
+
+ // Get UI label for track
+ getLabel: function getLabel(track) {
+ var currentTrack = track;
+
+ if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {
+ currentTrack = captions.getCurrentTrack.call(this);
+ }
+
+ if (utils.is.track(currentTrack)) {
+ if (!utils.is.empty(currentTrack.label)) {
+ return currentTrack.label;
+ }
+
+ if (!utils.is.empty(currentTrack.language)) {
+ return track.language.toUpperCase();
+ }
+
+ return i18n.get('enabled', this.config);
+ }
+
+ return i18n.get('disabled', this.config);
+ },
+
+
+ // Display active caption if it contains text
+ setCue: function setCue(input) {
+ // Get the track from the event if needed
+ var track = utils.is.event(input) ? input.target : input;
+ var activeCues = track.activeCues;
+
+ var active = activeCues.length && activeCues[0];
+ var currentTrack = captions.getCurrentTrack.call(this);
+
+ // Only display current track
+ if (track !== currentTrack) {
+ return;
+ }
+
+ // Display a cue, if there is one
+ if (utils.is.cue(active)) {
+ captions.setText.call(this, active.getCueAsHTML());
+ } else {
+ captions.setText.call(this, null);
+ }
+
+ utils.dispatchEvent.call(this, this.media, 'cuechange');
+ },
+
+
+ // Set the current caption
+ setText: function setText(input) {
+ // Requires UI
+ if (!this.supported.ui) {
+ return;
+ }
+
+ if (utils.is.element(this.elements.captions)) {
+ var content = utils.createElement('span');
+
+ // Empty the container
+ utils.emptyElement(this.elements.captions);
+
+ // Default to empty
+ var caption = !utils.is.nullOrUndefined(input) ? input : '';
+
+ // Set the span content
+ if (utils.is.string(caption)) {
+ content.textContent = caption.trim();
+ } else {
+ content.appendChild(caption);
+ }
+
+ // Set new caption text
+ this.elements.captions.appendChild(content);
+ } else {
+ this.debug.warn('No captions element to render to');
+ }
+ },
+
+
+ // Display captions container and button (for initialization)
+ show: function show() {
+ // Try to load the value from storage
+ var active = this.storage.get('captions');
+
+ // Otherwise fall back to the default config
+ if (!utils.is.boolean(active)) {
+ active = this.config.captions.active;
+ } else {
+ this.captions.active = active;
+ }
+
+ if (active) {
+ utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);
+ utils.toggleState(this.elements.buttons.captions, true);
+ }
+ }
+};
+
+// ==========================================================================
+// Console wrapper
+// ==========================================================================
+
+var noop = function noop() {};
+
+var Console = function () {
+ function Console() {
+ var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+ classCallCheck(this, Console);
+
+ this.enabled = window.console && enabled;
+
+ if (this.enabled) {
+ this.log('Debugging enabled');
+ }
+ }
+
+ createClass(Console, [{
+ key: 'log',
+ get: function get$$1() {
+ // eslint-disable-next-line no-console
+ return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;
+ }
+ }, {
+ key: 'warn',
+ get: function get$$1() {
+ // eslint-disable-next-line no-console
+ return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;
+ }
+ }, {
+ key: 'error',
+ get: function get$$1() {
+ // eslint-disable-next-line no-console
+ return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;
+ }
+ }]);
+ return Console;
+}();
+
+// ==========================================================================
+// Plyr default config
+// ==========================================================================
+
+var defaults$1 = {
+ // Disable
+ enabled: true,
+
+ // Custom media title
+ title: '',
+
+ // Logging to console
+ debug: false,
+
+ // Auto play (if supported)
+ autoplay: false,
+
+ // Only allow one media playing at once (vimeo only)
+ autopause: true,
+
+ // Default time to skip when rewind/fast forward
+ seekTime: 10,
+
+ // Default volume
+ volume: 1,
+ muted: false,
+
+ // Pass a custom duration
+ duration: null,
+
+ // Display the media duration on load in the current time position
+ // If you have opted to display both duration and currentTime, this is ignored
+ displayDuration: true,
+
+ // Invert the current time to be a countdown
+ invertTime: true,
+
+ // Clicking the currentTime inverts it's value to show time left rather than elapsed
+ toggleInvert: true,
+
+ // Aspect ratio (for embeds)
+ ratio: '16:9',
+
+ // Click video container to play/pause
+ clickToPlay: true,
+
+ // Auto hide the controls
+ hideControls: true,
+
+ // Reset to start when playback ended
+ resetOnEnd: false,
+
+ // Disable the standard context menu
+ disableContextMenu: true,
+
+ // Sprite (for icons)
+ loadSprite: true,
+ iconPrefix: 'plyr',
+ iconUrl: 'https://cdn.plyr.io/3.3.0/plyr.svg',
+
+ // Blank video (used to prevent errors on source change)
+ blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
+
+ // Quality default
+ quality: {
+ default: 576,
+ options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240, 'default']
+ },
+
+ // Set loops
+ loop: {
+ active: false
+ // start: null,
+ // end: null,
+ },
+
+ // Speed default and options to display
+ speed: {
+ selected: 1,
+ options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]
+ },
+
+ // Keyboard shortcut settings
+ keyboard: {
+ focused: true,
+ global: false
+ },
+
+ // Display tooltips
+ tooltips: {
+ controls: false,
+ seek: true
+ },
+
+ // Captions settings
+ captions: {
+ active: false,
+ language: (navigator.language || navigator.userLanguage).split('-')[0]
+ },
+
+ // Fullscreen settings
+ fullscreen: {
+ enabled: true, // Allow fullscreen?
+ fallback: true, // Fallback for vintage browsers
+ iosNative: false // Use the native fullscreen in iOS (disables custom controls)
+ },
+
+ // Local storage
+ storage: {
+ enabled: true,
+ key: 'plyr'
+ },
+
+ // Default controls
+ controls: ['play-large',
+ // 'restart',
+ // 'rewind',
+ 'play',
+ // 'fast-forward',
+ 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay', 'fullscreen'],
+ settings: ['captions', 'quality', 'speed'],
+
+ // Localisation
+ i18n: {
+ restart: 'Restart',
+ rewind: 'Rewind {seektime} secs',
+ play: 'Play',
+ pause: 'Pause',
+ fastForward: 'Forward {seektime} secs',
+ seek: 'Seek',
+ played: 'Played',
+ buffered: 'Buffered',
+ currentTime: 'Current time',
+ duration: 'Duration',
+ volume: 'Volume',
+ mute: 'Mute',
+ unmute: 'Unmute',
+ enableCaptions: 'Enable captions',
+ disableCaptions: 'Disable captions',
+ enterFullscreen: 'Enter fullscreen',
+ exitFullscreen: 'Exit fullscreen',
+ frameTitle: 'Player for {title}',
+ captions: 'Captions',
+ settings: 'Settings',
+ speed: 'Speed',
+ normal: 'Normal',
+ quality: 'Quality',
+ loop: 'Loop',
+ start: 'Start',
+ end: 'End',
+ all: 'All',
+ reset: 'Reset',
+ disabled: 'Disabled',
+ enabled: 'Enabled',
+ advertisement: 'Ad'
+ },
+
+ // URLs
+ urls: {
+ vimeo: {
+ sdk: 'https://player.vimeo.com/api/player.js',
+ iframe: 'https://player.vimeo.com/video/{0}?{1}',
+ api: 'https://vimeo.com/api/v2/video/{0}.json'
+ },
+ youtube: {
+ sdk: 'https://www.youtube.com/iframe_api',
+ api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',
+ poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg'
+ },
+ googleIMA: {
+ sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'
+ }
+ },
+
+ // Custom control listeners
+ listeners: {
+ seek: null,
+ play: null,
+ pause: null,
+ restart: null,
+ rewind: null,
+ fastForward: null,
+ mute: null,
+ volume: null,
+ captions: null,
+ fullscreen: null,
+ pip: null,
+ airplay: null,
+ speed: null,
+ quality: null,
+ loop: null,
+ language: null
+ },
+
+ // Events to watch and bubble
+ events: [
+ // Events to watch on HTML5 media elements and bubble
+ // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events
+ 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'seeked', 'emptied', 'ratechange', 'cuechange',
+
+ // Custom events
+ 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled', 'languagechange', 'controlshidden', 'controlsshown', 'ready',
+
+ // YouTube
+ 'statechange', 'qualitychange', 'qualityrequested',
+
+ // Ads
+ 'adsloaded', 'adscontentpause', 'adscontentresume', 'adstarted', 'adsmidpoint', 'adscomplete', 'adsallcomplete', 'adsimpression', 'adsclick'],
+
+ // Selectors
+ // Change these to match your template if using custom HTML
+ selectors: {
+ editable: 'input, textarea, select, [contenteditable]',
+ container: '.plyr',
+ controls: {
+ container: null,
+ wrapper: '.plyr__controls'
+ },
+ labels: '[data-plyr]',
+ buttons: {
+ play: '[data-plyr="play"]',
+ pause: '[data-plyr="pause"]',
+ restart: '[data-plyr="restart"]',
+ rewind: '[data-plyr="rewind"]',
+ fastForward: '[data-plyr="fast-forward"]',
+ mute: '[data-plyr="mute"]',
+ captions: '[data-plyr="captions"]',
+ fullscreen: '[data-plyr="fullscreen"]',
+ pip: '[data-plyr="pip"]',
+ airplay: '[data-plyr="airplay"]',
+ settings: '[data-plyr="settings"]',
+ loop: '[data-plyr="loop"]'
+ },
+ inputs: {
+ seek: '[data-plyr="seek"]',
+ volume: '[data-plyr="volume"]',
+ speed: '[data-plyr="speed"]',
+ language: '[data-plyr="language"]',
+ quality: '[data-plyr="quality"]'
+ },
+ display: {
+ currentTime: '.plyr__time--current',
+ duration: '.plyr__time--duration',
+ buffer: '.plyr__progress--buffer',
+ played: '.plyr__progress--played',
+ loop: '.plyr__progress--loop',
+ volume: '.plyr__volume--display'
+ },
+ progress: '.plyr__progress',
+ captions: '.plyr__captions',
+ menu: {
+ quality: '.js-plyr__menu__list--quality'
+ }
+ },
+
+ // Class hooks added to the player in different states
+ classNames: {
+ video: 'plyr__video-wrapper',
+ embed: 'plyr__video-embed',
+ poster: 'plyr__poster',
+ ads: 'plyr__ads',
+ control: 'plyr__control',
+ type: 'plyr--{0}',
+ provider: 'plyr--{0}',
+ playing: 'plyr--playing',
+ paused: 'plyr--paused',
+ stopped: 'plyr--stopped',
+ loading: 'plyr--loading',
+ error: 'plyr--has-error',
+ hover: 'plyr--hover',
+ tooltip: 'plyr__tooltip',
+ cues: 'plyr__cues',
+ hidden: 'plyr__sr-only',
+ hideControls: 'plyr--hide-controls',
+ isIos: 'plyr--is-ios',
+ isTouch: 'plyr--is-touch',
+ uiSupported: 'plyr--full-ui',
+ noTransition: 'plyr--no-transition',
+ menu: {
+ value: 'plyr__menu__value',
+ badge: 'plyr__badge',
+ open: 'plyr--menu-open'
+ },
+ captions: {
+ enabled: 'plyr--captions-enabled',
+ active: 'plyr--captions-active'
+ },
+ fullscreen: {
+ enabled: 'plyr--fullscreen-enabled',
+ fallback: 'plyr--fullscreen-fallback'
+ },
+ pip: {
+ supported: 'plyr--pip-supported',
+ active: 'plyr--pip-active'
+ },
+ airplay: {
+ supported: 'plyr--airplay-supported',
+ active: 'plyr--airplay-active'
+ },
+ tabFocus: 'plyr__tab-focus'
+ },
+
+ // Embed attributes
+ attributes: {
+ embed: {
+ provider: 'data-plyr-provider',
+ id: 'data-plyr-embed-id'
+ }
+ },
+
+ // API keys
+ keys: {
+ google: null
+ },
+
+ // Advertisements plugin
+ // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio
+ ads: {
+ enabled: false,
+ publisherId: ''
+ }
+};
+
+// ==========================================================================
+
var browser$2 = utils.getBrowser();
+function onChange() {
+ if (!this.enabled) {
+ return;
+ }
+
+ // Update toggle button
+ var button = this.player.elements.buttons.fullscreen;
+ if (utils.is.element(button)) {
+ utils.toggleState(button, this.active);
+ }
+
+ // Trigger an event
+ utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);
+
+ // Trap focus in container
+ if (!browser$2.isIos) {
+ utils.trapFocus.call(this.player, this.target, this.active);
+ }
+}
+
+function toggleFallback() {
+ var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+ // Store or restore scroll position
+ if (toggle) {
+ this.scrollPosition = {
+ x: window.scrollX || 0,
+ y: window.scrollY || 0
+ };
+ } else {
+ window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);
+ }
+
+ // Toggle scroll
+ document.body.style.overflow = toggle ? 'hidden' : '';
+
+ // Toggle class hook
+ utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);
+
+ // Toggle button and fire events
+ onChange.call(this);
+}
+
+var Fullscreen = function () {
+ function Fullscreen(player) {
+ var _this = this;
+
+ classCallCheck(this, Fullscreen);
+
+ // Keep reference to parent
+ this.player = player;
+
+ // Get prefix
+ this.prefix = Fullscreen.prefix;
+ this.property = Fullscreen.property;
+
+ // Scroll position
+ this.scrollPosition = { x: 0, y: 0 };
+
+ // Register event listeners
+ // Handle event (incase user presses escape etc)
+ utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : this.prefix + 'fullscreenchange', function () {
+ // TODO: Filter for target??
+ onChange.call(_this);
+ });
+
+ // Fullscreen toggle on double click
+ utils.on(this.player.elements.container, 'dblclick', function (event) {
+ // Ignore double click in controls
+ if (utils.is.element(_this.player.elements.controls) && _this.player.elements.controls.contains(event.target)) {
+ return;
+ }
+
+ _this.toggle();
+ });
+
+ // Update the UI
+ this.update();
+ }
+
+ // Determine if native supported
+
+
+ createClass(Fullscreen, [{
+ key: 'update',
+
+
+ // Update UI
+ value: function update() {
+ if (this.enabled) {
+ this.player.debug.log((Fullscreen.native ? 'Native' : 'Fallback') + ' fullscreen enabled');
+ } else {
+ this.player.debug.log('Fullscreen not supported and fallback disabled');
+ }
+
+ // Add styling hook to show button
+ utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);
+ }
+
+ // Make an element fullscreen
+
+ }, {
+ key: 'enter',
+ value: function enter() {
+ if (!this.enabled) {
+ return;
+ }
+
+ // iOS native fullscreen doesn't need the request step
+ if (browser$2.isIos && this.player.config.fullscreen.iosNative) {
+ if (this.player.playing) {
+ this.target.webkitEnterFullscreen();
+ }
+ } else if (!Fullscreen.native) {
+ toggleFallback.call(this, true);
+ } else if (!this.prefix) {
+ this.target.requestFullscreen();
+ } else if (!utils.is.empty(this.prefix)) {
+ this.target[this.prefix + 'Request' + this.property]();
+ }
+ }
+
+ // Bail from fullscreen
+
+ }, {
+ key: 'exit',
+ value: function exit() {
+ if (!this.enabled) {
+ return;
+ }
+
+ // iOS native fullscreen
+ if (browser$2.isIos && this.player.config.fullscreen.iosNative) {
+ this.target.webkitExitFullscreen();
+ this.player.play();
+ } else if (!Fullscreen.native) {
+ toggleFallback.call(this, false);
+ } else if (!this.prefix) {
+ (document.cancelFullScreen || document.exitFullscreen).call(document);
+ } else if (!utils.is.empty(this.prefix)) {
+ var action = this.prefix === 'moz' ? 'Cancel' : 'Exit';
+ document['' + this.prefix + action + this.property]();
+ }
+ }
+
+ // Toggle state
+
+ }, {
+ key: 'toggle',
+ value: function toggle() {
+ if (!this.active) {
+ this.enter();
+ } else {
+ this.exit();
+ }
+ }
+ }, {
+ key: 'enabled',
+
+
+ // Determine if fullscreen is enabled
+ get: function get$$1() {
+ return (Fullscreen.native || this.player.config.fullscreen.fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;
+ }
+
+ // Get active state
+
+ }, {
+ key: 'active',
+ get: function get$$1() {
+ if (!this.enabled) {
+ return false;
+ }
+
+ // Fallback using classname
+ if (!Fullscreen.native) {
+ return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);
+ }
+
+ var element = !this.prefix ? document.fullscreenElement : document['' + this.prefix + this.property + 'Element'];
+
+ return element === this.target;
+ }
+
+ // Get target element
+
+ }, {
+ key: 'target',
+ get: function get$$1() {
+ return browser$2.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;
+ }
+ }], [{
+ key: 'native',
+ get: function get$$1() {
+ return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);
+ }
+
+ // Get the prefix for handlers
+
+ }, {
+ key: 'prefix',
+ get: function get$$1() {
+ // No prefix
+ if (utils.is.function(document.exitFullscreen)) {
+ return '';
+ }
+
+ // Check for fullscreen support by vendor prefix
+ var value = '';
+ var prefixes = ['webkit', 'moz', 'ms'];
+
+ prefixes.some(function (pre) {
+ if (utils.is.function(document[pre + 'ExitFullscreen']) || utils.is.function(document[pre + 'CancelFullScreen'])) {
+ value = pre;
+ return true;
+ }
+
+ return false;
+ });
+
+ return value;
+ }
+ }, {
+ key: 'property',
+ get: function get$$1() {
+ return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';
+ }
+ }]);
+ return Fullscreen;
+}();
+
+// ==========================================================================
+
+// Sniff out the browser
+var browser$3 = utils.getBrowser();
+
var Listeners = function () {
function Listeners(player) {
classCallCheck(this, Listeners);
@@ -4449,12 +4511,9 @@ var Listeners = function () {
// Handle the media finishing
utils.on(this.player.media, 'ended', function () {
// Show poster on end
- if (_this3.player.isHTML5 && _this3.player.isVideo && _this3.player.config.showPosterOnEnd) {
+ if (_this3.player.isHTML5 && _this3.player.isVideo && _this3.player.config.resetOnEnd) {
// Restart
_this3.player.restart();
-
- // Re-load media
- _this3.player.media.load();
}
});
@@ -4469,7 +4528,7 @@ var Listeners = function () {
});
// Handle play/pause
- utils.on(this.player.media, 'playing play pause ended emptied', function (event) {
+ utils.on(this.player.media, 'playing play pause ended emptied timeupdate', function (event) {
return ui.checkPlaying.call(_this3.player, event);
});
@@ -4601,7 +4660,7 @@ var Listeners = function () {
var _this4 = this;
// IE doesn't support input event, so we fallback to change
- var inputEvent = browser$2.isIE ? 'change' : 'input';
+ var inputEvent = browser$3.isIE ? 'change' : 'input';
// Run default and custom handlers
var proxy = function proxy(event, defaultHandler, customHandlerKey) {
@@ -4674,21 +4733,31 @@ var Listeners = function () {
on(this.player.elements.settings.form, 'click', function (event) {
event.stopPropagation();
+ // Go back to home tab on click
+ var showHomeTab = function showHomeTab() {
+ var id = 'plyr-settings-' + _this4.player.id + '-home';
+ controls.showTab.call(_this4.player, id);
+ };
+
// Settings menu items - use event delegation as items are added/removed
if (utils.matches(event.target, _this4.player.config.selectors.inputs.language)) {
proxy(event, function () {
_this4.player.language = event.target.value;
+ showHomeTab();
}, 'language');
} else if (utils.matches(event.target, _this4.player.config.selectors.inputs.quality)) {
proxy(event, function () {
_this4.player.quality = event.target.value;
+ showHomeTab();
}, 'quality');
} else if (utils.matches(event.target, _this4.player.config.selectors.inputs.speed)) {
proxy(event, function () {
_this4.player.speed = parseFloat(event.target.value);
+ showHomeTab();
}, 'speed');
} else {
- controls.showTab.call(_this4.player, event);
+ var tab = event.target;
+ controls.showTab.call(_this4.player, tab.getAttribute('aria-controls'));
}
});
@@ -4717,7 +4786,7 @@ var Listeners = function () {
}, 'volume');
// Polyfill for lower fill in <input type="range"> for webkit
- if (browser$2.isWebkit) {
+ if (browser$3.isWebkit) {
on(utils.getElements.call(this.player, 'input[type="range"]'), 'input', function (event) {
controls.updateRangeFill.call(_this4.player, event.target);
});
@@ -4796,84 +4865,929 @@ var Listeners = function () {
// ==========================================================================
-var Storage = function () {
- function Storage(player) {
- classCallCheck(this, Storage);
+var vimeo = {
+ setup: function setup() {
+ var _this = this;
- this.enabled = player.config.storage.enabled;
- this.key = player.config.storage.key;
- }
+ // Add embed class for responsive
+ utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);
- // Check for actual support (see if we can use it)
+ // Set intial ratio
+ vimeo.setAspectRatio.call(this);
+ // Load the API if not already
+ if (!utils.is.object(window.Vimeo)) {
+ utils.loadScript(this.config.urls.vimeo.sdk).then(function () {
+ vimeo.ready.call(_this);
+ }).catch(function (error) {
+ _this.debug.warn('Vimeo API failed to load', error);
+ });
+ } else {
+ vimeo.ready.call(this);
+ }
+ },
- createClass(Storage, [{
- key: 'get',
- value: function get$$1(key) {
- if (!Storage.supported) {
- return null;
- }
- var store = window.localStorage.getItem(this.key);
+ // Set aspect ratio
+ // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI
+ setAspectRatio: function setAspectRatio(input) {
+ var ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');
+ var padding = 100 / ratio[0] * ratio[1];
+ this.elements.wrapper.style.paddingBottom = padding + '%';
- if (utils.is.empty(store)) {
- return null;
- }
+ if (this.supported.ui) {
+ var height = 240;
+ var offset = (height - padding) / (height / 50);
- var json = JSON.parse(store);
+ this.media.style.transform = 'translateY(-' + offset + '%)';
+ }
+ },
- return utils.is.string(key) && key.length ? json[key] : json;
+
+ // API Ready
+ ready: function ready() {
+ var _this2 = this;
+
+ var player = this;
+
+ // Get Vimeo params for the iframe
+ var options = {
+ loop: player.config.loop.active,
+ autoplay: player.autoplay,
+ byline: false,
+ portrait: false,
+ title: false,
+ speed: true,
+ transparent: 0,
+ gesture: 'media',
+ playsinline: !this.config.fullscreen.iosNative
+ };
+ var params = utils.buildUrlParams(options);
+
+ // Get the source URL or ID
+ var source = player.media.getAttribute('src');
+
+ // Get from <div> if needed
+ if (utils.is.empty(source)) {
+ source = player.media.getAttribute(player.config.attributes.embed.id);
}
- }, {
- key: 'set',
- value: function set$$1(object) {
- // Bail if we don't have localStorage support or it's disabled
- if (!Storage.supported || !this.enabled) {
+
+ var id = utils.parseVimeoId(source);
+
+ // Build an iframe
+ var iframe = utils.createElement('iframe');
+ var src = utils.format(player.config.urls.vimeo.iframe, id, params);
+ iframe.setAttribute('src', src);
+ iframe.setAttribute('allowfullscreen', '');
+ iframe.setAttribute('allowtransparency', '');
+ iframe.setAttribute('allow', 'autoplay');
+
+ // Inject the package
+ var wrapper = utils.createElement('div');
+ wrapper.appendChild(iframe);
+ player.media = utils.replaceElement(wrapper, player.media);
+
+ // Get poster image
+ utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(function (response) {
+ if (utils.is.empty(response)) {
return;
}
- // Can only store objectst
- if (!utils.is.object(object)) {
- return;
+ // Get the URL for thumbnail
+ var url = new URL(response[0].thumbnail_large);
+
+ // Get original image
+ url.pathname = url.pathname.split('_')[0] + '.jpg';
+
+ // Set attribute
+ player.media.setAttribute('poster', url.href);
+
+ // Update
+ ui.setPoster.call(player);
+ });
+
+ // Setup instance
+ // https://github.com/vimeo/player.js
+ player.embed = new window.Vimeo.Player(iframe);
+
+ player.media.paused = true;
+ player.media.currentTime = 0;
+
+ // Disable native text track rendering
+ if (player.supported.ui) {
+ player.embed.disableTextTrack();
+ }
+
+ // Create a faux HTML5 API using the Vimeo API
+ player.media.play = function () {
+ player.embed.play().then(function () {
+ player.media.paused = false;
+ });
+ };
+
+ player.media.pause = function () {
+ player.embed.pause().then(function () {
+ player.media.paused = true;
+ });
+ };
+
+ player.media.stop = function () {
+ player.pause();
+ player.currentTime = 0;
+ };
+
+ // Seeking
+ var currentTime = player.media.currentTime;
+
+ Object.defineProperty(player.media, 'currentTime', {
+ get: function get() {
+ return currentTime;
+ },
+ set: function set(time) {
+ // Get current paused state
+ // Vimeo will automatically play on seek
+ var paused = player.media.paused;
+
+ // Set seeking flag
+
+ player.media.seeking = true;
+
+ // Trigger seeking
+ utils.dispatchEvent.call(player, player.media, 'seeking');
+
+ // Seek after events
+ player.embed.setCurrentTime(time).catch(function () {
+ // Do nothing
+ });
+
+ // Restore pause state
+ if (paused) {
+ player.pause();
+ }
}
+ });
- // Get current storage
- var storage = this.get();
+ // Playback speed
+ var speed = player.config.speed.selected;
+ Object.defineProperty(player.media, 'playbackRate', {
+ get: function get() {
+ return speed;
+ },
+ set: function set(input) {
+ player.embed.setPlaybackRate(input).then(function () {
+ speed = input;
+ utils.dispatchEvent.call(player, player.media, 'ratechange');
+ }).catch(function (error) {
+ // Hide menu item (and menu if empty)
+ if (error.name === 'Error') {
+ controls.setSpeedMenu.call(player, []);
+ }
+ });
+ }
+ });
- // Default to empty object
- if (utils.is.empty(storage)) {
- storage = {};
+ // Volume
+ var volume = player.config.volume;
+
+ Object.defineProperty(player.media, 'volume', {
+ get: function get() {
+ return volume;
+ },
+ set: function set(input) {
+ player.embed.setVolume(input).then(function () {
+ volume = input;
+ utils.dispatchEvent.call(player, player.media, 'volumechange');
+ });
}
+ });
- // Update the working copy of the values
- utils.extend(storage, object);
+ // Muted
+ var muted = player.config.muted;
- // Update storage
- window.localStorage.setItem(this.key, JSON.stringify(storage));
+ Object.defineProperty(player.media, 'muted', {
+ get: function get() {
+ return muted;
+ },
+ set: function set(input) {
+ var toggle = utils.is.boolean(input) ? input : false;
+
+ player.embed.setVolume(toggle ? 0 : player.config.volume).then(function () {
+ muted = toggle;
+ utils.dispatchEvent.call(player, player.media, 'volumechange');
+ });
+ }
+ });
+
+ // Loop
+ var loop = player.config.loop;
+
+ Object.defineProperty(player.media, 'loop', {
+ get: function get() {
+ return loop;
+ },
+ set: function set(input) {
+ var toggle = utils.is.boolean(input) ? input : player.config.loop.active;
+
+ player.embed.setLoop(toggle).then(function () {
+ loop = toggle;
+ });
+ }
+ });
+
+ // Source
+ var currentSrc = void 0;
+ player.embed.getVideoUrl().then(function (value) {
+ currentSrc = value;
+ }).catch(function (error) {
+ _this2.debug.warn(error);
+ });
+
+ Object.defineProperty(player.media, 'currentSrc', {
+ get: function get() {
+ return currentSrc;
+ }
+ });
+
+ // Ended
+ Object.defineProperty(player.media, 'ended', {
+ get: function get() {
+ return player.currentTime === player.duration;
+ }
+ });
+
+ // Set aspect ratio based on video size
+ Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(function (dimensions) {
+ var ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);
+ vimeo.setAspectRatio.call(_this2, ratio);
+ });
+
+ // Set autopause
+ player.embed.setAutopause(player.config.autopause).then(function (state) {
+ player.config.autopause = state;
+ });
+
+ // Get title
+ player.embed.getVideoTitle().then(function (title) {
+ player.config.title = title;
+ ui.setTitle.call(_this2);
+ });
+
+ // Get current time
+ player.embed.getCurrentTime().then(function (value) {
+ currentTime = value;
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+ });
+
+ // Get duration
+ player.embed.getDuration().then(function (value) {
+ player.media.duration = value;
+ utils.dispatchEvent.call(player, player.media, 'durationchange');
+ });
+
+ // Get captions
+ player.embed.getTextTracks().then(function (tracks) {
+ player.media.textTracks = tracks;
+ captions.setup.call(player);
+ });
+
+ player.embed.on('cuechange', function (data) {
+ var cue = null;
+
+ if (data.cues.length) {
+ cue = utils.stripHTML(data.cues[0].text);
+ }
+
+ captions.setText.call(player, cue);
+ });
+
+ player.embed.on('loaded', function () {
+ if (utils.is.element(player.embed.element) && player.supported.ui) {
+ var frame = player.embed.element;
+
+ // Fix keyboard focus issues
+ // https://github.com/sampotts/plyr/issues/317
+ frame.setAttribute('tabindex', -1);
+ }
+ });
+
+ player.embed.on('play', function () {
+ // Only fire play if paused before
+ if (player.media.paused) {
+ utils.dispatchEvent.call(player, player.media, 'play');
+ }
+ player.media.paused = false;
+ utils.dispatchEvent.call(player, player.media, 'playing');
+ });
+
+ player.embed.on('pause', function () {
+ player.media.paused = true;
+ utils.dispatchEvent.call(player, player.media, 'pause');
+ });
+
+ player.embed.on('timeupdate', function (data) {
+ player.media.seeking = false;
+ currentTime = data.seconds;
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+ });
+
+ player.embed.on('progress', function (data) {
+ player.media.buffered = data.percent;
+ utils.dispatchEvent.call(player, player.media, 'progress');
+
+ // Check all loaded
+ if (parseInt(data.percent, 10) === 1) {
+ utils.dispatchEvent.call(player, player.media, 'canplaythrough');
+ }
+
+ // Get duration as if we do it before load, it gives an incorrect value
+ // https://github.com/sampotts/plyr/issues/891
+ player.embed.getDuration().then(function (value) {
+ if (value !== player.media.duration) {
+ player.media.duration = value;
+ utils.dispatchEvent.call(player, player.media, 'durationchange');
+ }
+ });
+ });
+
+ player.embed.on('seeked', function () {
+ player.media.seeking = false;
+ utils.dispatchEvent.call(player, player.media, 'seeked');
+ utils.dispatchEvent.call(player, player.media, 'play');
+ });
+
+ player.embed.on('ended', function () {
+ player.media.paused = true;
+ utils.dispatchEvent.call(player, player.media, 'ended');
+ });
+
+ player.embed.on('error', function (detail) {
+ player.media.error = detail;
+ utils.dispatchEvent.call(player, player.media, 'error');
+ });
+
+ // Rebuild UI
+ setTimeout(function () {
+ return ui.build.call(player);
+ }, 0);
+ }
+};
+
+// ==========================================================================
+
+// Standardise YouTube quality unit
+function mapQualityUnit(input) {
+ switch (input) {
+ case 'hd2160':
+ return 2160;
+
+ case 2160:
+ return 'hd2160';
+
+ case 'hd1440':
+ return 1440;
+
+ case 1440:
+ return 'hd1440';
+
+ case 'hd1080':
+ return 1080;
+
+ case 1080:
+ return 'hd1080';
+
+ case 'hd720':
+ return 720;
+
+ case 720:
+ return 'hd720';
+
+ case 'large':
+ return 480;
+
+ case 480:
+ return 'large';
+
+ case 'medium':
+ return 360;
+
+ case 360:
+ return 'medium';
+
+ case 'small':
+ return 240;
+
+ case 240:
+ return 'small';
+
+ default:
+ return 'default';
+ }
+}
+
+function mapQualityUnits(levels) {
+ if (utils.is.empty(levels)) {
+ return levels;
+ }
+
+ return utils.dedupe(levels.map(function (level) {
+ return mapQualityUnit(level);
+ }));
+}
+
+var youtube = {
+ setup: function setup() {
+ var _this = this;
+
+ // Add embed class for responsive
+ utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);
+
+ // Set aspect ratio
+ youtube.setAspectRatio.call(this);
+
+ // Setup API
+ if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {
+ youtube.ready.call(this);
+ } else {
+ // Load the API
+ utils.loadScript(this.config.urls.youtube.sdk).catch(function (error) {
+ _this.debug.warn('YouTube API failed to load', error);
+ });
+
+ // Setup callback for the API
+ // YouTube has it's own system of course...
+ window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];
+
+ // Add to queue
+ window.onYouTubeReadyCallbacks.push(function () {
+ youtube.ready.call(_this);
+ });
+
+ // Set callback to process queue
+ window.onYouTubeIframeAPIReady = function () {
+ window.onYouTubeReadyCallbacks.forEach(function (callback) {
+ callback();
+ });
+ };
}
- }], [{
- key: 'supported',
- get: function get$$1() {
- try {
- if (!('localStorage' in window)) {
- return false;
+ },
+
+
+ // Get the media title
+ getTitle: function getTitle(videoId) {
+ var _this2 = this;
+
+ // Try via undocumented API method first
+ // This method disappears now and then though...
+ // https://github.com/sampotts/plyr/issues/709
+ if (utils.is.function(this.embed.getVideoData)) {
+ var _embed$getVideoData = this.embed.getVideoData(),
+ title = _embed$getVideoData.title;
+
+ if (utils.is.empty(title)) {
+ this.config.title = title;
+ ui.setTitle.call(this);
+ return;
+ }
+ }
+
+ // Or via Google API
+ var key = this.config.keys.google;
+ if (utils.is.string(key) && !utils.is.empty(key)) {
+ var url = utils.format(this.config.urls.youtube.api, videoId, key);
+
+ utils.fetch(url).then(function (result) {
+ if (utils.is.object(result)) {
+ _this2.config.title = result.items[0].snippet.title;
+ ui.setTitle.call(_this2);
}
+ }).catch(function () {});
+ }
+ },
- var test = '___test';
- // Try to use it (it might be disabled, e.g. user is in private mode)
- // see: https://github.com/sampotts/plyr/issues/131
- window.localStorage.setItem(test, test);
- window.localStorage.removeItem(test);
+ // Set aspect ratio
+ setAspectRatio: function setAspectRatio() {
+ var ratio = this.config.ratio.split(':');
+ this.elements.wrapper.style.paddingBottom = 100 / ratio[0] * ratio[1] + '%';
+ },
- return true;
- } catch (e) {
- return false;
+
+ // API ready
+ ready: function ready() {
+ var player = this;
+
+ // Ignore already setup (race condition)
+ var currentId = player.media.getAttribute('id');
+ if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {
+ return;
+ }
+
+ // Get the source URL or ID
+ var source = player.media.getAttribute('src');
+
+ // Get from <div> if needed
+ if (utils.is.empty(source)) {
+ source = player.media.getAttribute(this.config.attributes.embed.id);
+ }
+
+ // Replace the <iframe> with a <div> due to YouTube API issues
+ var videoId = utils.parseYouTubeId(source);
+ var id = utils.generateId(player.provider);
+ var container = utils.createElement('div', { id: id });
+ player.media = utils.replaceElement(container, player.media);
+
+ // Set poster image
+ player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));
+
+ // Setup instance
+ // https://developers.google.com/youtube/iframe_api_reference
+ player.embed = new window.YT.Player(id, {
+ videoId: videoId,
+ playerVars: {
+ autoplay: player.config.autoplay ? 1 : 0, // Autoplay
+ controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported
+ rel: 0, // No related vids
+ showinfo: 0, // Hide info
+ iv_load_policy: 3, // Hide annotations
+ modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)
+ disablekb: 1, // Disable keyboard as we handle it
+ playsinline: 1, // Allow iOS inline playback
+
+ // Tracking for stats
+ // origin: window ? `${window.location.protocol}//${window.location.host}` : null,
+ widget_referrer: window ? window.location.href : null,
+
+ // Captions are flaky on YouTube
+ cc_load_policy: player.captions.active ? 1 : 0,
+ cc_lang_pref: player.config.captions.language
+ },
+ events: {
+ onError: function onError(event) {
+ // If we've already fired an error, don't do it again
+ // YouTube fires onError twice
+ if (utils.is.object(player.media.error)) {
+ return;
+ }
+
+ var detail = {
+ code: event.data
+ };
+
+ // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError
+ switch (event.data) {
+ case 2:
+ detail.message = 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';
+ break;
+
+ case 5:
+ detail.message = 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';
+ break;
+
+ case 100:
+ detail.message = 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';
+ break;
+
+ case 101:
+ case 150:
+ detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';
+ break;
+
+ default:
+ detail.message = 'An unknown error occured';
+ break;
+ }
+
+ player.media.error = detail;
+
+ utils.dispatchEvent.call(player, player.media, 'error');
+ },
+ onPlaybackQualityChange: function onPlaybackQualityChange() {
+ utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {
+ quality: player.media.quality
+ });
+ },
+ onPlaybackRateChange: function onPlaybackRateChange(event) {
+ // Get the instance
+ var instance = event.target;
+
+ // Get current speed
+ player.media.playbackRate = instance.getPlaybackRate();
+
+ utils.dispatchEvent.call(player, player.media, 'ratechange');
+ },
+ onReady: function onReady(event) {
+ // Get the instance
+ var instance = event.target;
+
+ // Get the title
+ youtube.getTitle.call(player, videoId);
+
+ // Create a faux HTML5 API using the YouTube API
+ player.media.play = function () {
+ instance.playVideo();
+ };
+
+ player.media.pause = function () {
+ instance.pauseVideo();
+ };
+
+ player.media.stop = function () {
+ instance.stopVideo();
+ };
+
+ player.media.duration = instance.getDuration();
+ player.media.paused = true;
+
+ // Seeking
+ player.media.currentTime = 0;
+ Object.defineProperty(player.media, 'currentTime', {
+ get: function get() {
+ return Number(instance.getCurrentTime());
+ },
+ set: function set(time) {
+ // Vimeo will automatically play on seek
+ var paused = player.media.paused;
+
+ // Set seeking flag
+
+ player.media.seeking = true;
+
+ // Trigger seeking
+ utils.dispatchEvent.call(player, player.media, 'seeking');
+
+ // Seek after events sent
+ instance.seekTo(time);
+
+ // Restore pause state
+ if (paused) {
+ player.pause();
+ }
+ }
+ });
+
+ // Playback speed
+ Object.defineProperty(player.media, 'playbackRate', {
+ get: function get() {
+ return instance.getPlaybackRate();
+ },
+ set: function set(input) {
+ instance.setPlaybackRate(input);
+ }
+ });
+
+ // Quality
+ Object.defineProperty(player.media, 'quality', {
+ get: function get() {
+ return mapQualityUnit(instance.getPlaybackQuality());
+ },
+ set: function set(input) {
+ var quality = input;
+
+ // Set via API
+ instance.setPlaybackQuality(mapQualityUnit(quality));
+
+ // Trigger request event
+ utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {
+ quality: quality
+ });
+ }
+ });
+
+ // Volume
+ var volume = player.config.volume;
+
+ Object.defineProperty(player.media, 'volume', {
+ get: function get() {
+ return volume;
+ },
+ set: function set(input) {
+ volume = input;
+ instance.setVolume(volume * 100);
+ utils.dispatchEvent.call(player, player.media, 'volumechange');
+ }
+ });
+
+ // Muted
+ var muted = player.config.muted;
+
+ Object.defineProperty(player.media, 'muted', {
+ get: function get() {
+ return muted;
+ },
+ set: function set(input) {
+ var toggle = utils.is.boolean(input) ? input : muted;
+ muted = toggle;
+ instance[toggle ? 'mute' : 'unMute']();
+ utils.dispatchEvent.call(player, player.media, 'volumechange');
+ }
+ });
+
+ // Source
+ Object.defineProperty(player.media, 'currentSrc', {
+ get: function get() {
+ return instance.getVideoUrl();
+ }
+ });
+
+ // Ended
+ Object.defineProperty(player.media, 'ended', {
+ get: function get() {
+ return player.currentTime === player.duration;
+ }
+ });
+
+ // Get available speeds
+ player.options.speed = instance.getAvailablePlaybackRates();
+
+ // Set the tabindex to avoid focus entering iframe
+ if (player.supported.ui) {
+ player.media.setAttribute('tabindex', -1);
+ }
+
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+ utils.dispatchEvent.call(player, player.media, 'durationchange');
+
+ // Reset timer
+ clearInterval(player.timers.buffering);
+
+ // Setup buffering
+ player.timers.buffering = setInterval(function () {
+ // Get loaded % from YouTube
+ player.media.buffered = instance.getVideoLoadedFraction();
+
+ // Trigger progress only when we actually buffer something
+ if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {
+ utils.dispatchEvent.call(player, player.media, 'progress');
+ }
+
+ // Set last buffer point
+ player.media.lastBuffered = player.media.buffered;
+
+ // Bail if we're at 100%
+ if (player.media.buffered === 1) {
+ clearInterval(player.timers.buffering);
+
+ // Trigger event
+ utils.dispatchEvent.call(player, player.media, 'canplaythrough');
+ }
+ }, 200);
+
+ // Rebuild UI
+ setTimeout(function () {
+ return ui.build.call(player);
+ }, 50);
+ },
+ onStateChange: function onStateChange(event) {
+ // Get the instance
+ var instance = event.target;
+
+ // Reset timer
+ clearInterval(player.timers.playing);
+
+ // Handle events
+ // -1 Unstarted
+ // 0 Ended
+ // 1 Playing
+ // 2 Paused
+ // 3 Buffering
+ // 5 Video cued
+ switch (event.data) {
+ case -1:
+ // Update scrubber
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+
+ // Get loaded % from YouTube
+ player.media.buffered = instance.getVideoLoadedFraction();
+ utils.dispatchEvent.call(player, player.media, 'progress');
+
+ break;
+
+ case 0:
+ player.media.paused = true;
+
+ // YouTube doesn't support loop for a single video, so mimick it.
+ if (player.media.loop) {
+ // YouTube needs a call to `stopVideo` before playing again
+ instance.stopVideo();
+ instance.playVideo();
+ } else {
+ utils.dispatchEvent.call(player, player.media, 'ended');
+ }
+
+ break;
+
+ case 1:
+ // If we were seeking, fire seeked event
+ if (player.media.seeking) {
+ utils.dispatchEvent.call(player, player.media, 'seeked');
+ }
+ player.media.seeking = false;
+
+ // Only fire play if paused before
+ if (player.media.paused) {
+ utils.dispatchEvent.call(player, player.media, 'play');
+ }
+ player.media.paused = false;
+
+ utils.dispatchEvent.call(player, player.media, 'playing');
+
+ // Poll to get playback progress
+ player.timers.playing = setInterval(function () {
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+ }, 50);
+
+ // Check duration again due to YouTube bug
+ // https://github.com/sampotts/plyr/issues/374
+ // https://code.google.com/p/gdata-issues/issues/detail?id=8690
+ if (player.media.duration !== instance.getDuration()) {
+ player.media.duration = instance.getDuration();
+ utils.dispatchEvent.call(player, player.media, 'durationchange');
+ }
+
+ // Get quality
+ controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));
+
+ break;
+
+ case 2:
+ player.media.paused = true;
+
+ utils.dispatchEvent.call(player, player.media, 'pause');
+
+ break;
+
+ default:
+ break;
+ }
+
+ utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {
+ code: event.data
+ });
+ }
}
+ });
+ }
+};
+
+// ==========================================================================
+
+var media = {
+ // Setup media
+ setup: function setup() {
+ // If there's no media, bail
+ if (!this.media) {
+ this.debug.warn('No media element found!');
+ return;
}
- }]);
- return Storage;
-}();
+
+ // Add type class
+ utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);
+
+ // Add provider class
+ utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);
+
+ // Add video class for embeds
+ // This will require changes if audio embeds are added
+ if (this.isEmbed) {
+ utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);
+ }
+
+ // Inject the player wrapper
+ if (this.isVideo) {
+ // Create the wrapper div
+ this.elements.wrapper = utils.createElement('div', {
+ class: this.config.classNames.video
+ });
+
+ // Wrap the video in a container
+ utils.wrap(this.media, this.elements.wrapper);
+
+ // Faux poster container
+ this.elements.poster = utils.createElement('span', {
+ class: this.config.classNames.poster
+ });
+
+ this.elements.wrapper.appendChild(this.elements.poster);
+ }
+
+ if (this.isEmbed) {
+ switch (this.provider) {
+ case 'youtube':
+ youtube.setup.call(this);
+ break;
+
+ case 'vimeo':
+ vimeo.setup.call(this);
+ break;
+
+ default:
+ break;
+ }
+ } else if (this.isHTML5) {
+ html5.extend.call(this);
+ }
+ }
+};
// ==========================================================================
@@ -4929,7 +5843,7 @@ var Ads = function () {
if (this.enabled) {
// Check if the Google IMA3 SDK is loaded or load it ourselves
if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {
- utils.loadScript(this.player.config.urls.googleIMA.api).then(function () {
+ utils.loadScript(this.player.config.urls.googleIMA.sdk).then(function () {
_this2.ready();
}).catch(function () {
// Script failed to load or is blocked
@@ -5039,6 +5953,9 @@ var Ads = function () {
// We only overlay ads as we only support video.
request.forceNonLinearFullSlot = false;
+ // Mute based on current state
+ request.setAdWillPlayMuted(!this.player.muted);
+
this.loader.requestAds(request);
} catch (e) {
this.onAdError(e);
@@ -5117,7 +6034,7 @@ var Ads = function () {
// Get skippable state
// TODO: Skip button
- // this.manager.getAdSkippableState();
+ // this.player.debug.warn(this.manager.getAdSkippableState());
// Set volume to match player
this.manager.setVolume(this.player.volume);
@@ -5547,925 +6464,6 @@ var Ads = function () {
// ==========================================================================
-// Standardise YouTube quality unit
-function mapQualityUnit(input) {
- switch (input) {
- case 'hd2160':
- return 2160;
-
- case 2160:
- return 'hd2160';
-
- case 'hd1440':
- return 1440;
-
- case 1440:
- return 'hd1440';
-
- case 'hd1080':
- return 1080;
-
- case 1080:
- return 'hd1080';
-
- case 'hd720':
- return 720;
-
- case 720:
- return 'hd720';
-
- case 'large':
- return 480;
-
- case 480:
- return 'large';
-
- case 'medium':
- return 360;
-
- case 360:
- return 'medium';
-
- case 'small':
- return 240;
-
- case 240:
- return 'small';
-
- default:
- return 'default';
- }
-}
-
-function mapQualityUnits(levels) {
- if (utils.is.empty(levels)) {
- return levels;
- }
-
- return utils.dedupe(levels.map(function (level) {
- return mapQualityUnit(level);
- }));
-}
-
-var youtube = {
- setup: function setup() {
- var _this = this;
-
- // Add embed class for responsive
- utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);
-
- // Set aspect ratio
- youtube.setAspectRatio.call(this);
-
- // Setup API
- if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {
- youtube.ready.call(this);
- } else {
- // Load the API
- utils.loadScript(this.config.urls.youtube.api).catch(function (error) {
- _this.debug.warn('YouTube API failed to load', error);
- });
-
- // Setup callback for the API
- // YouTube has it's own system of course...
- window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];
-
- // Add to queue
- window.onYouTubeReadyCallbacks.push(function () {
- youtube.ready.call(_this);
- });
-
- // Set callback to process queue
- window.onYouTubeIframeAPIReady = function () {
- window.onYouTubeReadyCallbacks.forEach(function (callback) {
- callback();
- });
- };
- }
- },
-
-
- // Get the media title
- getTitle: function getTitle(videoId) {
- var _this2 = this;
-
- // Try via undocumented API method first
- // This method disappears now and then though...
- // https://github.com/sampotts/plyr/issues/709
- if (utils.is.function(this.embed.getVideoData)) {
- var _embed$getVideoData = this.embed.getVideoData(),
- title = _embed$getVideoData.title;
-
- if (utils.is.empty(title)) {
- this.config.title = title;
- ui.setTitle.call(this);
- return;
- }
- }
-
- // Or via Google API
- var key = this.config.keys.google;
- if (utils.is.string(key) && !utils.is.empty(key)) {
- var url = 'https://www.googleapis.com/youtube/v3/videos?id=' + videoId + '&key=' + key + '&fields=items(snippet(title))&part=snippet';
-
- utils.fetch(url).then(function (result) {
- if (utils.is.object(result)) {
- _this2.config.title = result.items[0].snippet.title;
- ui.setTitle.call(_this2);
- }
- }).catch(function () {});
- }
- },
-
-
- // Set aspect ratio
- setAspectRatio: function setAspectRatio() {
- var ratio = this.config.ratio.split(':');
- this.elements.wrapper.style.paddingBottom = 100 / ratio[0] * ratio[1] + '%';
- },
-
-
- // API ready
- ready: function ready() {
- var player = this;
-
- // Ignore already setup (race condition)
- var currentId = player.media.getAttribute('id');
- if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {
- return;
- }
-
- // Get the source URL or ID
- var source = player.media.getAttribute('src');
-
- // Get from <div> if needed
- if (utils.is.empty(source)) {
- source = player.media.getAttribute(this.config.attributes.embed.id);
- }
-
- // Replace the <iframe> with a <div> due to YouTube API issues
- var videoId = utils.parseYouTubeId(source);
- var id = utils.generateId(player.provider);
- var container = utils.createElement('div', { id: id });
- player.media = utils.replaceElement(container, player.media);
-
- // Setup instance
- // https://developers.google.com/youtube/iframe_api_reference
- player.embed = new window.YT.Player(id, {
- videoId: videoId,
- playerVars: {
- autoplay: player.config.autoplay ? 1 : 0, // Autoplay
- controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported
- rel: 0, // No related vids
- showinfo: 0, // Hide info
- iv_load_policy: 3, // Hide annotations
- modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)
- disablekb: 1, // Disable keyboard as we handle it
- playsinline: 1, // Allow iOS inline playback
-
- // Tracking for stats
- // origin: window ? `${window.location.protocol}//${window.location.host}` : null,
- widget_referrer: window ? window.location.href : null,
-
- // Captions are flaky on YouTube
- cc_load_policy: player.captions.active ? 1 : 0,
- cc_lang_pref: player.config.captions.language
- },
- events: {
- onError: function onError(event) {
- // If we've already fired an error, don't do it again
- // YouTube fires onError twice
- if (utils.is.object(player.media.error)) {
- return;
- }
-
- var detail = {
- code: event.data
- };
-
- // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError
- switch (event.data) {
- case 2:
- detail.message = 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';
- break;
-
- case 5:
- detail.message = 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';
- break;
-
- case 100:
- detail.message = 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';
- break;
-
- case 101:
- case 150:
- detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';
- break;
-
- default:
- detail.message = 'An unknown error occured';
- break;
- }
-
- player.media.error = detail;
-
- utils.dispatchEvent.call(player, player.media, 'error');
- },
- onPlaybackQualityChange: function onPlaybackQualityChange() {
- utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {
- quality: player.media.quality
- });
- },
- onPlaybackRateChange: function onPlaybackRateChange(event) {
- // Get the instance
- var instance = event.target;
-
- // Get current speed
- player.media.playbackRate = instance.getPlaybackRate();
-
- utils.dispatchEvent.call(player, player.media, 'ratechange');
- },
- onReady: function onReady(event) {
- // Get the instance
- var instance = event.target;
-
- // Get the title
- youtube.getTitle.call(player, videoId);
-
- // Create a faux HTML5 API using the YouTube API
- player.media.play = function () {
- instance.playVideo();
- };
-
- player.media.pause = function () {
- instance.pauseVideo();
- };
-
- player.media.stop = function () {
- instance.stopVideo();
- };
-
- player.media.duration = instance.getDuration();
- player.media.paused = true;
-
- // Seeking
- player.media.currentTime = 0;
- Object.defineProperty(player.media, 'currentTime', {
- get: function get() {
- return Number(instance.getCurrentTime());
- },
- set: function set(time) {
- // Vimeo will automatically play on seek
- var paused = player.media.paused;
-
- // Set seeking flag
-
- player.media.seeking = true;
-
- // Trigger seeking
- utils.dispatchEvent.call(player, player.media, 'seeking');
-
- // Seek after events sent
- instance.seekTo(time);
-
- // Restore pause state
- if (paused) {
- player.pause();
- }
- }
- });
-
- // Playback speed
- Object.defineProperty(player.media, 'playbackRate', {
- get: function get() {
- return instance.getPlaybackRate();
- },
- set: function set(input) {
- instance.setPlaybackRate(input);
- }
- });
-
- // Quality
- Object.defineProperty(player.media, 'quality', {
- get: function get() {
- return mapQualityUnit(instance.getPlaybackQuality());
- },
- set: function set(input) {
- var quality = input;
-
- // Set via API
- instance.setPlaybackQuality(mapQualityUnit(quality));
-
- // Trigger request event
- utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {
- quality: quality
- });
- }
- });
-
- // Volume
- var volume = player.config.volume;
-
- Object.defineProperty(player.media, 'volume', {
- get: function get() {
- return volume;
- },
- set: function set(input) {
- volume = input;
- instance.setVolume(volume * 100);
- utils.dispatchEvent.call(player, player.media, 'volumechange');
- }
- });
-
- // Muted
- var muted = player.config.muted;
-
- Object.defineProperty(player.media, 'muted', {
- get: function get() {
- return muted;
- },
- set: function set(input) {
- var toggle = utils.is.boolean(input) ? input : muted;
- muted = toggle;
- instance[toggle ? 'mute' : 'unMute']();
- utils.dispatchEvent.call(player, player.media, 'volumechange');
- }
- });
-
- // Source
- Object.defineProperty(player.media, 'currentSrc', {
- get: function get() {
- return instance.getVideoUrl();
- }
- });
-
- // Ended
- Object.defineProperty(player.media, 'ended', {
- get: function get() {
- return player.currentTime === player.duration;
- }
- });
-
- // Get available speeds
- player.options.speed = instance.getAvailablePlaybackRates();
-
- // Set the tabindex to avoid focus entering iframe
- if (player.supported.ui) {
- player.media.setAttribute('tabindex', -1);
- }
-
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
- utils.dispatchEvent.call(player, player.media, 'durationchange');
-
- // Reset timer
- clearInterval(player.timers.buffering);
-
- // Setup buffering
- player.timers.buffering = setInterval(function () {
- // Get loaded % from YouTube
- player.media.buffered = instance.getVideoLoadedFraction();
-
- // Trigger progress only when we actually buffer something
- if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {
- utils.dispatchEvent.call(player, player.media, 'progress');
- }
-
- // Set last buffer point
- player.media.lastBuffered = player.media.buffered;
-
- // Bail if we're at 100%
- if (player.media.buffered === 1) {
- clearInterval(player.timers.buffering);
-
- // Trigger event
- utils.dispatchEvent.call(player, player.media, 'canplaythrough');
- }
- }, 200);
-
- // Rebuild UI
- setTimeout(function () {
- return ui.build.call(player);
- }, 50);
- },
- onStateChange: function onStateChange(event) {
- // Get the instance
- var instance = event.target;
-
- // Reset timer
- clearInterval(player.timers.playing);
-
- // Handle events
- // -1 Unstarted
- // 0 Ended
- // 1 Playing
- // 2 Paused
- // 3 Buffering
- // 5 Video cued
- switch (event.data) {
- case -1:
- // Update scrubber
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
-
- // Get loaded % from YouTube
- player.media.buffered = instance.getVideoLoadedFraction();
- utils.dispatchEvent.call(player, player.media, 'progress');
-
- break;
-
- case 0:
- player.media.paused = true;
-
- // YouTube doesn't support loop for a single video, so mimick it.
- if (player.media.loop) {
- // YouTube needs a call to `stopVideo` before playing again
- instance.stopVideo();
- instance.playVideo();
- } else {
- utils.dispatchEvent.call(player, player.media, 'ended');
- }
-
- break;
-
- case 1:
- // If we were seeking, fire seeked event
- if (player.media.seeking) {
- utils.dispatchEvent.call(player, player.media, 'seeked');
- }
- player.media.seeking = false;
-
- // Only fire play if paused before
- if (player.media.paused) {
- utils.dispatchEvent.call(player, player.media, 'play');
- }
- player.media.paused = false;
-
- utils.dispatchEvent.call(player, player.media, 'playing');
-
- // Poll to get playback progress
- player.timers.playing = setInterval(function () {
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
- }, 50);
-
- // Check duration again due to YouTube bug
- // https://github.com/sampotts/plyr/issues/374
- // https://code.google.com/p/gdata-issues/issues/detail?id=8690
- if (player.media.duration !== instance.getDuration()) {
- player.media.duration = instance.getDuration();
- utils.dispatchEvent.call(player, player.media, 'durationchange');
- }
-
- // Get quality
- controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));
-
- break;
-
- case 2:
- player.media.paused = true;
-
- utils.dispatchEvent.call(player, player.media, 'pause');
-
- break;
-
- default:
- break;
- }
-
- utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {
- code: event.data
- });
- }
- }
- });
- }
-};
-
-// ==========================================================================
-
-var vimeo = {
- setup: function setup() {
- var _this = this;
-
- // Add embed class for responsive
- utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);
-
- // Set intial ratio
- vimeo.setAspectRatio.call(this);
-
- // Load the API if not already
- if (!utils.is.object(window.Vimeo)) {
- utils.loadScript(this.config.urls.vimeo.api).then(function () {
- vimeo.ready.call(_this);
- }).catch(function (error) {
- _this.debug.warn('Vimeo API failed to load', error);
- });
- } else {
- vimeo.ready.call(this);
- }
- },
-
-
- // Set aspect ratio
- // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI
- setAspectRatio: function setAspectRatio(input) {
- var ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');
- var padding = 100 / ratio[0] * ratio[1];
- this.elements.wrapper.style.paddingBottom = padding + '%';
-
- if (this.supported.ui) {
- var height = 240;
- var offset = (height - padding) / (height / 50);
-
- this.media.style.transform = 'translateY(-' + offset + '%)';
- }
- },
-
-
- // API Ready
- ready: function ready() {
- var _this2 = this;
-
- var player = this;
-
- // Get Vimeo params for the iframe
- var options = {
- loop: player.config.loop.active,
- autoplay: player.autoplay,
- byline: false,
- portrait: false,
- title: false,
- speed: true,
- transparent: 0,
- gesture: 'media',
- playsinline: !this.config.fullscreen.iosNative
- };
- var params = utils.buildUrlParams(options);
-
- // Get the source URL or ID
- var source = player.media.getAttribute('src');
-
- // Get from <div> if needed
- if (utils.is.empty(source)) {
- source = player.media.getAttribute(this.config.attributes.embed.id);
- }
-
- var id = utils.parseVimeoId(source);
-
- // Build an iframe
- var iframe = utils.createElement('iframe');
- var src = 'https://player.vimeo.com/video/' + id + '?' + params;
- iframe.setAttribute('src', src);
- iframe.setAttribute('allowfullscreen', '');
- iframe.setAttribute('allowtransparency', '');
- iframe.setAttribute('allow', 'autoplay');
-
- // Inject the package
- var wrapper = utils.createElement('div');
- wrapper.appendChild(iframe);
- player.media = utils.replaceElement(wrapper, player.media);
-
- // Setup instance
- // https://github.com/vimeo/player.js
- player.embed = new window.Vimeo.Player(iframe);
-
- player.media.paused = true;
- player.media.currentTime = 0;
-
- // Disable native text track rendering
- if (player.supported.ui) {
- player.embed.disableTextTrack();
- }
-
- // Create a faux HTML5 API using the Vimeo API
- player.media.play = function () {
- player.embed.play().then(function () {
- player.media.paused = false;
- });
- };
-
- player.media.pause = function () {
- player.embed.pause().then(function () {
- player.media.paused = true;
- });
- };
-
- player.media.stop = function () {
- player.pause();
- player.currentTime = 0;
- };
-
- // Seeking
- var currentTime = player.media.currentTime;
-
- Object.defineProperty(player.media, 'currentTime', {
- get: function get() {
- return currentTime;
- },
- set: function set(time) {
- // Get current paused state
- // Vimeo will automatically play on seek
- var paused = player.media.paused;
-
- // Set seeking flag
-
- player.media.seeking = true;
-
- // Trigger seeking
- utils.dispatchEvent.call(player, player.media, 'seeking');
-
- // Seek after events
- player.embed.setCurrentTime(time).catch(function () {
- // Do nothing
- });
-
- // Restore pause state
- if (paused) {
- player.pause();
- }
- }
- });
-
- // Playback speed
- var speed = player.config.speed.selected;
- Object.defineProperty(player.media, 'playbackRate', {
- get: function get() {
- return speed;
- },
- set: function set(input) {
- player.embed.setPlaybackRate(input).then(function () {
- speed = input;
- utils.dispatchEvent.call(player, player.media, 'ratechange');
- }).catch(function (error) {
- // Hide menu item (and menu if empty)
- if (error.name === 'Error') {
- controls.setSpeedMenu.call(player, []);
- }
- });
- }
- });
-
- // Volume
- var volume = player.config.volume;
-
- Object.defineProperty(player.media, 'volume', {
- get: function get() {
- return volume;
- },
- set: function set(input) {
- player.embed.setVolume(input).then(function () {
- volume = input;
- utils.dispatchEvent.call(player, player.media, 'volumechange');
- });
- }
- });
-
- // Muted
- var muted = player.config.muted;
-
- Object.defineProperty(player.media, 'muted', {
- get: function get() {
- return muted;
- },
- set: function set(input) {
- var toggle = utils.is.boolean(input) ? input : false;
-
- player.embed.setVolume(toggle ? 0 : player.config.volume).then(function () {
- muted = toggle;
- utils.dispatchEvent.call(player, player.media, 'volumechange');
- });
- }
- });
-
- // Loop
- var loop = player.config.loop;
-
- Object.defineProperty(player.media, 'loop', {
- get: function get() {
- return loop;
- },
- set: function set(input) {
- var toggle = utils.is.boolean(input) ? input : player.config.loop.active;
-
- player.embed.setLoop(toggle).then(function () {
- loop = toggle;
- });
- }
- });
-
- // Source
- var currentSrc = void 0;
- player.embed.getVideoUrl().then(function (value) {
- currentSrc = value;
- }).catch(function (error) {
- _this2.debug.warn(error);
- });
-
- Object.defineProperty(player.media, 'currentSrc', {
- get: function get() {
- return currentSrc;
- }
- });
-
- // Ended
- Object.defineProperty(player.media, 'ended', {
- get: function get() {
- return player.currentTime === player.duration;
- }
- });
-
- // Set aspect ratio based on video size
- Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(function (dimensions) {
- var ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);
- vimeo.setAspectRatio.call(_this2, ratio);
- });
-
- // Set autopause
- player.embed.setAutopause(player.config.autopause).then(function (state) {
- player.config.autopause = state;
- });
-
- // Get title
- player.embed.getVideoTitle().then(function (title) {
- player.config.title = title;
- ui.setTitle.call(_this2);
- });
-
- // Get current time
- player.embed.getCurrentTime().then(function (value) {
- currentTime = value;
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
- });
-
- // Get duration
- player.embed.getDuration().then(function (value) {
- player.media.duration = value;
- utils.dispatchEvent.call(player, player.media, 'durationchange');
- });
-
- // Get captions
- player.embed.getTextTracks().then(function (tracks) {
- player.media.textTracks = tracks;
- captions.setup.call(player);
- });
-
- player.embed.on('cuechange', function (data) {
- var cue = null;
-
- if (data.cues.length) {
- cue = utils.stripHTML(data.cues[0].text);
- }
-
- captions.setText.call(player, cue);
- });
-
- player.embed.on('loaded', function () {
- if (utils.is.element(player.embed.element) && player.supported.ui) {
- var frame = player.embed.element;
-
- // Fix keyboard focus issues
- // https://github.com/sampotts/plyr/issues/317
- frame.setAttribute('tabindex', -1);
- }
- });
-
- player.embed.on('play', function () {
- // Only fire play if paused before
- if (player.media.paused) {
- utils.dispatchEvent.call(player, player.media, 'play');
- }
- player.media.paused = false;
- utils.dispatchEvent.call(player, player.media, 'playing');
- });
-
- player.embed.on('pause', function () {
- player.media.paused = true;
- utils.dispatchEvent.call(player, player.media, 'pause');
- });
-
- player.embed.on('timeupdate', function (data) {
- player.media.seeking = false;
- currentTime = data.seconds;
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
- });
-
- player.embed.on('progress', function (data) {
- player.media.buffered = data.percent;
- utils.dispatchEvent.call(player, player.media, 'progress');
-
- // Check all loaded
- if (parseInt(data.percent, 10) === 1) {
- utils.dispatchEvent.call(player, player.media, 'canplaythrough');
- }
-
- // Get duration as if we do it before load, it gives an incorrect value
- // https://github.com/sampotts/plyr/issues/891
- player.embed.getDuration().then(function (value) {
- if (value !== player.media.duration) {
- player.media.duration = value;
- utils.dispatchEvent.call(player, player.media, 'durationchange');
- }
- });
- });
-
- player.embed.on('seeked', function () {
- player.media.seeking = false;
- utils.dispatchEvent.call(player, player.media, 'seeked');
- utils.dispatchEvent.call(player, player.media, 'play');
- });
-
- player.embed.on('ended', function () {
- player.media.paused = true;
- utils.dispatchEvent.call(player, player.media, 'ended');
- });
-
- player.embed.on('error', function (detail) {
- player.media.error = detail;
- utils.dispatchEvent.call(player, player.media, 'error');
- });
-
- // Rebuild UI
- setTimeout(function () {
- return ui.build.call(player);
- }, 0);
- }
-};
-
-// ==========================================================================
-
-// Sniff out the browser
-var browser$3 = utils.getBrowser();
-
-var media = {
- // Setup media
- setup: function setup() {
- // If there's no media, bail
- if (!this.media) {
- this.debug.warn('No media element found!');
- return;
- }
-
- // Add type class
- utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);
-
- // Add provider class
- utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);
-
- // Add video class for embeds
- // This will require changes if audio embeds are added
- if (this.isEmbed) {
- utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);
- }
-
- if (this.supported.ui) {
- // Check for picture-in-picture support
- utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);
-
- // Check for airplay support
- utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);
-
- // If there's no autoplay attribute, assume the video is stopped and add state class
- utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);
-
- // Add iOS class
- utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser$3.isIos);
-
- // Add touch class
- utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);
- }
-
- // Inject the player wrapper
- if (this.isVideo) {
- // Create the wrapper div
- this.elements.wrapper = utils.createElement('div', {
- class: this.config.classNames.video
- });
-
- // Wrap the video in a container
- utils.wrap(this.media, this.elements.wrapper);
- }
-
- if (this.isEmbed) {
- switch (this.provider) {
- case 'youtube':
- youtube.setup.call(this);
- break;
-
- case 'vimeo':
- vimeo.setup.call(this);
- break;
-
- default:
- break;
- }
- } else if (this.isHTML5) {
- ui.setTitle.call(this);
-
- html5.extend.call(this);
- }
- }
-};
-
-// ==========================================================================
-
var source = {
// Add elements to HTML5 media (source, tracks, etc)
insertElements: function insertElements(type, attributes) {
@@ -6607,6 +6605,87 @@ var source = {
// ==========================================================================
+var Storage = function () {
+ function Storage(player) {
+ classCallCheck(this, Storage);
+
+ this.enabled = player.config.storage.enabled;
+ this.key = player.config.storage.key;
+ }
+
+ // Check for actual support (see if we can use it)
+
+
+ createClass(Storage, [{
+ key: 'get',
+ value: function get$$1(key) {
+ if (!Storage.supported) {
+ return null;
+ }
+
+ var store = window.localStorage.getItem(this.key);
+
+ if (utils.is.empty(store)) {
+ return null;
+ }
+
+ var json = JSON.parse(store);
+
+ return utils.is.string(key) && key.length ? json[key] : json;
+ }
+ }, {
+ key: 'set',
+ value: function set$$1(object) {
+ // Bail if we don't have localStorage support or it's disabled
+ if (!Storage.supported || !this.enabled) {
+ return;
+ }
+
+ // Can only store objectst
+ if (!utils.is.object(object)) {
+ return;
+ }
+
+ // Get current storage
+ var storage = this.get();
+
+ // Default to empty object
+ if (utils.is.empty(storage)) {
+ storage = {};
+ }
+
+ // Update the working copy of the values
+ utils.extend(storage, object);
+
+ // Update storage
+ window.localStorage.setItem(this.key, JSON.stringify(storage));
+ }
+ }], [{
+ key: 'supported',
+ get: function get$$1() {
+ try {
+ if (!('localStorage' in window)) {
+ return false;
+ }
+
+ var test = '___test';
+
+ // Try to use it (it might be disabled, e.g. user is in private mode)
+ // see: https://github.com/sampotts/plyr/issues/131
+ window.localStorage.setItem(test, test);
+ window.localStorage.removeItem(test);
+
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ }]);
+ return Storage;
+}();
+
+// ==========================================================================
+
// Private properties
// TODO: Use a WeakMap for private globals
// const globals = new WeakMap();
@@ -6644,7 +6723,7 @@ var Plyr = function () {
}
// Set config
- this.config = utils.extend({}, defaults, options || {}, function () {
+ this.config = utils.extend({}, defaults$1, options || {}, function () {
try {
return JSON.parse(_this.media.getAttribute('data-plyr-config'));
} catch (e) {
@@ -6719,17 +6798,9 @@ var Plyr = function () {
}
// Cache original element state for .destroy()
- // TODO: Investigate a better solution as I suspect this causes reported double load issues?
- setTimeout(function () {
- var clone = _this.media.cloneNode(true);
-
- // Prevent the clone autoplaying
- if (clone.getAttribute('autoplay')) {
- clone.pause();
- }
-
- _this.elements.original = clone;
- }, 0);
+ var clone = this.media.cloneNode(true);
+ clone.autoplay = false;
+ this.elements.original = clone;
// Set media type based on tag or data attribute
// Supported: video, audio, vimeo, youtube
@@ -6936,7 +7007,7 @@ var Plyr = function () {
}
/**
- * Get paused state
+ * Get playing state
*/
}, {
@@ -7191,8 +7262,8 @@ var Plyr = function () {
utils.toggleClass(_this2.elements.controls, _this2.config.classNames.noTransition, false);
}
- // Check if controls toggled
- var toggled = utils.toggleClass(_this2.elements.container, _this2.config.classNames.hideControls, true);
+ // Set hideControls class
+ var toggled = utils.toggleClass(_this2.elements.container, _this2.config.classNames.hideControls, _this2.config.hideControls);
// Trigger event and close menu
if (toggled) {
@@ -7401,19 +7472,29 @@ var Plyr = function () {
return Boolean(this.type === types.audio);
}
}, {
+ key: 'playing',
+ get: function get$$1() {
+ return Boolean(this.ready && !this.paused && !this.ended);
+ }
+
+ /**
+ * Get paused state
+ */
+
+ }, {
key: 'paused',
get: function get$$1() {
return Boolean(this.media.paused);
}
/**
- * Get playing state
+ * Get stopped state
*/
}, {
- key: 'playing',
+ key: 'stopped',
get: function get$$1() {
- return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));
+ return Boolean(this.paused && this.currentTime === 0);
}
/**
@@ -7794,20 +7875,21 @@ var Plyr = function () {
}
/**
- * Set the poster image for a HTML5 video
+ * Set the poster image for a video
* @param {input} - the URL for the new poster image
*/
}, {
key: 'poster',
set: function set$$1(input) {
- if (!this.isHTML5 || !this.isVideo) {
- this.debug.warn('Poster can only be set on HTML5 video');
+ if (!this.isVideo) {
+ this.debug.warn('Poster can only be set for video');
return;
}
if (utils.is.string(input)) {
this.media.setAttribute('poster', input);
+ ui.setPoster.call(this);
}
}
@@ -7816,7 +7898,7 @@ var Plyr = function () {
*/
,
get: function get$$1() {
- if (!this.isHTML5 || !this.isVideo) {
+ if (!this.isVideo) {
return null;
}
diff --git a/dist/plyr.js.map b/dist/plyr.js.map
index 94db1ee1..df22da62 100644
--- a/dist/plyr.js.map
+++ b/dist/plyr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["types.js","defaults.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","support.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js"],"names":["providers","types","defaults","navigator","language","userLanguage","split","define","this","utils","input","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","id","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","call","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","toggle","contains","classList","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","currentTime","duration","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toString","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","property","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","i18n","seekTime","title","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","src","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","ready","setTitle","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","forceHours","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","push","suffix","list","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","touch","pageX","left","parseFloat","setting","tabs","panes","toggleTab","checkMenu","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","lang","default","unshift","values","tab","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","create","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","mapQualityUnit","mapQualityUnits","levels","level","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","wrap","insertElement","attribute","cancelRequests","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","readyState","targetTime","end","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.4/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.4\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["../../node_modules/loadjs/dist/loadjs.umd.js","types.js","utils.js","support.js","html5.js","i18n.js","ui.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","storage.js","plyr.js"],"names":["define","this","providers","types","utils","input","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","id","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","call","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","toggle","contains","classList","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","args","toString","i","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","html5","getSources","sizes","dedupe","player","mime","currentTime","playing","src","load","play","config","blankVideo","debug","log","i18n","seekTime","title","toggleClass","selectors","classNames","uiSupported","listeners","warn","toggleNativeControls","controls","inject","setup","volume","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","pip","airplay","isIos","isTouch","touch","ready","setTitle","setPoster","label","get","buttons","isEmbed","iframe","getElement","poster","posters","backgroundImage","p","paused","stopped","toggleControls","loading","timers","setTimeout","failed","networkState","error","inputs","setRange","mute","updateRangeFill","progress","display","buffer","getElementsByTagName","nodeValue","getPercentage","duration","seek","setProgress","buffered","forceHours","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","URL","iconUrl","location","cors","host","isIE","svg4everybody","pause","restart","rewind","fastForward","settings","captions","fullscreen","seekTooltip","tooltip","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","suffix","list","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","left","hasClass","parseFloat","setting","tabs","panes","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","create","findElements","repaint","labels","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","enabled","hostname","protocol","createObjectURL","blob","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","bind","defaults","userLanguage","onChange","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","replaceElement","thumbnail_large","pathname","Player","disableTextTrack","stop","setCurrentTime","selected","setPlaybackRate","setVolume","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","seekTo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","getAvailableQualityLevels","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","handler","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Storage","store","json","removeItem","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","targetTime","end","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode"],"mappings":";;;;;;;;;;;;;AAAA,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE;EACvB,IAAI,OAAOA,SAAM,KAAK,UAAU,IAAIA,SAAM,CAAC,GAAG,EAAE;IAC9CA,SAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;GACrB,MAAM,AAAiC;IACtC,cAAc,GAAG,OAAO,EAAE,CAAC;GAC5B,AAEA;CACF,CAACC,cAAI,EAAE,WAAW;;;;;;AAMnB,IAAI,OAAO,GAAG,WAAW,EAAE;IACvB,aAAa,GAAG,EAAE;IAClB,iBAAiB,GAAG,EAAE;IACtB,mBAAmB,GAAG,EAAE,CAAC;;;;;;;;AAQ7B,SAAS,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE;;EAExC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;;EAErD,IAAI,YAAY,GAAG,EAAE;MACjB,CAAC,GAAG,SAAS,CAAC,MAAM;MACpB,UAAU,GAAG,CAAC;MACd,EAAE;MACF,QAAQ;MACR,CAAC;MACD,CAAC,CAAC;;;EAGN,EAAE,GAAG,UAAU,QAAQ,EAAE,aAAa,EAAE;IACtC,IAAI,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;IAEtD,UAAU,EAAE,CAAC;IACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;GAC3C,CAAC;;;EAGF,OAAO,CAAC,EAAE,EAAE;IACV,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;;;IAGxB,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE;MACL,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;MAChB,SAAS;KACV;;;IAGD,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;GACZ;CACF;;;;;;;;AAQD,SAAS,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE;;EAExC,IAAI,CAAC,QAAQ,EAAE,OAAO;;EAEtB,IAAI,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;;;EAGtC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;;;EAG5C,IAAI,CAAC,CAAC,EAAE,OAAO;;;EAGf,OAAO,CAAC,CAAC,MAAM,EAAE;IACf,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC9B,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;GAChB;CACF;;;;;;;;AAQD,SAAS,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE;;EAE5C,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;;;EAGtC,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,YAAY,CAAC,CAAC;OAC1D,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,IAAI,CAAC,CAAC;CACtC;;;;;;;;AAQD,SAAS,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;EAClD,IAAI,GAAG,GAAG,QAAQ;MACd,KAAK,GAAG,IAAI,CAAC,KAAK;MAClB,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;MACrC,gBAAgB,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO;MACzC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;MAC9C,KAAK;MACL,CAAC,CAAC;;EAEN,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;;EAEzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IAC/B,KAAK,GAAG,IAAI,CAAC;;;IAGb,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;IACrB,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;GACvB,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;IAEpD,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;GACtB,MAAM;;IAEL,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;IACb,CAAC,CAAC,KAAK,GAAG,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC;GAC9C;;EAED,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,YAAY,GAAG,UAAU,EAAE,EAAE;IACpD,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;IAIxB,IAAI,KAAK,IAAI,WAAW,IAAI,CAAC,EAAE;MAC7B,IAAI;QACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;OAC3C,CAAC,OAAO,CAAC,EAAE;;;QAGV,MAAM,GAAG,GAAG,CAAC;OACd;KACF;;;IAGD,IAAI,MAAM,IAAI,GAAG,EAAE;;MAEjB,QAAQ,IAAI,CAAC,CAAC;;;MAGd,IAAI,QAAQ,GAAG,QAAQ,EAAE;QACvB,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;OACnD;KACF;;;IAGD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC;GAC/C,CAAC;;;EAGF,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAClE;;;;;;;;AAQD,SAAS,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;;EAE1C,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;;EAErC,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM;MACzB,CAAC,GAAG,UAAU;MACd,aAAa,GAAG,EAAE;MAClB,EAAE;MACF,CAAC,CAAC;;;EAGN,EAAE,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;;IAE5C,IAAI,MAAM,IAAI,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;IAI5C,IAAI,MAAM,IAAI,GAAG,EAAE;MACjB,IAAI,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;WAC1C,OAAO;KACb;;IAED,UAAU,EAAE,CAAC;IACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;GAC5C,CAAC;;;EAGF,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;CACpD;;;;;;;;;;AAUD,SAAS,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;EACjC,IAAI,QAAQ;MACR,IAAI,CAAC;;;EAGT,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;;;EAGvC,IAAI,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;;;EAGtC,IAAI,QAAQ,EAAE;IACZ,IAAI,QAAQ,IAAI,aAAa,EAAE;MAC7B,MAAM,QAAQ,CAAC;KAChB,MAAM;MACL,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;KAChC;GACF;;;EAGD,SAAS,CAAC,KAAK,EAAE,UAAU,aAAa,EAAE;;IAExC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;;;IAGtC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;GAClC,EAAE,IAAI,CAAC,CAAC;CACV;;;;;;;;AAQD,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;;EAExC,SAAS,CAAC,IAAI,EAAE,UAAU,YAAY,EAAE;;IAEtC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;GACtC,CAAC,CAAC;;EAEH,OAAO,MAAM,CAAC;CACf,CAAC;;;;;;;AAOF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,QAAQ,EAAE;EACpC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;CACvB,CAAC;;;;;;AAMF,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,GAAG;EAC9B,aAAa,GAAG,EAAE,CAAC;EACnB,iBAAiB,GAAG,EAAE,CAAC;EACvB,mBAAmB,GAAG,EAAE,CAAC;CAC1B,CAAC;;;;;;;AAOF,MAAM,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,QAAQ,EAAE;EAC9C,OAAO,QAAQ,IAAI,aAAa,CAAC;CAClC,CAAC;;;;AAIF,OAAO,MAAM,CAAC;;CAEb,CAAC,EAAE;;;ACpSJ;;;;AAIA,AAAO,IAAMC,YAAY;WACd,OADc;aAEZ,SAFY;WAGd;CAHJ;;AAMP,AAAO,IAAMC,QAAQ;WACV,OADU;WAEV;CAFJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVP;AACA;AAOA,IAAMC,QAAQ;;QAEN;YAAA,gBACKC,KADL,EACY;mBACD,KAAKC,UAAL,CAAgBD,KAAhB,EAAuBE,OAAOC,IAA9B,CAAP;SAFJ;cAAA,kBAIOH,KAJP,EAIc;mBACH,KAAKI,cAAL,CAAoBJ,KAApB,MAA+BK,MAAtC;SALJ;cAAA,kBAOOL,KAPP,EAOc;mBACH,KAAKI,cAAL,CAAoBJ,KAApB,MAA+BM,MAA/B,IAAyC,CAACA,OAAOC,KAAP,CAAaP,KAAb,CAAjD;SARJ;cAAA,kBAUOA,KAVP,EAUc;mBACH,KAAKI,cAAL,CAAoBJ,KAApB,MAA+BQ,MAAtC;SAXJ;eAAA,mBAaQR,KAbR,EAae;mBACJ,KAAKI,cAAL,CAAoBJ,KAApB,MAA+BS,OAAtC;SAdJ;gBAAA,qBAgBST,KAhBT,EAgBgB;mBACL,KAAKI,cAAL,CAAoBJ,KAApB,MAA+BU,QAAtC;SAjBJ;aAAA,iBAmBMV,KAnBN,EAmBa;mBACF,CAAC,KAAKW,eAAL,CAAqBX,KAArB,CAAD,IAAgCY,MAAMC,OAAN,CAAcb,KAAd,CAAvC;SApBJ;eAAA,mBAsBQA,KAtBR,EAsBe;mBACJ,KAAKC,UAAL,CAAgBD,KAAhB,EAAuBE,OAAOY,OAA9B,CAAP;SAvBJ;gBAAA,oBAyBSd,KAzBT,EAyBgB;mBACL,KAAKC,UAAL,CAAgBD,KAAhB,EAAuBE,OAAOa,QAA9B,CAAP;SA1BJ;eAAA,mBA4BQf,KA5BR,EA4Be;mBACJ,KAAKC,UAAL,CAAgBD,KAAhB,EAAuBE,OAAOc,OAA9B,CAAP;SA7BJ;gBAAA,oBA+BShB,KA/BT,EA+BgB;mBACL,KAAKI,cAAL,CAAoBJ,KAApB,MAA+BiB,IAAtC;SAhCJ;aAAA,iBAkCMjB,KAlCN,EAkCa;mBACF,KAAKC,UAAL,CAAgBD,KAAhB,EAAuBE,OAAOgB,KAA9B,CAAP;SAnCJ;WAAA,eAqCIlB,KArCJ,EAqCW;mBACA,KAAKC,UAAL,CAAgBD,KAAhB,EAAuBE,OAAOiB,YAA9B,KAA+C,KAAKlB,UAAL,CAAgBD,KAAhB,EAAuBE,OAAOkB,MAA9B,CAAtD;SAtCJ;aAAA,iBAwCMpB,KAxCN,EAwCa;mBACF,KAAKC,UAAL,CAAgBD,KAAhB,EAAuBqB,SAAvB,KAAsC,CAAC,KAAKV,eAAL,CAAqBX,KAArB,CAAD,IAAgC,KAAKsB,MAAL,CAAYtB,MAAMuB,IAAlB,CAA7E;SAzCJ;WAAA,eA2CIvB,KA3CJ,EA2CW;mBACA,CAAC,KAAKW,eAAL,CAAqBX,KAArB,CAAD,IAAgC,mFAAmFwB,IAAnF,CAAwFxB,KAAxF,CAAvC;SA5CJ;uBAAA,2BA8CgBA,KA9ChB,EA8CuB;mBACZA,UAAU,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAA1C;SA/CJ;aAAA,iBAiDMA,KAjDN,EAiDa;mBAEL,KAAKW,eAAL,CAAqBX,KAArB,KACC,CAAC,KAAKsB,MAAL,CAAYtB,KAAZ,KAAsB,KAAKyB,KAAL,CAAWzB,KAAX,CAAtB,IAA2C,KAAK0B,QAAL,CAAc1B,KAAd,CAA5C,KAAqE,CAACA,MAAM2B,MAD7E,IAEC,KAAKC,MAAL,CAAY5B,KAAZ,KAAsB,CAACK,OAAOwB,IAAP,CAAY7B,KAAZ,EAAmB2B,MAH/C;SAlDJ;kBAAA,0BAwDW3B,KAxDX,EAwDkB8B,WAxDlB,EAwD+B;mBACpBrB,QAAQT,SAAS8B,WAAT,IAAwB9B,iBAAiB8B,WAAjD,CAAP;SAzDJ;sBAAA,0BA2De9B,KA3Df,EA2DsB;mBACX,CAAC,KAAKW,eAAL,CAAqBX,KAArB,CAAD,GAA+BA,MAAM8B,WAArC,GAAmD,IAA1D;;KA9DE;;;cAAA,wBAmEG;eACF;gCACkB,SAAS,CAAC,CAACC,SAASC,YADtC;sBAEO,sBAAsBD,SAASE,eAAT,CAAyBC,KAA/C,IAAwD,CAAC,OAAOV,IAAP,CAAYW,UAAUC,SAAtB,CAFhE;sBAGO,kBAAkBZ,IAAlB,CAAuBW,UAAUE,QAAjC,CAHP;mBAII,uBAAuBb,IAAvB,CAA4BW,UAAUE,QAAtC;SAJX;KApEM;;;;;SAAA,iBA8EJC,GA9EI,EA8EwB;YAAvBC,YAAuB,uEAAR,MAAQ;;eACvB,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;gBAChC;oBACMC,UAAU,IAAIC,cAAJ,EAAhB;;;oBAGI,EAAE,qBAAqBD,OAAvB,CAAJ,EAAqC;;;;wBAI7BE,gBAAR,CAAyB,MAAzB,EAAiC,YAAM;wBAC/BN,iBAAiB,MAArB,EAA6B;4BACrB;oCACQO,KAAKC,KAAL,CAAWJ,QAAQK,YAAnB,CAAR;yBADJ,CAEE,OAAOC,CAAP,EAAU;oCACAN,QAAQK,YAAhB;;qBAJR,MAMO;gCACKL,QAAQO,QAAhB;;iBARR;;wBAYQL,gBAAR,CAAyB,OAAzB,EAAkC,YAAM;0BAC9B,IAAIM,KAAJ,CAAUR,QAAQS,UAAlB,CAAN;iBADJ;;wBAIQC,IAAR,CAAa,KAAb,EAAoBf,GAApB,EAAyB,IAAzB;;;wBAGQC,YAAR,GAAuBA,YAAvB;;wBAEQe,IAAR;aA7BJ,CA8BE,OAAOL,CAAP,EAAU;uBACDA,CAAP;;SAhCD,CAAP;KA/EM;;;;cAAA,sBAqHCX,GArHD,EAqHM;eACL,IAAIE,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;uBAC7BJ,GAAP,EAAY;yBACCG,OADD;uBAEDC;aAFX;SADG,CAAP;KAtHM;;;;cAAA,sBA+HCJ,GA/HD,EA+HMiB,EA/HN,EA+HU;YACZ,CAACxD,MAAMyD,EAAN,CAASlC,MAAT,CAAgBgB,GAAhB,CAAL,EAA2B;;;;YAIrBmB,SAAS,QAAf;YACMC,QAAQ3D,MAAMyD,EAAN,CAASlC,MAAT,CAAgBiC,EAAhB,CAAd;YACII,WAAW,KAAf;;YAEMC,SAAS,SAATA,MAAS;mBAAM7B,SAAS8B,gBAAT,OAA8BN,EAA9B,EAAoC5B,MAA1C;SAAf;;iBAESmC,YAAT,CAAsBC,IAAtB,EAA4B;;gBAEpBL,SAASE,QAAb,EAAuB;;;;;iBAKlBI,SAAL,GAAiBD,IAAjB;;;qBAGSE,IAAT,CAAcC,YAAd,CAA2B,IAA3B,EAAiCnC,SAASkC,IAAT,CAAcE,UAAd,CAAyB,CAAzB,CAAjC;;;;YAIA,CAACT,KAAD,IAAU,CAACE,QAAf,EAAyB;;gBAEfQ,YAAYrC,SAASsC,aAAT,CAAuB,KAAvB,CAAlB;kBACMC,YAAN,CAAmBF,SAAnB,EAA8B,IAA9B;;gBAEIV,KAAJ,EAAW;0BACGa,YAAV,CAAuB,IAAvB,EAA6BhB,EAA7B;;;;gBAIAiB,QAAQC,OAAZ,EAAqB;oBACXC,SAASxE,OAAOyE,YAAP,CAAoBC,OAApB,CAA4BnB,SAASF,EAArC,CAAf;2BACWmB,WAAW,IAAtB;;oBAEIf,QAAJ,EAAc;wBACJI,OAAOjB,KAAKC,KAAL,CAAW2B,MAAX,CAAb;iCACaG,IAAb,CAAkBT,SAAlB,EAA6BL,KAAKe,OAAlC;;;;;;kBAOHC,KADL,CACWzC,GADX,EAEK0C,IAFL,CAEU,kBAAU;oBACRjF,MAAMyD,EAAN,CAASyB,KAAT,CAAeC,MAAf,CAAJ,EAA4B;;;;oBAIxBV,QAAQC,OAAZ,EAAqB;2BACVE,YAAP,CAAoBQ,OAApB,CACI1B,SAASF,EADb,EAEIT,KAAKsC,SAAL,CAAe;iCACFF;qBADb,CAFJ;;;6BAQSL,IAAb,CAAkBT,SAAlB,EAA6Bc,MAA7B;aAhBR,EAkBKG,KAlBL,CAkBW,YAAM,EAlBjB;;KA9KE;;;;cAAA,sBAqMC5B,MArMD,EAqMS;eACLA,MAAV,SAAoB6B,KAAKC,KAAL,CAAWD,KAAKE,MAAL,KAAgB,KAA3B,CAApB;KAtMM;;;;QAAA,gBA0MLC,QA1MK,EA0MKC,OA1ML,EA0Mc;;YAEdC,UAAUF,SAAS9D,MAAT,GAAkB8D,QAAlB,GAA6B,CAACA,QAAD,CAA7C;;;;cAIMG,IAAN,CAAWD,OAAX,EACKE,OADL,GAEKC,OAFL,CAEa,UAACC,OAAD,EAAUC,KAAV,EAAoB;gBACnBC,QAAQD,QAAQ,CAAR,GAAYN,QAAQQ,SAAR,CAAkB,IAAlB,CAAZ,GAAsCR,OAApD;;;gBAGMS,SAASJ,QAAQK,UAAvB;gBACMC,UAAUN,QAAQO,WAAxB;;;;kBAIMC,WAAN,CAAkBR,OAAlB;;;;;gBAKIM,OAAJ,EAAa;uBACFnC,YAAP,CAAoB+B,KAApB,EAA2BI,OAA3B;aADJ,MAEO;uBACIE,WAAP,CAAmBN,KAAnB;;SAnBZ;KAhNM;;;;iBAAA,yBAyOIO,IAzOJ,EAyOUC,UAzOV,EAyOsBC,IAzOtB,EAyO4B;;YAE5BX,UAAUhE,SAASsC,aAAT,CAAuBmC,IAAvB,CAAhB;;;YAGIzG,MAAMyD,EAAN,CAAS5B,MAAT,CAAgB6E,UAAhB,CAAJ,EAAiC;kBACvBE,aAAN,CAAoBZ,OAApB,EAA6BU,UAA7B;;;;YAIA1G,MAAMyD,EAAN,CAASlC,MAAT,CAAgBoF,IAAhB,CAAJ,EAA2B;oBACfE,WAAR,GAAsBF,IAAtB;;;;eAIGX,OAAP;KAxPM;;;;eAAA,uBA4PEA,OA5PF,EA4PWc,MA5PX,EA4PmB;eAClBT,UAAP,CAAkBlC,YAAlB,CAA+B6B,OAA/B,EAAwCc,OAAOP,WAA/C;KA7PM;;;;iBAAA,yBAiQIE,IAjQJ,EAiQUL,MAjQV,EAiQkBM,UAjQlB,EAiQ8BC,IAjQ9B,EAiQoC;;eAEnCH,WAAP,CAAmBxG,MAAMsE,aAAN,CAAoBmC,IAApB,EAA0BC,UAA1B,EAAsCC,IAAtC,CAAnB;KAnQM;;;;iBAAA,yBAuQIX,OAvQJ,EAuQa;YACfhG,MAAMyD,EAAN,CAAS9B,QAAT,CAAkBqE,OAAlB,KAA8BhG,MAAMyD,EAAN,CAAS/B,KAAT,CAAesE,OAAf,CAAlC,EAA2D;kBACjDH,IAAN,CAAWG,OAAX,EAAoBD,OAApB,CAA4B/F,MAAM+G,aAAlC;;;;YAIA,CAAC/G,MAAMyD,EAAN,CAASuC,OAAT,CAAiBA,OAAjB,CAAD,IAA8B,CAAChG,MAAMyD,EAAN,CAASuC,OAAT,CAAiBA,QAAQK,UAAzB,CAAnC,EAAyE;;;;gBAIjEA,UAAR,CAAmBW,WAAnB,CAA+BhB,OAA/B;KAjRM;;;;gBAAA,wBAqRGA,OArRH,EAqRY;YACZpE,MADY,GACDoE,QAAQ5B,UADP,CACZxC,MADY;;;eAGXA,SAAS,CAAhB,EAAmB;oBACPoF,WAAR,CAAoBhB,QAAQiB,SAA5B;sBACU,CAAV;;KA1RE;;;;kBAAA,0BA+RKC,QA/RL,EA+ReC,QA/Rf,EA+RyB;YAC3B,CAACnH,MAAMyD,EAAN,CAASuC,OAAT,CAAiBmB,QAAjB,CAAD,IAA+B,CAACnH,MAAMyD,EAAN,CAASuC,OAAT,CAAiBmB,SAASd,UAA1B,CAAhC,IAAyE,CAACrG,MAAMyD,EAAN,CAASuC,OAAT,CAAiBkB,QAAjB,CAA9E,EAA0G;mBAC/F,IAAP;;;iBAGKb,UAAT,CAAoBe,YAApB,CAAiCF,QAAjC,EAA2CC,QAA3C;;eAEOD,QAAP;KAtSM;;;;iBAAA,yBA0SIlB,OA1SJ,EA0SaU,UA1Sb,EA0SyB;YAC3B,CAAC1G,MAAMyD,EAAN,CAASuC,OAAT,CAAiBA,OAAjB,CAAD,IAA8BhG,MAAMyD,EAAN,CAASyB,KAAT,CAAewB,UAAf,CAAlC,EAA8D;;;;eAIvDW,OAAP,CAAeX,UAAf,EAA2BX,OAA3B,CAAmC,gBAG7B;;gBAFFuB,GAEE;gBADFC,KACE;;oBACM/C,YAAR,CAAqB8C,GAArB,EAA0BC,KAA1B;SAJJ;KA/SM;;;;6BAAA,qCAwTgBC,GAxThB,EAwTqBC,kBAxTrB,EAwTyC;;;;;;YAM3C,CAACzH,MAAMyD,EAAN,CAASlC,MAAT,CAAgBiG,GAAhB,CAAD,IAAyBxH,MAAMyD,EAAN,CAASyB,KAAT,CAAesC,GAAf,CAA7B,EAAkD;mBACvC,EAAP;;;YAGEd,aAAa,EAAnB;YACMgB,WAAWD,kBAAjB;;YAEIE,KAAJ,CAAU,GAAV,EAAe5B,OAAf,CAAuB,aAAK;;gBAElB6B,WAAWC,EAAEC,IAAF,EAAjB;gBACMC,YAAYH,SAASI,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAlB;gBACMC,WAAWL,SAASI,OAAT,CAAiB,QAAjB,EAA2B,EAA3B,CAAjB;;;gBAGME,QAAQD,SAASN,KAAT,CAAe,GAAf,CAAd;gBACML,MAAMY,MAAM,CAAN,CAAZ;gBACMX,QAAQW,MAAMtG,MAAN,GAAe,CAAf,GAAmBsG,MAAM,CAAN,EAASF,OAAT,CAAiB,OAAjB,EAA0B,EAA1B,CAAnB,GAAmD,EAAjE;;;gBAGMG,QAAQP,SAASQ,MAAT,CAAgB,CAAhB,CAAd;;oBAEQD,KAAR;qBACS,GAAL;;wBAEQnI,MAAMyD,EAAN,CAAS5B,MAAT,CAAgB6F,QAAhB,KAA6B1H,MAAMyD,EAAN,CAASlC,MAAT,CAAgBmG,SAASW,KAAzB,CAAjC,EAAkE;iCACrDA,KAAT,UAAsBN,SAAtB;;;+BAGOM,KAAX,GAAmBN,SAAnB;;;qBAGC,GAAL;;+BAEevE,EAAX,GAAgBoE,SAASI,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAhB;;;qBAGC,GAAL;;+BAEeV,GAAX,IAAkBC,KAAlB;;;;;;;SA/BZ;;eAwCOb,UAAP;KA7WM;;;;gBAAA,wBAiXGV,OAjXH,EAiXYsC,MAjXZ,EAiXoB;YACtB,CAACtI,MAAMyD,EAAN,CAASuC,OAAT,CAAiBA,OAAjB,CAAL,EAAgC;;;;YAI5BuC,OAAOD,MAAX;;YAEI,CAACtI,MAAMyD,EAAN,CAAS+E,OAAT,CAAiBD,IAAjB,CAAL,EAA6B;mBAClB,CAACvC,QAAQyC,YAAR,CAAqB,QAArB,CAAR;;;YAGAF,IAAJ,EAAU;oBACE/D,YAAR,CAAqB,QAArB,EAA+B,EAA/B;SADJ,MAEO;oBACKkE,eAAR,CAAwB,QAAxB;;KA/XE;;;;eAAA,uBAoYE1C,OApYF,EAoYW+B,SApYX,EAoYsBY,MApYtB,EAoY8B;YAChC3I,MAAMyD,EAAN,CAASuC,OAAT,CAAiBA,OAAjB,CAAJ,EAA+B;gBACrB4C,WAAW5C,QAAQ6C,SAAR,CAAkBD,QAAlB,CAA2Bb,SAA3B,CAAjB;;oBAEQc,SAAR,CAAkBF,SAAS,KAAT,GAAiB,QAAnC,EAA6CZ,SAA7C;;mBAEQY,UAAU,CAACC,QAAZ,IAA0B,CAACD,MAAD,IAAWC,QAA5C;;;eAGG,IAAP;KA7YM;;;;YAAA,oBAiZD5C,OAjZC,EAiZQ+B,SAjZR,EAiZmB;eAClB/H,MAAMyD,EAAN,CAASuC,OAAT,CAAiBA,OAAjB,KAA6BA,QAAQ6C,SAAR,CAAkBD,QAAlB,CAA2Bb,SAA3B,CAApC;KAlZM;;;;WAAA,mBAsZF/B,OAtZE,EAsZO4B,QAtZP,EAsZiB;YACjBkB,YAAY,EAAE7H,gBAAF,EAAlB;;iBAES8H,KAAT,GAAiB;mBACNlI,MAAMgF,IAAN,CAAW7D,SAAS8B,gBAAT,CAA0B8D,QAA1B,CAAX,EAAgDoB,QAAhD,CAAyD,IAAzD,CAAP;;;YAGEC,UAAUH,UAAUG,OAAV,IAAqBH,UAAUI,qBAA/B,IAAwDJ,UAAUK,kBAAlE,IAAwFL,UAAUM,iBAAlG,IAAuHL,KAAvI;;eAEOE,QAAQnE,IAAR,CAAakB,OAAb,EAAsB4B,QAAtB,CAAP;KA/ZM;;;;eAAA,uBAmaEA,QAnaF,EAmaY;eACX,KAAKlC,QAAL,CAAcrB,SAAd,CAAwBP,gBAAxB,CAAyC8D,QAAzC,CAAP;KApaM;;;;cAAA,sBAwaCA,QAxaD,EAwaW;eACV,KAAKlC,QAAL,CAAcrB,SAAd,CAAwBgF,aAAxB,CAAsCzB,QAAtC,CAAP;KAzaM;;;;mBAAA,6BA6aQ;YACV0B,UAAUtH,SAASuH,aAAvB;;YAEI,CAACD,OAAD,IAAYA,YAAYtH,SAASkC,IAArC,EAA2C;sBAC7B,IAAV;SADJ,MAEO;sBACOlC,SAASqH,aAAT,CAAuB,QAAvB,CAAV;;;eAGGC,OAAP;KAtbM;;;;aAAA,uBA0bgC;YAAhCtD,OAAgC,uEAAtB,IAAsB;YAAhB2C,MAAgB,uEAAP,KAAO;;YAClC,CAAC3I,MAAMyD,EAAN,CAASuC,OAAT,CAAiBA,OAAjB,CAAL,EAAgC;;;;YAI1BwD,YAAYxJ,MAAMyJ,WAAN,CAAkB3E,IAAlB,CAAuB,IAAvB,EAA6B,yDAA7B,CAAlB;YACM4E,QAAQF,UAAU,CAAV,CAAd;YACMG,OAAOH,UAAUA,UAAU5H,MAAV,GAAmB,CAA7B,CAAb;;YAEMgI,OAAO,SAAPA,IAAO,QAAS;;gBAEdC,MAAMvC,GAAN,KAAc,KAAd,IAAuBuC,MAAMC,OAAN,KAAkB,CAA7C,EAAgD;;;;;gBAK1CR,UAAUtJ,MAAM+J,eAAN,EAAhB;;gBAEIT,YAAYK,IAAZ,IAAoB,CAACE,MAAMG,QAA/B,EAAyC;;sBAE/BC,KAAN;sBACMC,cAAN;aAHJ,MAIO,IAAIZ,YAAYI,KAAZ,IAAqBG,MAAMG,QAA/B,EAAyC;;qBAEvCC,KAAL;sBACMC,cAAN;;SAhBR;;YAoBIvB,MAAJ,EAAY;kBACFwB,EAAN,CAAS,KAAKzE,QAAL,CAAcrB,SAAvB,EAAkC,SAAlC,EAA6CuF,IAA7C,EAAmD,KAAnD;SADJ,MAEO;kBACGQ,GAAN,CAAU,KAAK1E,QAAL,CAAcrB,SAAxB,EAAmC,SAAnC,EAA8CuF,IAA9C,EAAoD,KAApD;;KA1dE;;;;kBAAA,0BA+dKlE,QA/dL,EA+demE,KA/df,EA+dsBQ,QA/dtB,EA+diF;YAAjD1B,MAAiD,uEAAxC,KAAwC;YAAjC2B,OAAiC,uEAAvB,IAAuB;YAAjBC,OAAiB,uEAAP,KAAO;;;YAEnFvK,MAAMyD,EAAN,CAASyB,KAAT,CAAeQ,QAAf,KAA4B1F,MAAMyD,EAAN,CAASyB,KAAT,CAAe2E,KAAf,CAA5B,IAAqD,CAAC7J,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBH,QAAlB,CAA1D,EAAuF;;;;;YAKnFrK,MAAMyD,EAAN,CAAS9B,QAAT,CAAkB+D,QAAlB,KAA+B1F,MAAMyD,EAAN,CAAS/B,KAAT,CAAegE,QAAf,CAAnC,EAA6D;;kBAEnDG,IAAN,CAAWH,QAAX,EAAqBK,OAArB,CAA6B,mBAAW;oBAChCC,mBAAmByE,IAAvB,EAA6B;0BACnBC,cAAN,CAAqB5F,IAArB,CAA0B,IAA1B,EAAgCkB,OAAhC,EAAyC6D,KAAzC,EAAgDQ,QAAhD,EAA0D1B,MAA1D,EAAkE2B,OAAlE,EAA2EC,OAA3E;;aAFR;;;;;;YAUEI,SAASd,MAAMlC,KAAN,CAAY,GAAZ,CAAf;;;;YAIIiD,UAAUL,OAAd;;;YAGI9F,QAAQoG,gBAAZ,EAA8B;sBAChB;;gCAAA;;;aAAV;;;;eASG9E,OAAP,CAAe,gBAAQ;qBACV4C,SAAS,kBAAT,GAA8B,qBAAvC,EAA8DlC,IAA9D,EAAoE4D,QAApE,EAA8EO,OAA9E;SADJ;KAngBM;;;;MAAA,cAygBP5E,OAzgBO,EAygB0D;YAAxD2E,MAAwD,uEAA/C,EAA+C;YAA3CN,QAA2C;YAAjCC,OAAiC,uEAAvB,IAAuB;YAAjBC,OAAiB,uEAAP,KAAO;;cAC1DG,cAAN,CAAqB1E,OAArB,EAA8B2E,MAA9B,EAAsCN,QAAtC,EAAgD,IAAhD,EAAsDC,OAAtD,EAA+DC,OAA/D;KA1gBM;;;;OAAA,eA8gBNvE,OA9gBM,EA8gB2D;YAAxD2E,MAAwD,uEAA/C,EAA+C;YAA3CN,QAA2C;YAAjCC,OAAiC,uEAAvB,IAAuB;YAAjBC,OAAiB,uEAAP,KAAO;;cAC3DG,cAAN,CAAqB1E,OAArB,EAA8B2E,MAA9B,EAAsCN,QAAtC,EAAgD,KAAhD,EAAuDC,OAAvD,EAAgEC,OAAhE;KA/gBM;;;;iBAAA,yBAmhBIvE,OAnhBJ,EAmhBsD;YAAzCS,IAAyC,uEAAlC,EAAkC;YAA9BqE,OAA8B,uEAApB,KAAoB;YAAbC,MAAa,uEAAJ,EAAI;;;YAExD,CAAC/K,MAAMyD,EAAN,CAASuC,OAAT,CAAiBA,OAAjB,CAAD,IAA8BhG,MAAMyD,EAAN,CAASyB,KAAT,CAAeuB,IAAf,CAAlC,EAAwD;;;;;YAKlDoD,QAAQ,IAAImB,WAAJ,CAAgBvE,IAAhB,EAAsB;4BAAA;oBAExBnG,OAAO2K,MAAP,CAAc,EAAd,EAAkBF,MAAlB,EAA0B;sBACxB/K,MAAMyD,EAAN,CAASyH,IAAT,CAAc,IAAd,IAAsB,IAAtB,GAA6B;aAD/B;SAFE,CAAd;;;gBAQQC,aAAR,CAAsBtB,KAAtB;KAliBM;;;;;eAAA,uBAuiBE7D,OAviBF,EAuiBW/F,KAviBX,EAuiBkB;;YAEpBD,MAAMyD,EAAN,CAAS/B,KAAT,CAAesE,OAAf,KAA2BhG,MAAMyD,EAAN,CAAS9B,QAAT,CAAkBqE,OAAlB,CAA/B,EAA2D;kBACjDH,IAAN,CAAWG,OAAX,EAAoBD,OAApB,CAA4B;uBAAU/F,MAAMoL,WAAN,CAAkBtE,MAAlB,EAA0B7G,KAA1B,CAAV;aAA5B;;;;;YAKA,CAACD,MAAMyD,EAAN,CAASuC,OAAT,CAAiBA,OAAjB,CAAL,EAAgC;;;;;YAK1BqF,UAAUrF,QAAQsF,YAAR,CAAqB,cAArB,MAAyC,MAAzD;YACMC,QAAQvL,MAAMyD,EAAN,CAAS+E,OAAT,CAAiBvI,KAAjB,IAA0BA,KAA1B,GAAkC,CAACoL,OAAjD;;;gBAGQ7G,YAAR,CAAqB,cAArB,EAAqC+G,KAArC;KAxjBM;;;;UAAA,kBA4jBHtL,KA5jBG,EA4jBa;0CAANuL,IAAM;gBAAA;;;YACfxL,MAAMyD,EAAN,CAASyB,KAAT,CAAejF,KAAf,CAAJ,EAA2B;mBAChBA,KAAP;;;eAGGA,MAAMwL,QAAN,GAAiBzD,OAAjB,CAAyB,UAAzB,EAAqC,UAACe,KAAD,EAAQ2C,CAAR;mBAAc1L,MAAMyD,EAAN,CAASlC,MAAT,CAAgBiK,KAAKE,CAAL,CAAhB,IAA2BF,KAAKE,CAAL,CAA3B,GAAqC,EAAnD;SAArC,CAAP;KAjkBM;;;;iBAAA,yBAqkBIC,OArkBJ,EAqkBaC,GArkBb,EAqkBkB;YACpBD,YAAY,CAAZ,IAAiBC,QAAQ,CAAzB,IAA8BrL,OAAOC,KAAP,CAAamL,OAAb,CAA9B,IAAuDpL,OAAOC,KAAP,CAAaoL,GAAb,CAA3D,EAA8E;mBACnE,CAAP;;;eAGG,CAACD,UAAUC,GAAV,GAAgB,GAAjB,EAAsBC,OAAtB,CAA8B,CAA9B,CAAP;KA1kBM;;;;YAAA,oBA8kBDtE,KA9kBC,EA8kBM;eACLuE,SAAUvE,QAAQ,EAAR,GAAa,EAAd,GAAoB,EAA7B,EAAiC,EAAjC,CAAP;KA/kBM;cAAA,sBAilBCA,KAjlBD,EAilBQ;eACPuE,SAAUvE,QAAQ,EAAT,GAAe,EAAxB,EAA4B,EAA5B,CAAP;KAllBM;cAAA,sBAolBCA,KAplBD,EAolBQ;eACPuE,SAASvE,QAAQ,EAAjB,EAAqB,EAArB,CAAP;KArlBM;;;;cAAA,wBAylBmD;YAAlDwE,IAAkD,uEAA3C,CAA2C;YAAxCC,YAAwC,uEAAzB,KAAyB;YAAlBC,QAAkB,uEAAP,KAAO;;;YAErD,CAACjM,MAAMyD,EAAN,CAASyI,MAAT,CAAgBH,IAAhB,CAAL,EAA4B;mBACjB,KAAKI,UAAL,CAAgB,IAAhB,EAAsBH,YAAtB,EAAoCC,QAApC,CAAP;;;;YAIEG,SAAS,SAATA,MAAS;mBAAS,OAAI7E,KAAJ,EAAY8E,KAAZ,CAAkB,CAAC,CAAnB,CAAT;SAAf;;;YAGIC,QAAQ,KAAKC,QAAL,CAAcR,IAAd,CAAZ;YACMS,OAAO,KAAKC,UAAL,CAAgBV,IAAhB,CAAb;YACMW,OAAO,KAAKC,UAAL,CAAgBZ,IAAhB,CAAb;;;YAGIC,gBAAgBM,QAAQ,CAA5B,EAA+B;oBAChBA,KAAX;SADJ,MAEO;oBACK,EAAR;;;;qBAIML,WAAW,GAAX,GAAiB,EAA3B,IAAgCK,KAAhC,GAAwCF,OAAOI,IAAP,CAAxC,SAAwDJ,OAAOM,IAAP,CAAxD;KA/mBM;;;;cAAA,wBAmnBsC;YAArCzM,KAAqC,uEAA7B,EAA6B;YAAzB2M,IAAyB,uEAAlB,EAAkB;YAAd5E,OAAc,uEAAJ,EAAI;;eACrC/H,MAAM+H,OAAN,CAAc,IAAI6E,MAAJ,CAAWD,KAAKnB,QAAL,GAAgBzD,OAAhB,CAAwB,2BAAxB,EAAqD,MAArD,CAAX,EAAyE,GAAzE,CAAd,EAA6FA,QAAQyD,QAAR,EAA7F,CAAP;KApnBM;;;;eAAA,yBAwnBc;YAAZxL,KAAY,uEAAJ,EAAI;;eACbA,MAAMwL,QAAN,GAAiBzD,OAAjB,CAAyB,QAAzB,EAAmC;mBAAQrB,KAAKyB,MAAL,CAAY,CAAZ,EAAe0E,WAAf,KAA+BnG,KAAKoG,MAAL,CAAY,CAAZ,EAAeC,WAAf,EAAvC;SAAnC,CAAP;KAznBM;;;;gBAAA,0BA6nBe;YAAZ/M,KAAY,uEAAJ,EAAI;;YACjBsB,SAAStB,MAAMwL,QAAN,EAAb;;;iBAGSzL,MAAMiN,UAAN,CAAiB1L,MAAjB,EAAyB,GAAzB,EAA8B,GAA9B,CAAT;;;iBAGSvB,MAAMiN,UAAN,CAAiB1L,MAAjB,EAAyB,GAAzB,EAA8B,GAA9B,CAAT;;;iBAGSvB,MAAMkN,WAAN,CAAkB3L,MAAlB,CAAT;;;eAGOvB,MAAMiN,UAAN,CAAiB1L,MAAjB,EAAyB,GAAzB,EAA8B,EAA9B,CAAP;KA1oBM;;;;eAAA,yBA8oBc;YAAZtB,KAAY,uEAAJ,EAAI;;YAChBsB,SAAStB,MAAMwL,QAAN,EAAb;;;iBAGSzL,MAAMmN,YAAN,CAAmB5L,MAAnB,CAAT;;;eAGOA,OAAO6G,MAAP,CAAc,CAAd,EAAiB4E,WAAjB,KAAiCzL,OAAO8K,KAAP,CAAa,CAAb,CAAxC;KArpBM;;;;UAAA,oBAypBsB;YAAzBvF,MAAyB,uEAAhB,EAAgB;;2CAATsG,OAAS;mBAAA;;;YACxB,CAACA,QAAQxL,MAAb,EAAqB;mBACVkF,MAAP;;;YAGEuG,SAASD,QAAQE,KAAR,EAAf;;YAEI,CAACtN,MAAMyD,EAAN,CAAS5B,MAAT,CAAgBwL,MAAhB,CAAL,EAA8B;mBACnBvG,MAAP;;;eAGGhF,IAAP,CAAYuL,MAAZ,EAAoBtH,OAApB,CAA4B,eAAO;gBAC3B/F,MAAMyD,EAAN,CAAS5B,MAAT,CAAgBwL,OAAO/F,GAAP,CAAhB,CAAJ,EAAkC;oBAC1B,CAAChH,OAAOwB,IAAP,CAAYgF,MAAZ,EAAoBkC,QAApB,CAA6B1B,GAA7B,CAAL,EAAwC;2BAC7B2D,MAAP,CAAcnE,MAAd,qBAAyBQ,GAAzB,EAA+B,EAA/B;;;sBAGEiG,MAAN,CAAazG,OAAOQ,GAAP,CAAb,EAA0B+F,OAAO/F,GAAP,CAA1B;aALJ,MAMO;uBACI2D,MAAP,CAAcnE,MAAd,qBAAyBQ,GAAzB,EAA+B+F,OAAO/F,GAAP,CAA/B;;SARR;;eAYOtH,MAAMuN,MAAN,eAAazG,MAAb,2BAAwBsG,OAAxB,GAAP;KAhrBM;;;;UAAA,kBAorBH1L,KAprBG,EAorBI;YACN,CAAC1B,MAAMyD,EAAN,CAAS/B,KAAT,CAAeA,KAAf,CAAL,EAA4B;mBACjBA,KAAP;;;eAGGA,MAAM8L,MAAN,CAAa,UAACC,IAAD,EAAOxH,KAAP;mBAAiBvE,MAAMgM,OAAN,CAAcD,IAAd,MAAwBxH,KAAzC;SAAb,CAAP;KAzrBM;;;;WAAA,mBA6rBFvE,KA7rBE,EA6rBK6F,KA7rBL,EA6rBY;YACd,CAACvH,MAAMyD,EAAN,CAAS/B,KAAT,CAAeA,KAAf,CAAD,IAA0B,CAACA,MAAME,MAArC,EAA6C;mBAClC,IAAP;;;eAGGF,MAAMiM,MAAN,CAAa,UAACC,IAAD,EAAOC,IAAP;mBAAiBtI,KAAKuI,GAAL,CAASD,OAAOtG,KAAhB,IAAyBhC,KAAKuI,GAAL,CAASF,OAAOrG,KAAhB,CAAzB,GAAkDsG,IAAlD,GAAyDD,IAA1E;SAAb,CAAP;KAlsBM;;;;oBAAA,4BAssBOrL,GAtsBP,EAssBY;;YAEd,wDAAwDd,IAAxD,CAA6Dc,GAA7D,CAAJ,EAAuE;mBAC5DzC,UAAUiO,OAAjB;;;;YAIA,uDAAuDtM,IAAvD,CAA4Dc,GAA5D,CAAJ,EAAsE;mBAC3DzC,UAAUkO,KAAjB;;;eAGG,IAAP;KAjtBM;;;;kBAAA,0BAqtBKzL,GArtBL,EAqtBU;YACZvC,MAAMyD,EAAN,CAASyB,KAAT,CAAe3C,GAAf,CAAJ,EAAyB;mBACd,IAAP;;;YAGE0L,QAAQ,8DAAd;eACO1L,IAAIwG,KAAJ,CAAUkF,KAAV,IAAmBpB,OAAOqB,EAA1B,GAA+B3L,GAAtC;KA3tBM;;;;gBAAA,wBA+tBGA,GA/tBH,EA+tBQ;YACVvC,MAAMyD,EAAN,CAASyB,KAAT,CAAe3C,GAAf,CAAJ,EAAyB;mBACd,IAAP;;;YAGAvC,MAAMyD,EAAN,CAASyI,MAAT,CAAgB3L,OAAOgC,GAAP,CAAhB,CAAJ,EAAkC;mBACvBA,GAAP;;;YAGE0L,QAAQ,iCAAd;eACO1L,IAAIwG,KAAJ,CAAUkF,KAAV,IAAmBpB,OAAOqB,EAA1B,GAA+B3L,GAAtC;KAzuBM;;;;YAAA,oBA6uBDA,GA7uBC,EA6uBI;YACJ4L,SAASnM,SAASsC,aAAT,CAAuB,GAAvB,CAAf;eACO8J,IAAP,GAAc7L,GAAd;eACO4L,MAAP;KAhvBM;;;;gBAAA,wBAovBGlO,KApvBH,EAovBU;YACZoO,SAASpO,KAAb;;;YAGIA,MAAMqO,UAAN,CAAiB,SAAjB,KAA+BrO,MAAMqO,UAAN,CAAiB,UAAjB,CAAnC,EAAiE;4BAC/C,KAAKC,QAAL,CAActO,KAAd,CAD+C;;kBAAA,aAC1DoO,MAD0D;;;YAI7D,KAAK5K,EAAL,CAAQyB,KAAR,CAAcmJ,MAAd,CAAJ,EAA2B;mBAChB,IAAP;;;YAGEG,SAASH,OAAOhC,KAAP,CAAagC,OAAOX,OAAP,CAAe,GAAf,IAAsB,CAAnC,EAAsC/F,KAAtC,CAA4C,GAA5C,CAAf;;eAEO6G,OAAOb,MAAP,CAAc,UAACc,MAAD,EAASC,IAAT,EAAkB;8BAI/BA,KAAK/G,KAAL,CAAW,GAAX,CAJ+B;;gBAE/BL,GAF+B;gBAG/BqH,GAH+B;;mBAM5BrO,OAAO2K,MAAP,CAAcwD,MAAd,qBAAyBnH,GAAzB,EAA+BsH,mBAAmBD,GAAnB,CAA/B,EAAP;SANG,EAOJ,EAPI,CAAP;KAlwBM;;;;kBAAA,0BA6wBK1O,KA7wBL,EA6wBY;YACd,CAACD,MAAMyD,EAAN,CAAS5B,MAAT,CAAgB5B,KAAhB,CAAL,EAA6B;mBAClB,EAAP;;;eAGGK,OAAOwB,IAAP,CAAY7B,KAAZ,EACF4O,GADE,CACE;mBAAUC,mBAAmBxH,GAAnB,CAAV,SAAqCwH,mBAAmB7O,MAAMqH,GAAN,CAAnB,CAArC;SADF,EAEFyH,IAFE,CAEG,GAFH,CAAP;KAlxBM;;;;aAAA,qBAwxBA1B,MAxxBA,EAwxBQ;YACR2B,WAAWhN,SAASiN,sBAAT,EAAjB;YACMjJ,UAAUhE,SAASsC,aAAT,CAAuB,KAAvB,CAAhB;iBACSkC,WAAT,CAAqBR,OAArB;gBACQ/B,SAAR,GAAoBoJ,MAApB;eACO2B,SAASE,UAAT,CAAoBC,SAA3B;KA7xBM;;;;kBAAA,0BAiyBKC,KAjyBL,EAiyBYC,MAjyBZ,EAiyBoB;YACpBC,WAAW,SAAXA,QAAW,CAACC,CAAD,EAAIC,CAAJ;mBAAWA,MAAM,CAAN,GAAUD,CAAV,GAAcD,SAASE,CAAT,EAAYD,IAAIC,CAAhB,CAAzB;SAAjB;YACMC,QAAQH,SAASF,KAAT,EAAgBC,MAAhB,CAAd;eACUD,QAAQK,KAAlB,SAA2BJ,SAASI,KAApC;KApyBM;;;;QAwyBNC,kBAAJ,GAAyB;YACf1J,UAAUhE,SAASsC,aAAT,CAAuB,MAAvB,CAAhB;;YAEMqG,SAAS;8BACO,qBADP;2BAEI,eAFJ;yBAGE,+BAHF;wBAIC;SAJhB;;YAOMlE,OAAOnG,OAAOwB,IAAP,CAAY6I,MAAZ,EAAoBiC,IAApB,CAAyB;mBAAS5G,QAAQ7D,KAAR,CAAc0H,KAAd,MAAyB8F,SAAlC;SAAzB,CAAb;;eAEO3P,MAAMyD,EAAN,CAASlC,MAAT,CAAgBkF,IAAhB,IAAwBkE,OAAOlE,IAAP,CAAxB,GAAuC,KAA9C;KApzBM;;;WAAA,mBAwzBFT,OAxzBE,EAwzBO;mBACF,YAAM;kBACPzB,YAAN,CAAmByB,OAAnB,EAA4B,IAA5B;oBACQ4J,YAAR,CAFa;kBAGPrL,YAAN,CAAmByB,OAAnB,EAA4B,KAA5B;SAHJ,EAIG,CAJH;;CAzzBR;;ACRA;AACA;;AAMA,IAAMvB,UAAU;;WAEL,iBAAiBzC,SAASsC,aAAT,CAAuB,OAAvB,CAFZ;WAGL,iBAAiBtC,SAASsC,aAAT,CAAuB,OAAvB,CAHZ;;;;SAAA,iBAONmC,IAPM,EAOAoJ,QAPA,EAOUC,WAPV,EAOuB;YAC3BC,MAAM,KAAV;YACIC,KAAK,KAAT;YACMC,UAAUjQ,MAAMkQ,UAAN,EAAhB;YACMC,gBAAgBF,QAAQG,QAAR,IAAoBN,WAApB,IAAmCrL,QAAQqL,WAAjE;;gBAEWD,QAAX,SAAuBpJ,IAAvB;iBACS,aAAL;sBACUhC,QAAQ4L,KAAd;qBACKN,OAAOtL,QAAQ6L,UAAf,KAA8B,CAACL,QAAQG,QAAT,IAAqBD,aAAnD,CAAL;;;iBAGC,aAAL;sBACU1L,QAAQ8L,KAAd;qBACKR,OAAOtL,QAAQ6L,UAApB;;;iBAGC,eAAL;iBACK,aAAL;sBACU,IAAN;qBACK7L,QAAQ6L,UAAR,KAAuB,CAACL,QAAQG,QAAT,IAAqBD,aAA5C,CAAL;;;;sBAIM1L,QAAQ8L,KAAR,IAAiB9L,QAAQ4L,KAA/B;qBACKN,OAAOtL,QAAQ6L,UAApB;;;eAGD;oBAAA;;SAAP;KAnCQ;;;;;SA2CN,YAAM;YACFL,UAAUjQ,MAAMkQ,UAAN,EAAhB;eACO,CAACD,QAAQG,QAAT,IAAqBpQ,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBxK,MAAMsE,aAAN,CAAoB,OAApB,EAA6BkM,yBAA/C,CAA5B;KAFC,EA3CO;;;;aAkDHxQ,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBrK,OAAOsQ,qCAAzB,CAlDG;;;;iBAsDC,iBAAiBzO,SAASsC,aAAT,CAAuB,OAAvB,CAtDlB;;;;;QAAA,gBA2DPmC,IA3DO,EA2DD;YACCiK,KADD,GACW,IADX,CACCA,KADD;;;YAGH;;gBAEI,CAAC,KAAKC,OAAN,IAAiB,CAAC3Q,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBkG,MAAME,WAAxB,CAAtB,EAA4D;uBACjD,KAAP;;;;gBAIAnK,KAAKuC,QAAL,CAAc,SAAd,CAAJ,EAA8B;uBACnB0H,MAAME,WAAN,CAAkBnK,IAAlB,EAAwBuB,OAAxB,CAAgC,IAAhC,EAAsC,EAAtC,CAAP;;;;gBAIA,KAAK6I,OAAT,EAAkB;wBACNpK,IAAR;yBACS,YAAL;+BACWiK,MAAME,WAAN,CAAkB,kCAAlB,EAAsD5I,OAAtD,CAA8D,IAA9D,EAAoE,EAApE,CAAP;;yBAEC,WAAL;+BACW0I,MAAME,WAAN,CAAkB,4CAAlB,EAAgE5I,OAAhE,CAAwE,IAAxE,EAA8E,EAA9E,CAAP;;yBAEC,WAAL;+BACW0I,MAAME,WAAN,CAAkB,4BAAlB,EAAgD5I,OAAhD,CAAwD,IAAxD,EAA8D,EAA9D,CAAP;;;+BAGO,KAAP;;aAZZ,MAcO,IAAI,KAAK8I,OAAT,EAAkB;wBACbrK,IAAR;yBACS,YAAL;+BACWiK,MAAME,WAAN,CAAkB,aAAlB,EAAiC5I,OAAjC,CAAyC,IAAzC,EAA+C,EAA/C,CAAP;;yBAEC,WAAL;+BACW0I,MAAME,WAAN,CAAkB,4BAAlB,EAAgD5I,OAAhD,CAAwD,IAAxD,EAA8D,EAA9D,CAAP;;yBAEC,WAAL;+BACW0I,MAAME,WAAN,CAAkB,uBAAlB,EAA2C5I,OAA3C,CAAmD,IAAnD,EAAyD,EAAzD,CAAP;;;+BAGO,KAAP;;;SAtChB,CAyCE,OAAO9E,CAAP,EAAU;mBACD,KAAP;;;;eAIG,KAAP;KA5GQ;;;;gBAgHA,gBAAgBlB,SAASsC,aAAT,CAAuB,OAAvB,CAhHhB;;;;;sBAqHO,YAAM;;YAEjByM,YAAY,KAAhB;YACI;gBACMnG,UAAUtK,OAAO0Q,cAAP,CAAsB,EAAtB,EAA0B,SAA1B,EAAqC;mBAAA,iBAC3C;gCACU,IAAZ;2BACO,IAAP;;aAHQ,CAAhB;mBAMOlO,gBAAP,CAAwB,MAAxB,EAAgC,IAAhC,EAAsC8H,OAAtC;SAPJ,CAQE,OAAO1H,CAAP,EAAU;;;;eAIL6N,SAAP;KAfc,EArHN;;;gBAwIC,YAAM;YACTE,QAAQjP,SAASsC,aAAT,CAAuB,OAAvB,CAAd;cACMmC,IAAN,GAAa,OAAb;eACOwK,MAAMxK,IAAN,KAAe,OAAtB;KAHQ,EAxIA;;;;WAgJL,kBAAkBzE,SAASE,eAhJtB;;;iBAmJClC,MAAM0P,kBAAN,KAA6B,KAnJ9B;;;;mBAuJG,gBAAgBvP,MAAhB,IAA0BA,OAAO+Q,UAAP,CAAkB,0BAAlB,EAA8CjI;CAvJ3F;;ACPA;AACA;AAMA,IAAMkI,QAAQ;cAAA,wBACG;YACL,CAAC,KAAKR,OAAV,EAAmB;mBACR,IAAP;;;eAGG,KAAKD,KAAL,CAAW5M,gBAAX,CAA4B,QAA5B,CAAP;KANM;;;;qBAAA,+BAUU;YACZ,CAAC,KAAK6M,OAAV,EAAmB;mBACR,IAAP;;;;YAIEvD,UAAU+D,MAAMC,UAAN,CAAiBtM,IAAjB,CAAsB,IAAtB,CAAhB;;YAEI9E,MAAMyD,EAAN,CAASyB,KAAT,CAAekI,OAAf,CAAJ,EAA6B;mBAClB,IAAP;;;;YAIEiE,QAAQxQ,MAAMgF,IAAN,CAAWuH,OAAX,EAAoBI,MAApB,CAA2B;mBAAU,CAACxN,MAAMyD,EAAN,CAASyB,KAAT,CAAemI,OAAO/B,YAAP,CAAoB,MAApB,CAAf,CAAX;SAA3B,CAAd;;;YAGItL,MAAMyD,EAAN,CAASyB,KAAT,CAAemM,KAAf,CAAJ,EAA2B;mBAChB,IAAP;;;;eAIGrR,MAAMsR,MAAN,CAAaD,MAAMxC,GAAN,CAAU;mBAAUtO,OAAO8M,OAAO/B,YAAP,CAAoB,MAApB,CAAP,CAAV;SAAV,CAAb,CAAP;KA/BM;UAAA,oBAkCD;YACD,CAAC,KAAKqF,OAAV,EAAmB;;;;YAIbY,SAAS,IAAf;;;eAGOP,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,SAApC,EAA+C;eAAA,iBACrC;;oBAEItD,UAAU+D,MAAMC,UAAN,CAAiBtM,IAAjB,CAAsByM,MAAtB,CAAhB;;oBAEIvR,MAAMyD,EAAN,CAASyB,KAAT,CAAekI,OAAf,CAAJ,EAA6B;2BAClB,IAAP;;;oBAGEnE,UAAUpI,MAAMgF,IAAN,CAAWuH,OAAX,EAAoBI,MAApB,CAA2B;2BAAUH,OAAO/B,YAAP,CAAoB,KAApB,MAA+BiG,OAAOlE,MAAhD;iBAA3B,CAAhB;;oBAEIrN,MAAMyD,EAAN,CAASyB,KAAT,CAAe+D,OAAf,CAAJ,EAA6B;2BAClB,IAAP;;;uBAGG1I,OAAO0I,QAAQ,CAAR,EAAWqC,YAAX,CAAwB,MAAxB,CAAP,CAAP;aAfuC;eAAA,eAiBvCrL,KAjBuC,EAiBhC;;oBAEDmN,UAAU+D,MAAMC,UAAN,CAAiBtM,IAAjB,CAAsByM,MAAtB,CAAhB;;oBAEIvR,MAAMyD,EAAN,CAASyB,KAAT,CAAekI,OAAf,CAAJ,EAA6B;;;;;oBAKvBnE,UAAUpI,MAAMgF,IAAN,CAAWuH,OAAX,EAAoBI,MAApB,CAA2B;2BAAUjN,OAAO8M,OAAO/B,YAAP,CAAoB,MAApB,CAAP,MAAwCrL,KAAlD;iBAA3B,CAAhB;;;oBAGID,MAAMyD,EAAN,CAASyB,KAAT,CAAe+D,OAAf,CAAJ,EAA6B;;;;;oBAKvB8H,YAAY9H,QAAQuE,MAAR,CAAe;2BAAU/I,QAAQ+M,IAAR,CAAa1M,IAAb,CAAkByM,MAAlB,EAA0BlE,OAAO/B,YAAP,CAAoB,MAApB,CAA1B,CAAV;iBAAf,CAAlB;;;oBAGItL,MAAMyD,EAAN,CAASyB,KAAT,CAAe6L,SAAf,CAAJ,EAA+B;;;;;sBAKzB5F,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,kBAA/C,EAAmE,KAAnE,EAA0E;6BAC7DzQ;iBADb;;;oBAKQwR,WA9BD,GA8B0BF,MA9B1B,CA8BCE,WA9BD;oBA8BcC,OA9Bd,GA8B0BH,MA9B1B,CA8BcG,OA9Bd;;;;uBAiCAhB,KAAP,CAAaiB,GAAb,GAAmBZ,UAAU,CAAV,EAAazF,YAAb,CAA0B,KAA1B,CAAnB;;;uBAGOoF,KAAP,CAAakB,IAAb;;;oBAGIF,OAAJ,EAAa;2BACFG,IAAP;;;;uBAIGJ,WAAP,GAAqBA,WAArB;;;sBAGMtG,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,eAA/C,EAAgE,KAAhE,EAAuE;6BAC1DzQ;iBADb;;SAhER;KA1CM;;;;;kBAAA,4BAmHO;YACT,CAAC,KAAK0Q,OAAV,EAAmB;;;;;cAKb5J,aAAN,CAAoBoK,MAAMC,UAAN,EAApB;;;;;aAKKV,KAAL,CAAWlM,YAAX,CAAwB,KAAxB,EAA+B,KAAKsN,MAAL,CAAYC,UAA3C;;;;;aAKKrB,KAAL,CAAWkB,IAAX;;;aAGKI,KAAL,CAAWC,GAAX,CAAe,4BAAf;;CAtIR;;ACPA;AACA;AAKA,IAAMC,OAAO;OAAA,oBACkB;YAAvB5K,GAAuB,uEAAjB,EAAiB;YAAbwK,MAAa,uEAAJ,EAAI;;YACnB9R,MAAMyD,EAAN,CAASyB,KAAT,CAAeoC,GAAf,KAAuBtH,MAAMyD,EAAN,CAASyB,KAAT,CAAe4M,MAAf,CAAvB,IAAiD,CAACxR,OAAOwB,IAAP,CAAYgQ,OAAOI,IAAnB,EAAyBlJ,QAAzB,CAAkC1B,GAAlC,CAAtD,EAA8F;mBACnF,EAAP;;;YAGA/F,SAASuQ,OAAOI,IAAP,CAAY5K,GAAZ,CAAb;;YAEMU,UAAU;0BACE8J,OAAOK,QADT;uBAEDL,OAAOM;SAFtB;;eAKO/K,OAAP,CAAeW,OAAf,EAAwBjC,OAAxB,CAAgC,gBAG1B;;gBAFFuB,GAEE;gBADFC,KACE;;qBACOvH,MAAMiN,UAAN,CAAiB1L,MAAjB,EAAyB+F,GAAzB,EAA8BC,KAA9B,CAAT;SAJJ;;eAOOhG,MAAP;;CApBR;;ACNA;AACA;;AAUA,IAAM0O,UAAUjQ,MAAMkQ,UAAN,EAAhB;;AAEA,IAAMF,KAAK;gBAAA,0BACQ;cACLqC,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYQ,SAAZ,CAAsBjO,SAAtB,CAAgC2D,OAAhC,CAAwC,GAAxC,EAA6C,EAA7C,CAA3C,EAA6F,IAA7F;cACMqK,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBC,WAAlE,EAA+E,KAAKzB,SAAL,CAAef,EAA9F;KAHG;;;;wBAAA,kCAO8B;YAAhBrH,MAAgB,uEAAP,KAAO;;YAC7BA,UAAU,KAAKgI,OAAnB,EAA4B;iBACnBD,KAAL,CAAWlM,YAAX,CAAwB,UAAxB,EAAoC,EAApC;SADJ,MAEO;iBACEkM,KAAL,CAAWhI,eAAX,CAA2B,UAA3B;;KAXD;;;;SAAA,mBAgBC;;;;;aAGC+J,SAAL,CAAe/B,KAAf;;;YAGI,CAAC,KAAKK,SAAL,CAAef,EAApB,EAAwB;iBACfgC,KAAL,CAAWU,IAAX,6BAA0C,KAAK7C,QAA/C,SAA2D,KAAKpJ,IAAhE;;;eAGGkM,oBAAH,CAAwB7N,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC;;;;;;;YAOA,CAAC9E,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAckN,QAA/B,CAAL,EAA+C;;qBAElCC,MAAT,CAAgB/N,IAAhB,CAAqB,IAArB;;;iBAGK2N,SAAL,CAAeG,QAAf;;;;WAIDD,oBAAH,CAAwB7N,IAAxB,CAA6B,IAA7B;;;iBAGSgO,KAAT,CAAehO,IAAf,CAAoB,IAApB;;;aAGKiO,MAAL,GAAc,IAAd;;;aAGKC,KAAL,GAAa,IAAb;;;aAGKC,KAAL,GAAa,IAAb;;;aAGKC,IAAL,GAAY,IAAZ;;;aAGKC,OAAL,GAAe,IAAf;;;WAGGC,YAAH,CAAgBtO,IAAhB,CAAqB,IAArB;;;WAGGuO,UAAH,CAAcvO,IAAd,CAAmB,IAAnB;;;WAGGwO,YAAH,CAAgBxO,IAAhB,CAAqB,IAArB;;;cAGMuN,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBgB,GAAvB,CAA2BxC,SAAtE,EAAiFtM,QAAQ8O,GAAR,IAAe,KAAK5C,OAApB,IAA+B,KAAKE,OAArH;;;cAGMwB,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBiB,OAAvB,CAA+BzC,SAA1E,EAAqFtM,QAAQ+O,OAAR,IAAmB,KAAK7C,OAA7G;;;cAGM0B,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBkB,KAAlE,EAAyExD,QAAQwD,KAAjF;;;cAGMpB,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBmB,OAAlE,EAA2E,KAAKC,KAAhF;;;aAGKC,KAAL,GAAa,IAAb;;;mBAGW,YAAM;kBACPzI,aAAN,CAAoBrG,IAApB,QAA+B,MAAK4L,KAApC,EAA2C,OAA3C;SADJ,EAEG,CAFH;;;WAKGmD,QAAH,CAAY/O,IAAZ,CAAiB,IAAjB;;;WAGGgP,SAAH,CAAahP,IAAb,CAAkB,IAAlB;KA/FG;;;;YAAA,sBAmGI;;YAEHiP,QAAQ7B,KAAK8B,GAAL,CAAS,MAAT,EAAiB,KAAKlC,MAAtB,CAAZ;;;YAGI9R,MAAMyD,EAAN,CAASlC,MAAT,CAAgB,KAAKuQ,MAAL,CAAYM,KAA5B,KAAsC,CAACpS,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAK4M,MAAL,CAAYM,KAA3B,CAA3C,EAA8E;4BAC5D,KAAKN,MAAL,CAAYM,KAA1B;;;iBAGK1M,QAAL,CAAcrB,SAAd,CAAwBG,YAAxB,CAAqC,YAArC,EAAmD,KAAKsN,MAAL,CAAYM,KAA/D;;;;YAIApS,MAAMyD,EAAN,CAAS9B,QAAT,CAAkB,KAAK+D,QAAL,CAAcuO,OAAd,CAAsBpC,IAAxC,CAAJ,EAAmD;kBACzChM,IAAN,CAAW,KAAKH,QAAL,CAAcuO,OAAd,CAAsBpC,IAAjC,EAAuC9L,OAAvC,CAA+C,kBAAU;uBAC9CvB,YAAP,CAAoB,YAApB,EAAkCuP,KAAlC;aADJ;;;;;YAOA,KAAKG,OAAT,EAAkB;gBACRC,SAASnU,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,QAA5B,CAAf;;gBAEI,CAAC9E,MAAMyD,EAAN,CAASuC,OAAT,CAAiBmO,MAAjB,CAAL,EAA+B;;;;;gBAKzB/B,QAAQ,CAACpS,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAK4M,MAAL,CAAYM,KAA3B,CAAD,GAAqC,KAAKN,MAAL,CAAYM,KAAjD,GAAyD,OAAvE;gBACMhG,SAAS8F,KAAK8B,GAAL,CAAS,YAAT,EAAuB,KAAKlC,MAA5B,CAAf;;mBAEOtN,YAAP,CAAoB,OAApB,EAA6B4H,OAAOpE,OAAP,CAAe,SAAf,EAA0BoK,KAA1B,CAA7B;;KAnID;;;;aAAA,uBAwIK;YACJ,CAACpS,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAc2O,MAA/B,CAAD,IAA2CrU,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAKmP,MAApB,CAA/C,EAA4E;;;;;YAKtEC,UAAU,KAAKD,MAAL,CAAY1M,KAAZ,CAAkB,GAAlB,CAAhB;aACKjC,QAAL,CAAc2O,MAAd,CAAqBlS,KAArB,CAA2BoS,eAA3B,GAA6CD,QAAQzF,GAAR,CAAY;8BAAa2F,CAAb;SAAZ,EAAgCzF,IAAhC,CAAqC,GAArC,CAA7C;KA/IG;;;;gBAAA,0BAmJQ;;cAELsD,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBb,OAAlE,EAA2E,KAAKA,OAAhF;cACMW,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBkC,MAAlE,EAA0E,KAAKA,MAA/E;cACMpC,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBmC,OAAlE,EAA2E,KAAKA,OAAhF;;;cAGMtJ,WAAN,CAAkB,KAAK1F,QAAL,CAAcuO,OAAd,CAAsBpC,IAAxC,EAA8C,KAAKH,OAAnD;;;aAGKiD,cAAL,CAAoB,CAAC,KAAKjD,OAA1B;KA7JG;;;;gBAAA,wBAiKM7H,KAjKN,EAiKa;;;aACX+K,OAAL,GAAe,CACX,SADW,EAEX,SAFW,EAGb5L,QAHa,CAGJa,MAAMpD,IAHF,CAAf;;;qBAMa,KAAKoO,MAAL,CAAYD,OAAzB;;;aAGKC,MAAL,CAAYD,OAAZ,GAAsBE,WAAW,YAAM;;kBAE7BzC,WAAN,CAAkB,OAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,OAAKyN,MAAL,CAAYS,UAAZ,CAAuBqC,OAAlE,EAA2E,OAAKA,OAAhF;;;mBAGKD,cAAL,CAAoB,OAAKC,OAAzB;SALkB,EAMnB,KAAKA,OAAL,GAAe,GAAf,GAAqB,CANF,CAAtB;KA3KG;;;;eAAA,yBAqLO;;;;aAELG,MAAL,GAAc,KAAKrE,KAAL,CAAWsE,YAAX,KAA4B,CAA1C;;YAEI,KAAKD,MAAT,EAAiB;kBACP1C,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBqC,OAAlE,EAA2E,KAA3E;kBACMvC,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuB0C,KAAlE,EAAyE,IAAzE;;;;qBAIS,KAAKJ,MAAL,CAAYE,MAAzB;;;aAGKF,MAAL,CAAYD,OAAZ,GAAsBE,WAAW,YAAM;;kBAE7BzC,WAAN,CAAkB,OAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,OAAKyN,MAAL,CAAYS,UAAZ,CAAuBqC,OAAlE,EAA2E,OAAKA,OAAhF;;;mBAGKD,cAAL,CAAoB,OAAKC,OAAzB;SALkB,EAMnB,KAAKA,OAAL,GAAe,GAAf,GAAqB,CANF,CAAtB;KAlMG;;;;gBAAA,0BA4MQ;YACP,CAAC,KAAK7D,SAAL,CAAef,EAApB,EAAwB;;;;;YAKpBhQ,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAcwP,MAAd,CAAqBnC,MAAtC,CAAJ,EAAmD;eAC5CoC,QAAH,CAAYrQ,IAAZ,CAAiB,IAAjB,EAAuB,KAAKY,QAAL,CAAcwP,MAAd,CAAqBnC,MAA5C,EAAoD,KAAKC,KAAL,GAAa,CAAb,GAAiB,KAAKD,MAA1E;;;;YAIA/S,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAcuO,OAAd,CAAsBmB,IAAvC,CAAJ,EAAkD;kBACxChK,WAAN,CAAkB,KAAK1F,QAAL,CAAcuO,OAAd,CAAsBmB,IAAxC,EAA8C,KAAKpC,KAAL,IAAc,KAAKD,MAAL,KAAgB,CAA5E;;KAxND;;;;YAAA,oBA6NEjM,MA7NF,EA6NqB;YAAXS,KAAW,uEAAH,CAAG;;YACpB,CAACvH,MAAMyD,EAAN,CAASuC,OAAT,CAAiBc,MAAjB,CAAL,EAA+B;;;;;eAKxBS,KAAP,GAAeA,KAAf;;;iBAGS8N,eAAT,CAAyBvQ,IAAzB,CAA8B,IAA9B,EAAoCgC,MAApC;KAtOG;;;;eAAA,uBA0OKA,MA1OL,EA0Oa7G,KA1Ob,EA0OoB;YACjBsH,QAAQvH,MAAMyD,EAAN,CAASyI,MAAT,CAAgBjM,KAAhB,IAAyBA,KAAzB,GAAiC,CAA/C;YACMqV,WAAWtV,MAAMyD,EAAN,CAASuC,OAAT,CAAiBc,MAAjB,IAA2BA,MAA3B,GAAoC,KAAKpB,QAAL,CAAc6P,OAAd,CAAsBC,MAA3E;;;YAGIxV,MAAMyD,EAAN,CAASuC,OAAT,CAAiBsP,QAAjB,CAAJ,EAAgC;qBACnB/N,KAAT,GAAiBA,KAAjB;;;gBAGMwM,QAAQuB,SAASG,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,CAAd;gBACIzV,MAAMyD,EAAN,CAASuC,OAAT,CAAiB+N,KAAjB,CAAJ,EAA6B;sBACnB3P,UAAN,CAAiB,CAAjB,EAAoBsR,SAApB,GAAgCnO,KAAhC;;;KArPL;;;;kBAAA,0BA2PQsC,KA3PR,EA2Pe;YACd,CAAC,KAAKkH,SAAL,CAAef,EAAhB,IAAsB,CAAChQ,MAAMyD,EAAN,CAASoG,KAAT,CAAeA,KAAf,CAA3B,EAAkD;;;;YAI9CtC,QAAQ,CAAZ;;YAEIsC,KAAJ,EAAW;oBACCA,MAAMpD,IAAd;;qBAES,YAAL;qBACK,SAAL;4BACYzG,MAAM2V,aAAN,CAAoB,KAAKlE,WAAzB,EAAsC,KAAKmE,QAA3C,CAAR;;;wBAGI/L,MAAMpD,IAAN,KAAe,YAAnB,EAAiC;2BAC1B0O,QAAH,CAAYrQ,IAAZ,CAAiB,IAAjB,EAAuB,KAAKY,QAAL,CAAcwP,MAAd,CAAqBW,IAA5C,EAAkDtO,KAAlD;;;;;;qBAMH,SAAL;qBACK,UAAL;uBACOuO,WAAH,CAAehR,IAAf,CAAoB,IAApB,EAA0B,KAAKY,QAAL,CAAc6P,OAAd,CAAsBC,MAAhD,EAAwD,KAAKO,QAAL,GAAgB,GAAxE;;;;;;;;KAnRT;;;;qBAAA,+BA8RsD;YAA3CjP,MAA2C,uEAAlC,IAAkC;YAA5BiF,IAA4B,uEAArB,CAAqB;YAAlBE,QAAkB,uEAAP,KAAO;;;YAErD,CAACjM,MAAMyD,EAAN,CAASuC,OAAT,CAAiBc,MAAjB,CAAD,IAA6B,CAAC9G,MAAMyD,EAAN,CAASyI,MAAT,CAAgBH,IAAhB,CAAlC,EAAyD;;;;;YAKnDiK,aAAahW,MAAMuM,QAAN,CAAe,KAAKqJ,QAApB,IAAgC,CAAnD;;;eAGO/O,WAAP,GAAqB7G,MAAMmM,UAAN,CAAiBJ,IAAjB,EAAuBiK,UAAvB,EAAmC/J,QAAnC,CAArB;KAxSG;;;;cAAA,sBA4SIpC,KA5SJ,EA4SW;;YAERoM,SAAS,CAACjW,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAc6P,OAAd,CAAsBK,QAAvC,CAAD,IAAqD,KAAK9D,MAAL,CAAYoE,UAAhF;;;WAGGC,iBAAH,CAAqBrR,IAArB,CAA0B,IAA1B,EAAgC,KAAKY,QAAL,CAAc6P,OAAd,CAAsB9D,WAAtD,EAAmEwE,SAAS,KAAKL,QAAL,GAAgB,KAAKnE,WAA9B,GAA4C,KAAKA,WAApH,EAAiIwE,MAAjI;;;YAGIpM,SAASA,MAAMpD,IAAN,KAAe,YAAxB,IAAwC,KAAKiK,KAAL,CAAW0F,OAAvD,EAAgE;;;;;WAK7DC,cAAH,CAAkBvR,IAAlB,CAAuB,IAAvB,EAA6B+E,KAA7B;KAzTG;;;;kBAAA,4BA6TU;YACT,CAAC,KAAKkH,SAAL,CAAef,EAApB,EAAwB;;;;;YAKlBsG,cAActW,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAc6P,OAAd,CAAsBK,QAAvC,CAApB;;;YAGI,CAACU,WAAD,IAAgB,KAAKxE,MAAL,CAAYyE,eAA5B,IAA+C,KAAK9B,MAAxD,EAAgE;eACzD0B,iBAAH,CAAqBrR,IAArB,CAA0B,IAA1B,EAAgC,KAAKY,QAAL,CAAc6P,OAAd,CAAsB9D,WAAtD,EAAmE,KAAKmE,QAAxE;;;;YAIAU,WAAJ,EAAiB;eACVH,iBAAH,CAAqBrR,IAArB,CAA0B,IAA1B,EAAgC,KAAKY,QAAL,CAAc6P,OAAd,CAAsBK,QAAtD,EAAgE,KAAKA,QAArE;;;;iBAIKY,iBAAT,CAA2B1R,IAA3B,CAAgC,IAAhC;;CAhVR;;ACbA;AACA;;AAWA,IAAMmL,YAAUjQ,MAAMkQ,UAAN,EAAhB;;AAEA,IAAM0C,WAAW;;mBAAA,2BAEG9L,MAFH,EAEW;;YAEdmK,QAAQjR,MAAMyD,EAAN,CAASoG,KAAT,CAAe/C,MAAf,IAAyBA,OAAOA,MAAhC,GAAyCA,MAAvD;;;YAGI,CAAC9G,MAAMyD,EAAN,CAASuC,OAAT,CAAiBiL,KAAjB,CAAD,IAA4BA,MAAM3F,YAAN,CAAmB,MAAnB,MAA+B,OAA/D,EAAwE;;;;;cAKlE9G,YAAN,CAAmB,eAAnB,EAAoCyM,MAAM1J,KAA1C;;;YAGI,CAAC0I,UAAQwG,QAAb,EAAuB;;;;;cAKjBtU,KAAN,CAAYuU,WAAZ,CAAwB,SAAxB,EAAsCzF,MAAM1J,KAAN,GAAc0J,MAAMrF,GAApB,GAA0B,GAAhE;KApBS;;;;cAAA,wBAwBA;YACHrJ,MAAM,IAAIoU,GAAJ,CAAQ,KAAK7E,MAAL,CAAY8E,OAApB,EAA6BzW,OAAO0W,QAApC,CAAZ;YACMC,OAAOvU,IAAIwU,IAAJ,KAAa5W,OAAO0W,QAAP,CAAgBE,IAA7B,IAAsC9G,UAAQ+G,IAAR,IAAgB,CAAC7W,OAAO8W,aAA3E;;eAEO;iBACE,KAAKnF,MAAL,CAAY8E,OADd;;SAAP;KA5BS;;;;;gBAAA,0BAoCE;YACP;iBACKlR,QAAL,CAAckN,QAAd,GAAyB5S,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsBM,QAAtB,CAA+BjN,OAA3D,CAAzB;;;iBAGKD,QAAL,CAAcuO,OAAd,GAAwB;sBACdjU,MAAMyJ,WAAN,CAAkB3E,IAAlB,CAAuB,IAAvB,EAA6B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BpC,IAA3D,CADc;uBAEb7R,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BiD,KAA1D,CAFa;yBAGXlX,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BkD,OAA1D,CAHW;wBAIZnX,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BmD,MAA1D,CAJY;6BAKPpX,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BoD,WAA1D,CALO;sBAMdrX,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BmB,IAA1D,CANc;qBAOfpV,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BV,GAA1D,CAPe;yBAQXvT,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BT,OAA1D,CARW;0BASVxT,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BqD,QAA1D,CATU;0BAUVtX,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BsD,QAA1D,CAVU;4BAWRvX,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BuD,UAA1D;aAXhB;;;iBAeK9R,QAAL,CAAc4P,QAAd,GAAyBtV,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsBgD,QAAlD,CAAzB;;;iBAGK5P,QAAL,CAAcwP,MAAd,GAAuB;sBACblV,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB4C,MAAtB,CAA6BW,IAAzD,CADa;wBAEX7V,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsB4C,MAAtB,CAA6BnC,MAAzD;aAFZ;;;iBAMKrN,QAAL,CAAc6P,OAAd,GAAwB;wBACZvV,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsBiD,OAAtB,CAA8BC,MAA1D,CADY;6BAEPxV,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsBiD,OAAtB,CAA8B9D,WAA1D,CAFO;0BAGVzR,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsBiD,OAAtB,CAA8BK,QAA1D;aAHd;;;gBAOI5V,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAc4P,QAA/B,CAAJ,EAA8C;qBACrC5P,QAAL,CAAc6P,OAAd,CAAsBkC,WAAtB,GAAoC,KAAK/R,QAAL,CAAc4P,QAAd,CAAuBjM,aAAvB,OAAyC,KAAKyI,MAAL,CAAYS,UAAZ,CAAuBmF,OAAhE,CAApC;;;mBAGG,IAAP;SAvCJ,CAwCE,OAAOzC,KAAP,EAAc;;iBAEPjD,KAAL,CAAWU,IAAX,CAAgB,iEAAhB,EAAmFuC,KAAnF;;;iBAGKtC,oBAAL,CAA0B,IAA1B;;mBAEO,KAAP;;KApFK;;;;cAAA,sBAyFFlM,IAzFE,EAyFIC,UAzFJ,EAyFgB;YACnBiR,YAAY,4BAAlB;YACMf,UAAUhE,SAASgF,UAAT,CAAoB9S,IAApB,CAAyB,IAAzB,CAAhB;YACM+S,YAAc,CAACjB,QAAQE,IAAT,GAAgBF,QAAQrU,GAAxB,GAA8B,EAA5C,UAAkD,KAAKuP,MAAL,CAAYgG,UAApE;;;YAGMC,OAAO/V,SAASgW,eAAT,CAAyBL,SAAzB,EAAoC,KAApC,CAAb;cACM/Q,aAAN,CACImR,IADJ,EAEI/X,MAAMuN,MAAN,CAAa7G,UAAb,EAAyB;kBACf,cADe;uBAEV;SAFf,CAFJ;;;YASMuR,MAAMjW,SAASgW,eAAT,CAAyBL,SAAzB,EAAoC,KAApC,CAAZ;YACMO,OAAUL,QAAV,SAAsBpR,IAA5B;;;;;YAKI,UAAUwR,GAAd,EAAmB;gBACXE,cAAJ,CAAmB,8BAAnB,EAAmD,MAAnD,EAA2DD,IAA3D;SADJ,MAEO;gBACCC,cAAJ,CAAmB,8BAAnB,EAAmD,YAAnD,EAAiED,IAAjE;;;;aAIC1R,WAAL,CAAiByR,GAAjB;;eAEOF,IAAP;KAxHS;;;;eAAA,uBA4HDtR,IA5HC,EA4HK2R,IA5HL,EA4HW;YAChBzR,OAAOuL,KAAK8B,GAAL,CAASvN,IAAT,EAAe,KAAKqL,MAApB,CAAX;YACMpL,aAAapG,OAAO2K,MAAP,CAAc,EAAd,EAAkBmN,IAAlB,CAAnB;;gBAEQ3R,IAAR;iBACS,KAAL;uBACW,KAAP;;;iBAGC,SAAL;uBACW,SAAP;;;;;;;YAOJ,WAAWC,UAAf,EAA2B;uBACZ2B,KAAX,UAAwB,KAAKyJ,MAAL,CAAYS,UAAZ,CAAuBjK,MAA/C;SADJ,MAEO;uBACQD,KAAX,GAAmB,KAAKyJ,MAAL,CAAYS,UAAZ,CAAuBjK,MAA1C;;;eAGGtI,MAAMsE,aAAN,CAAoB,MAApB,EAA4BoC,UAA5B,EAAwCC,IAAxC,CAAP;KAnJS;;;;eAAA,uBAuJDA,IAvJC,EAuJK;YACV3G,MAAMyD,EAAN,CAASyB,KAAT,CAAeyB,IAAf,CAAJ,EAA0B;mBACf,IAAP;;;YAGE0R,QAAQrY,MAAMsE,aAAN,CAAoB,MAApB,EAA4B;mBAC/B,KAAKwN,MAAL,CAAYS,UAAZ,CAAuB+F,IAAvB,CAA4B/Q;SADzB,CAAd;;cAIMf,WAAN,CACIxG,MAAMsE,aAAN,CACI,MADJ,EAEI;mBACW,KAAKwN,MAAL,CAAYS,UAAZ,CAAuB+F,IAAvB,CAA4BD;SAH3C,EAKI1R,IALJ,CADJ;;eAUO0R,KAAP;KA1KS;;;;gBAAA,wBA8KAE,UA9KA,EA8KYH,IA9KZ,EA8KkB;YACrBI,SAASxY,MAAMsE,aAAN,CAAoB,QAApB,CAAf;YACMoC,aAAapG,OAAO2K,MAAP,CAAc,EAAd,EAAkBmN,IAAlB,CAAnB;YACI3R,OAAOzG,MAAMyY,WAAN,CAAkBF,UAAlB,CAAX;;YAEI5P,SAAS,KAAb;YACIoL,cAAJ;YACIgE,aAAJ;YACIW,qBAAJ;YACIC,oBAAJ;;YAEI,EAAE,UAAUjS,UAAZ,CAAJ,EAA6B;uBACdD,IAAX,GAAkB,QAAlB;;;YAGA,WAAWC,UAAf,EAA2B;gBACnBA,WAAW2B,KAAX,CAAiBW,QAAjB,CAA0B,KAAK8I,MAAL,CAAYS,UAAZ,CAAuBqG,OAAjD,CAAJ,EAA+D;2BAChDvQ,KAAX,UAAwB,KAAKyJ,MAAL,CAAYS,UAAZ,CAAuBqG,OAA/C;;SAFR,MAIO;uBACQvQ,KAAX,GAAmB,KAAKyJ,MAAL,CAAYS,UAAZ,CAAuBqG,OAA1C;;;;gBAIIL,UAAR;iBACS,MAAL;yBACa,IAAT;wBACQ,MAAR;+BACe,OAAf;uBACO,MAAP;8BACc,OAAd;;;iBAGC,MAAL;yBACa,IAAT;wBACQ,MAAR;+BACe,QAAf;uBACO,QAAP;8BACc,OAAd;;;iBAGC,UAAL;yBACa,IAAT;wBACQ,gBAAR;+BACe,iBAAf;uBACO,cAAP;8BACc,aAAd;;;iBAGC,YAAL;yBACa,IAAT;wBACQ,iBAAR;+BACe,gBAAf;uBACO,kBAAP;8BACc,iBAAd;;;iBAGC,YAAL;2BACelQ,KAAX,UAAwB,KAAKyJ,MAAL,CAAYS,UAAZ,CAAuBqG,OAA/C;uBACO,MAAP;wBACQ,MAAR;uBACO,MAAP;;;;wBAIQnS,IAAR;uBACO8R,UAAP;;;;YAIJ5P,MAAJ,EAAY;;mBAEDnC,WAAP,CAAmBoM,SAASiG,UAAT,CAAoB/T,IAApB,CAAyB,IAAzB,EAA+B6T,WAA/B,EAA4C,EAAEtQ,OAAO,eAAT,EAA5C,CAAnB;mBACO7B,WAAP,CAAmBoM,SAASiG,UAAT,CAAoB/T,IAApB,CAAyB,IAAzB,EAA+BiT,IAA/B,EAAqC,EAAE1P,OAAO,mBAAT,EAArC,CAAnB;;;mBAGO7B,WAAP,CAAmBoM,SAASkG,WAAT,CAAqBhU,IAArB,CAA0B,IAA1B,EAAgC4T,YAAhC,EAA8C,EAAErQ,OAAO,gBAAT,EAA9C,CAAnB;mBACO7B,WAAP,CAAmBoM,SAASkG,WAAT,CAAqBhU,IAArB,CAA0B,IAA1B,EAAgCiP,KAAhC,EAAuC,EAAE1L,OAAO,oBAAT,EAAvC,CAAnB;;;uBAGW,cAAX,IAA6B,KAA7B;SAVJ,MAWO;mBACI7B,WAAP,CAAmBoM,SAASiG,UAAT,CAAoB/T,IAApB,CAAyB,IAAzB,EAA+BiT,IAA/B,CAAnB;mBACOvR,WAAP,CAAmBoM,SAASkG,WAAT,CAAqBhU,IAArB,CAA0B,IAA1B,EAAgCiP,KAAhC,CAAnB;;;;cAIExG,MAAN,CAAa7G,UAAb,EAAyB1G,MAAM+Y,yBAAN,CAAgC,KAAKjH,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BxN,IAA9B,CAAhC,EAAqEC,UAArE,CAAzB;;cAEME,aAAN,CAAoB4R,MAApB,EAA4B9R,UAA5B;;;YAGID,SAAS,MAAb,EAAqB;gBACb,CAACzG,MAAMyD,EAAN,CAAS/B,KAAT,CAAe,KAAKgE,QAAL,CAAcuO,OAAd,CAAsBxN,IAAtB,CAAf,CAAL,EAAkD;qBACzCf,QAAL,CAAcuO,OAAd,CAAsBxN,IAAtB,IAA8B,EAA9B;;;iBAGCf,QAAL,CAAcuO,OAAd,CAAsBxN,IAAtB,EAA4BuS,IAA5B,CAAiCR,MAAjC;SALJ,MAMO;iBACE9S,QAAL,CAAcuO,OAAd,CAAsBxN,IAAtB,IAA8B+R,MAA9B;;;eAGGA,MAAP;KApRS;;;;eAAA,uBAwRD/R,IAxRC,EAwRKC,UAxRL,EAwRiB;;YAEpBqN,QAAQ/T,MAAMsE,aAAN,CACV,OADU,EAEV;iBACSoC,WAAWlD,EADpB;gBAEWkD,WAAWlD,EAAlB,WAFJ;mBAGW,KAAKsO,MAAL,CAAYS,UAAZ,CAAuBjK;SALxB,EAOV4J,KAAK8B,GAAL,CAASvN,IAAT,EAAe,KAAKqL,MAApB,CAPU,CAAd;;;YAWM7R,QAAQD,MAAMsE,aAAN,CACV,OADU,EAEVtE,MAAMuN,MAAN,CACIvN,MAAM+Y,yBAAN,CAAgC,KAAKjH,MAAL,CAAYQ,SAAZ,CAAsB4C,MAAtB,CAA6BzO,IAA7B,CAAhC,CADJ,EAEI;kBACU,OADV;iBAES,CAFT;iBAGS,GAHT;kBAIU,IAJV;mBAKW,CALX;0BAMkB,KANlB;;kBAQU,QARV;+BAS0BC,WAAWlD,EAAjC,WATJ;6BAUqB,CAVrB;6BAWqB,GAXrB;6BAYqB;SAdzB,EAgBIkD,UAhBJ,CAFU,CAAd;;aAsBKhB,QAAL,CAAcwP,MAAd,CAAqBzO,IAArB,IAA6BxG,KAA7B;;;iBAGSoV,eAAT,CAAyBvQ,IAAzB,CAA8B,IAA9B,EAAoC7E,KAApC;;eAEO;wBAAA;;SAAP;KAhUS;;;;kBAAA,0BAuUEwG,IAvUF,EAuUQC,UAvUR,EAuUoB;YACvB4O,WAAWtV,MAAMsE,aAAN,CACb,UADa,EAEbtE,MAAMuN,MAAN,CACIvN,MAAM+Y,yBAAN,CAAgC,KAAKjH,MAAL,CAAYQ,SAAZ,CAAsBiD,OAAtB,CAA8B9O,IAA9B,CAAhC,CADJ,EAEI;iBACS,CADT;iBAES,GAFT;mBAGW,CAHX;kBAIU,cAJV;2BAKmB;SAPvB,EASIC,UATJ,CAFa,CAAjB;;;YAgBID,SAAS,QAAb,EAAuB;qBACVD,WAAT,CAAqBxG,MAAMsE,aAAN,CAAoB,MAApB,EAA4B,IAA5B,EAAkC,GAAlC,CAArB;;gBAEI2U,SAAS,EAAb;oBACQxS,IAAR;qBACS,QAAL;6BACayL,KAAK8B,GAAL,CAAS,QAAT,EAAmB,KAAKlC,MAAxB,CAAT;;;qBAGC,QAAL;6BACaI,KAAK8B,GAAL,CAAS,UAAT,EAAqB,KAAKlC,MAA1B,CAAT;;;;;;;qBAOCjL,WAAT,UAA4BoS,OAAOjM,WAAP,EAA5B;;;aAGCtH,QAAL,CAAc6P,OAAd,CAAsB9O,IAAtB,IAA8B6O,QAA9B;;eAEOA,QAAP;KA9WS;;;;cAAA,sBAkXF7O,IAlXE,EAkXI;YACPC,aAAa1G,MAAM+Y,yBAAN,CAAgC,KAAKjH,MAAL,CAAYQ,SAAZ,CAAsBiD,OAAtB,CAA8B9O,IAA9B,CAAhC,CAAnB;;YAEMpC,YAAYrE,MAAMsE,aAAN,CAAoB,KAApB,EAA2BtE,MAAMuN,MAAN,CAAa7G,UAAb,EAAyB;mCAC7CA,WAAW2B,KADkC;0BAEpD6J,KAAK8B,GAAL,CAASvN,IAAT,EAAe,KAAKqL,MAApB;SAF2B,CAA3B,EAGd,OAHc,CAAlB;;;aAMKpM,QAAL,CAAc6P,OAAd,CAAsB9O,IAAtB,IAA8BpC,SAA9B;;eAEOA,SAAP;KA7XS;;;;kBAAA,0BAiYEkD,KAjYF,EAiYS2R,IAjYT,EAiYezS,IAjYf,EAiYqB2L,KAjYrB,EAiY2D;YAA/BiG,KAA+B,uEAAvB,IAAuB;YAAjBc,OAAiB,uEAAP,KAAO;;YAC9D1L,OAAOzN,MAAMsE,aAAN,CAAoB,IAApB,CAAb;;YAEMyP,QAAQ/T,MAAMsE,aAAN,CAAoB,OAApB,EAA6B;mBAChC,KAAKwN,MAAL,CAAYS,UAAZ,CAAuBqG;SADpB,CAAd;;YAIMQ,QAAQpZ,MAAMsE,aAAN,CACV,OADU,EAEVtE,MAAMuN,MAAN,CAAavN,MAAM+Y,yBAAN,CAAgC,KAAKjH,MAAL,CAAYQ,SAAZ,CAAsB4C,MAAtB,CAA6BzO,IAA7B,CAAhC,CAAb,EAAkF;kBACxE,OADwE;4BAEhEA,IAFgE;wBAAA;4BAAA;mBAKvE;SALX,CAFU,CAAd;;YAWM4S,OAAOrZ,MAAMsE,aAAN,CAAoB,MAApB,EAA4B,EAAEgE,QAAQ,EAAV,EAA5B,CAAb;;cAEM9B,WAAN,CAAkB4S,KAAlB;cACM5S,WAAN,CAAkB6S,IAAlB;cACMC,kBAAN,CAAyB,WAAzB,EAAsClH,KAAtC;;YAEIpS,MAAMyD,EAAN,CAASuC,OAAT,CAAiBqS,KAAjB,CAAJ,EAA6B;kBACnB7R,WAAN,CAAkB6R,KAAlB;;;aAGC7R,WAAL,CAAiBuN,KAAjB;aACKvN,WAAL,CAAiBiH,IAAjB;KA9ZS;;;;qBAAA,6BAkaK5D,KAlaL,EAkaY;;;;YAGjB,CAAC,KAAKiI,MAAL,CAAYyH,QAAZ,CAAqB1D,IAAtB,IACA,CAAC7V,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAcwP,MAAd,CAAqBW,IAAtC,CADD,IAEA,CAAC7V,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAc6P,OAAd,CAAsBkC,WAAvC,CAFD,IAGA,KAAK7B,QAAL,KAAkB,CAJtB,EAKE;;;;;YAKE4D,UAAU,CAAd;YACMC,aAAa,KAAK/T,QAAL,CAAcwP,MAAd,CAAqBW,IAArB,CAA0B6D,qBAA1B,EAAnB;YACMC,UAAa,KAAK7H,MAAL,CAAYS,UAAZ,CAAuBmF,OAApC,cAAN;;YAEM/O,SAAS,yBAAU;kBACf0J,WAAN,CAAkB,MAAK3M,QAAL,CAAc6P,OAAd,CAAsBkC,WAAxC,EAAqDkC,OAArD,EAA8DhR,OAA9D;SADJ;;;YAKI,KAAKgL,KAAT,EAAgB;mBACL,KAAP;;;;;YAKA3T,MAAMyD,EAAN,CAASoG,KAAT,CAAeA,KAAf,CAAJ,EAA2B;sBACb,MAAM4P,WAAWrK,KAAjB,IAA0BvF,MAAM+P,KAAN,GAAcH,WAAWI,IAAnD,CAAV;SADJ,MAEO,IAAI7Z,MAAM8Z,QAAN,CAAe,KAAKpU,QAAL,CAAc6P,OAAd,CAAsBkC,WAArC,EAAkDkC,OAAlD,CAAJ,EAAgE;sBACzDI,WAAW,KAAKrU,QAAL,CAAc6P,OAAd,CAAsBkC,WAAtB,CAAkCtV,KAAlC,CAAwC0X,IAAnD,EAAyD,EAAzD,CAAV;SADG,MAEA;;;;;YAKHL,UAAU,CAAd,EAAiB;sBACH,CAAV;SADJ,MAEO,IAAIA,UAAU,GAAd,EAAmB;sBACZ,GAAV;;;;WAIDrD,iBAAH,CAAqBrR,IAArB,CAA0B,IAA1B,EAAgC,KAAKY,QAAL,CAAc6P,OAAd,CAAsBkC,WAAtD,EAAmE,KAAK7B,QAAL,GAAgB,GAAhB,GAAsB4D,OAAzF;;;aAGK9T,QAAL,CAAc6P,OAAd,CAAsBkC,WAAtB,CAAkCtV,KAAlC,CAAwC0X,IAAxC,GAAkDL,OAAlD;;;;YAIIxZ,MAAMyD,EAAN,CAASoG,KAAT,CAAeA,KAAf,KAAyB,CACzB,YADyB,EAEzB,YAFyB,EAG3Bb,QAH2B,CAGlBa,MAAMpD,IAHY,CAA7B,EAGwB;mBACboD,MAAMpD,IAAN,KAAe,YAAtB;;KAxdK;;;;aAAA,qBA6dHuT,OA7dG,EA6dMrR,MA7dN,EA6dc;cACjBpE,YAAN,CAAmB,KAAKmB,QAAL,CAAc4R,QAAd,CAAuB2C,IAAvB,CAA4BD,OAA5B,CAAnB,EAAyD,CAACrR,MAA1D;KA9dS;;;;;kBAAA,0BAmeEiC,OAneF,EAmeW;;;;YAEhB,CAAC5K,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAc4R,QAAd,CAAuB4C,KAAvB,CAA6B/G,OAA9C,CAAL,EAA6D;;;;YAIvD1M,OAAO,SAAb;YACMyS,OAAO,KAAKxT,QAAL,CAAc4R,QAAd,CAAuB4C,KAAvB,CAA6B/G,OAA7B,CAAqC9J,aAArC,CAAmD,IAAnD,CAAb;;;YAGIrJ,MAAMyD,EAAN,CAAS/B,KAAT,CAAekJ,OAAf,CAAJ,EAA6B;iBACpBA,OAAL,CAAauI,OAAb,GAAuBvI,QAAQ4C,MAAR,CAAe;uBAAW,OAAKsE,MAAL,CAAYqB,OAAZ,CAAoBvI,OAApB,CAA4B5B,QAA5B,CAAqCmK,OAArC,CAAX;aAAf,CAAvB;;;;YAIExK,SAAS,CAAC3I,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAK0F,OAAL,CAAauI,OAA5B,CAAD,IAAyC,KAAKvI,OAAL,CAAauI,OAAb,CAAqBvR,MAArB,GAA8B,CAAtF;iBACSuY,SAAT,CAAmBrV,IAAnB,CAAwB,IAAxB,EAA8B2B,IAA9B,EAAoCkC,MAApC;;;iBAGSyR,SAAT,CAAmBtV,IAAnB,CAAwB,IAAxB;;;YAGI,CAAC6D,MAAL,EAAa;;;;;cAKP0R,YAAN,CAAmBnB,IAAnB;;;YAGMoB,WAAW,SAAXA,QAAW,UAAW;gBACpBvG,QAAQ,EAAZ;;oBAEQZ,OAAR;qBACS,IAAL;4BACY,IAAR;;;qBAGC,IAAL;qBACK,IAAL;qBACK,GAAL;4BACY,IAAR;;;qBAGC,GAAL;4BACY,IAAR;;;;;;;gBAOJ,CAACY,MAAMnS,MAAX,EAAmB;uBACR,IAAP;;;mBAGGgR,SAAS2H,WAAT,CAAqBzV,IAArB,SAAgCiP,KAAhC,CAAP;SA1BJ;;;aA8BKnJ,OAAL,CAAauI,OAAb,CACKqH,IADL,CACU,UAACC,CAAD,EAAIC,CAAJ,EAAU;gBACNC,UAAU,OAAK7I,MAAL,CAAYqB,OAAZ,CAAoBvI,OAApC;mBACO+P,QAAQjN,OAAR,CAAgB+M,CAAhB,IAAqBE,QAAQjN,OAAR,CAAgBgN,CAAhB,CAArB,GAA0C,CAA1C,GAA8C,CAAC,CAAtD;SAHR,EAKK3U,OALL,CAKa,mBAAW;gBACVgO,QAAQnB,SAASgI,QAAT,CAAkB9V,IAAlB,SAA6B,SAA7B,EAAwCqO,OAAxC,CAAd;qBACS0H,cAAT,CAAwB/V,IAAxB,SAAmCqO,OAAnC,EAA4C+F,IAA5C,EAAkDzS,IAAlD,EAAwDsN,KAAxD,EAA+DuG,SAASnH,OAAT,CAA/D;SAPR;;iBAUS2H,aAAT,CAAuBhW,IAAvB,CAA4B,IAA5B,EAAkC2B,IAAlC,EAAwCyS,IAAxC;KAziBS;;;;;YAAA,oBA8iBJc,OA9iBI,EA8iBKzS,KA9iBL,EA8iBY;gBACbyS,OAAR;iBACS,OAAL;uBACWzS,UAAU,CAAV,GAAc2K,KAAK8B,GAAL,CAAS,QAAT,EAAmB,KAAKlC,MAAxB,CAAd,GAAmDvK,KAAnD,YAAP;;iBAEC,SAAL;oBACQvH,MAAMyD,EAAN,CAASyI,MAAT,CAAgB3E,KAAhB,CAAJ,EAA4B;2BACdA,KAAV;;;uBAGGvH,MAAMkN,WAAN,CAAkB3F,KAAlB,CAAP;;iBAEC,UAAL;uBACWgQ,SAASqD,QAAT,CAAkB9V,IAAlB,CAAuB,IAAvB,CAAP;;;uBAGO,IAAP;;KA9jBC;;;;iBAAA,yBAmkBCkV,OAnkBD,EAmkBU3V,SAnkBV,EAmkBqBpE,KAnkBrB,EAmkB4B;YAC/B8a,OAAO,KAAKrV,QAAL,CAAc4R,QAAd,CAAuB4C,KAAvB,CAA6BF,OAA7B,CAAb;YACIzS,QAAQ,IAAZ;YACI2R,OAAO7U,SAAX;;gBAEQ2V,OAAR;iBACS,UAAL;oBACQ,KAAKzC,QAAL,CAAcyD,MAAlB,EAA0B;wBAClB,KAAKpQ,OAAL,CAAa2M,QAAb,CAAsB3V,MAAtB,GAA+B,CAA/B,IAAoC,CAAC,KAAKgJ,OAAL,CAAa2M,QAAb,CAAsB0D,IAAtB,CAA2B;+BAAQC,SAAS,SAAjB;qBAA3B,CAAzC,EAAiG;gCACrF,KAAK3D,QAAL,CAAc4D,QAAtB;qBADJ,MAEO;gCACK,SAAR;;iBAJR,MAMO;4BACK,EAAR;;;;;;wBAMI,CAACnb,MAAMyD,EAAN,CAASyB,KAAT,CAAejF,KAAf,CAAD,GAAyBA,KAAzB,GAAiC,KAAK+Z,OAAL,CAAzC;;;oBAGIha,MAAMyD,EAAN,CAASyB,KAAT,CAAeqC,KAAf,CAAJ,EAA2B;4BACf,KAAKuK,MAAL,CAAYkI,OAAZ,EAAqBoB,OAA7B;;;;oBAIA,CAACpb,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAK0F,OAAL,CAAaoP,OAAb,CAAf,CAAD,IAA0C,CAAC,KAAKpP,OAAL,CAAaoP,OAAb,EAAsBhR,QAAtB,CAA+BzB,KAA/B,CAA/C,EAAsF;yBAC7EyK,KAAL,CAAWU,IAAX,6BAAyCnL,KAAzC,eAAuDyS,OAAvD;;;;;oBAKA,CAAC,KAAKlI,MAAL,CAAYkI,OAAZ,EAAqBpP,OAArB,CAA6B5B,QAA7B,CAAsCzB,KAAtC,CAAL,EAAmD;yBAC1CyK,KAAL,CAAWU,IAAX,0BAAsCnL,KAAtC,eAAoDyS,OAApD;;;;;;;;YAQR,CAACha,MAAMyD,EAAN,CAASuC,OAAT,CAAiBkT,IAAjB,CAAL,EAA6B;mBAClB6B,QAAQA,KAAK1R,aAAL,CAAmB,IAAnB,CAAf;;;;YAIA,CAACrJ,MAAMyD,EAAN,CAASuC,OAAT,CAAiBkT,IAAjB,CAAL,EAA6B;;;;;YAKvBnF,QAAQ,KAAKrO,QAAL,CAAc4R,QAAd,CAAuB2C,IAAvB,CAA4BD,OAA5B,EAAqC3Q,aAArC,OAAuD,KAAKyI,MAAL,CAAYS,UAAZ,CAAuB+F,IAAvB,CAA4B/Q,KAAnF,CAAd;cACMtD,SAAN,GAAkB2O,SAASgI,QAAT,CAAkB9V,IAAlB,CAAuB,IAAvB,EAA6BkV,OAA7B,EAAsCzS,KAAtC,CAAlB;;;YAGMT,SAASoS,QAAQA,KAAK7P,aAAL,mBAAmC9B,KAAnC,QAAvB;;YAEIvH,MAAMyD,EAAN,CAASuC,OAAT,CAAiBc,MAAjB,CAAJ,EAA8B;mBACnBqS,OAAP,GAAiB,IAAjB;;KA/nBK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAA,6BAmrBK;;;;YAER1S,OAAO,UAAb;YACMyS,OAAO,KAAKxT,QAAL,CAAc4R,QAAd,CAAuB4C,KAAvB,CAA6B3C,QAA7B,CAAsClO,aAAtC,CAAoD,IAApD,CAAb;;;YAGMV,SAAS4O,SAAS8D,SAAT,CAAmBvW,IAAnB,CAAwB,IAAxB,EAA8BlD,MAA7C;iBACSuY,SAAT,CAAmBrV,IAAnB,CAAwB,IAAxB,EAA8B2B,IAA9B,EAAoCkC,MAApC;;;cAGM0R,YAAN,CAAmBnB,IAAnB;;;iBAGSkB,SAAT,CAAmBtV,IAAnB,CAAwB,IAAxB;;;YAGI,CAAC6D,MAAL,EAAa;;;;;YAKP2S,SAAS/D,SAAS8D,SAAT,CAAmBvW,IAAnB,CAAwB,IAAxB,EAA8B+J,GAA9B,CAAkC;mBAAU;0BAC7C,CAAC7O,MAAMyD,EAAN,CAASyB,KAAT,CAAeqW,MAAMJ,QAArB,CAAD,GAAkCI,MAAMJ,QAAxC,GAAmD,SADN;uBAEhD5D,SAASqD,QAAT,CAAkB9V,IAAlB,SAA6ByW,KAA7B;aAFsC;SAAlC,CAAf;;;eAMOC,OAAP,CAAe;sBACD,EADC;mBAEJtJ,KAAK8B,GAAL,CAAS,UAAT,EAAqB,KAAKlC,MAA1B;SAFX;;;eAMO/L,OAAP,CAAe,iBAAS;qBACX8U,cAAT,CAAwB/V,IAAxB,SAEIyW,MAAMJ,QAFV,EAGIjC,IAHJ,EAII,UAJJ,EAKIqC,MAAMxH,KALV,EAMIwH,MAAMJ,QAAN,KAAmB,SAAnB,GAA+BvI,SAAS2H,WAAT,CAAqBzV,IAArB,SAAgCyW,MAAMJ,QAAN,CAAerO,WAAf,EAAhC,CAA/B,GAA+F,IANnG,EAOIyO,MAAMJ,QAAN,CAAenO,WAAf,OAAiC,OAAKuK,QAAL,CAAc4D,QAAd,CAAuBnO,WAAvB,EAPrC;SADJ;;;aAaKpC,OAAL,CAAa2M,QAAb,GAAwB+D,OAAOzM,GAAP,CAAW;mBAAS0M,MAAMJ,QAAf;SAAX,CAAxB;;iBAESL,aAAT,CAAuBhW,IAAvB,CAA4B,IAA5B,EAAkC2B,IAAlC,EAAwCyS,IAAxC;KAnuBS;;;;gBAAA,wBAuuBAtO,OAvuBA,EAuuBS;;;;YAEd,CAAC,KAAKkH,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,UAA9B,CAAD,IAA8C,CAAC,KAAK8I,MAAL,CAAYwF,QAAZ,CAAqBtO,QAArB,CAA8B,OAA9B,CAAnD,EAA2F;;;;;YAKvF,CAAChJ,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAc4R,QAAd,CAAuB4C,KAAvB,CAA6BjH,KAA9C,CAAL,EAA2D;;;;YAIrDxM,OAAO,OAAb;;;YAGIzG,MAAMyD,EAAN,CAAS/B,KAAT,CAAekJ,OAAf,CAAJ,EAA6B;iBACpBA,OAAL,CAAaqI,KAAb,GAAqBrI,OAArB;SADJ,MAEO,IAAI,KAAK+F,OAAL,IAAgB,KAAK8K,OAAzB,EAAkC;iBAChC7Q,OAAL,CAAaqI,KAAb,GAAqB,CACjB,GADiB,EAEjB,IAFiB,EAGjB,CAHiB,EAIjB,IAJiB,EAKjB,GALiB,EAMjB,IANiB,EAOjB,CAPiB,CAArB;;;;aAYCrI,OAAL,CAAaqI,KAAb,GAAqB,KAAKrI,OAAL,CAAaqI,KAAb,CAAmBzF,MAAnB,CAA0B;mBAAS,OAAKsE,MAAL,CAAYmB,KAAZ,CAAkBrI,OAAlB,CAA0B5B,QAA1B,CAAmCiK,KAAnC,CAAT;SAA1B,CAArB;;;YAGMtK,SAAS,CAAC3I,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAK0F,OAAL,CAAaqI,KAA5B,CAAD,IAAuC,KAAKrI,OAAL,CAAaqI,KAAb,CAAmBrR,MAAnB,GAA4B,CAAlF;iBACSuY,SAAT,CAAmBrV,IAAnB,CAAwB,IAAxB,EAA8B2B,IAA9B,EAAoCkC,MAApC;;;iBAGSyR,SAAT,CAAmBtV,IAAnB,CAAwB,IAAxB;;;YAGI,CAAC6D,MAAL,EAAa;;;;;YAKPuQ,OAAO,KAAKxT,QAAL,CAAc4R,QAAd,CAAuB4C,KAAvB,CAA6BjH,KAA7B,CAAmC5J,aAAnC,CAAiD,IAAjD,CAAb;;;cAGMgR,YAAN,CAAmBnB,IAAnB;;;aAGKtO,OAAL,CAAaqI,KAAb,CAAmBlN,OAAnB,CAA2B,iBAAS;gBAC1BgO,QAAQnB,SAASgI,QAAT,CAAkB9V,IAAlB,SAA6B,OAA7B,EAAsCmO,KAAtC,CAAd;qBACS4H,cAAT,CAAwB/V,IAAxB,SAAmCmO,KAAnC,EAA0CiG,IAA1C,EAAgDzS,IAAhD,EAAsDsN,KAAtD;SAFJ;;iBAKS+G,aAAT,CAAuBhW,IAAvB,CAA4B,IAA5B,EAAkC2B,IAAlC,EAAwCyS,IAAxC;KA9xBS;;;;aAAA,uBAkyBD;YACAe,IADA,GACS,KAAKvU,QAAL,CAAc4R,QADvB,CACA2C,IADA;;YAEFN,UAAU,CAAC3Z,MAAMyD,EAAN,CAASyB,KAAT,CAAe+U,IAAf,CAAD,IAAyB3Z,OAAOob,MAAP,CAAczB,IAAd,EAAoBgB,IAApB,CAAyB;mBAAO,CAACU,IAAIrT,MAAZ;SAAzB,CAAzC;;cAEM/D,YAAN,CAAmB,KAAKmB,QAAL,CAAc4R,QAAd,CAAuBgB,IAA1C,EAAgD,CAACqB,OAAjD;KAtyBS;;;;cAAA,sBA0yBF9P,KA1yBE,EA0yBK;YACN+R,IADM,GACG,KAAKlW,QAAL,CAAc4R,QADjB,CACNsE,IADM;;YAERpD,SAAS,KAAK9S,QAAL,CAAcuO,OAAd,CAAsBqD,QAArC;;;YAGI,CAACtX,MAAMyD,EAAN,CAASuC,OAAT,CAAiB4V,IAAjB,CAAD,IAA2B,CAAC5b,MAAMyD,EAAN,CAASuC,OAAT,CAAiBwS,MAAjB,CAAhC,EAA0D;;;;YAIpDqD,OAAO7b,MAAMyD,EAAN,CAAS+E,OAAT,CAAiBqB,KAAjB,IAA0BA,KAA1B,GAAkC7J,MAAMyD,EAAN,CAASuC,OAAT,CAAiB4V,IAAjB,KAA0BA,KAAKnT,YAAL,CAAkB,QAAlB,CAAzE;;YAEIzI,MAAMyD,EAAN,CAASoG,KAAT,CAAeA,KAAf,CAAJ,EAA2B;gBACjBiS,aAAa9b,MAAMyD,EAAN,CAASuC,OAAT,CAAiB4V,IAAjB,KAA0BA,KAAKhT,QAAL,CAAciB,MAAM/C,MAApB,CAA7C;gBACMiV,WAAWlS,MAAM/C,MAAN,KAAiB,KAAKpB,QAAL,CAAcuO,OAAd,CAAsBqD,QAAxD;;;;;gBAKIwE,cAAe,CAACA,UAAD,IAAe,CAACC,QAAhB,IAA4BF,IAA/C,EAAsD;;;;;gBAKlDE,QAAJ,EAAc;sBACJC,eAAN;;;;;YAKJhc,MAAMyD,EAAN,CAASuC,OAAT,CAAiBwS,MAAjB,CAAJ,EAA8B;mBACnBhU,YAAP,CAAoB,eAApB,EAAqCqX,IAArC;;;YAGA7b,MAAMyD,EAAN,CAASuC,OAAT,CAAiB4V,IAAjB,CAAJ,EAA4B;kBAClBrX,YAAN,CAAmBqX,IAAnB,EAAyB,CAACC,IAA1B;kBACMxJ,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuB+F,IAAvB,CAA4BhV,IAAvE,EAA6EuY,IAA7E;;gBAEIA,IAAJ,EAAU;qBACDnT,eAAL,CAAqB,UAArB;aADJ,MAEO;qBACElE,YAAL,CAAkB,UAAlB,EAA8B,CAAC,CAA/B;;;KAl1BC;;;;cAAA,sBAw1BFmX,GAx1BE,EAw1BG;YACNM,QAAQN,IAAIxV,SAAJ,CAAc,IAAd,CAAd;cACMhE,KAAN,CAAY+Z,QAAZ,GAAuB,UAAvB;cACM/Z,KAAN,CAAYga,OAAZ,GAAsB,CAAtB;cACMzT,eAAN,CAAsB,QAAtB;;;cAGM7C,IAAN,CAAWoW,MAAMnY,gBAAN,CAAuB,aAAvB,CAAX,EAAkDiC,OAAlD,CAA0D,iBAAS;gBACzDqW,OAAOnc,MAAMqL,YAAN,CAAmB,MAAnB,CAAb;kBACM9G,YAAN,CAAmB,MAAnB,EAA8B4X,IAA9B;SAFJ;;;YAMI/V,UAAJ,CAAeG,WAAf,CAA2ByV,KAA3B;;;YAGM7M,QAAQ6M,MAAMI,WAApB;YACMhN,SAAS4M,MAAMK,YAArB;;;cAGMvV,aAAN,CAAoBkV,KAApB;;eAEO;wBAAA;;SAAP;KA92BS;;;;WAAA,qBAq3BQ;YAAbnV,MAAa,uEAAJ,EAAI;YACTwR,IADS,GACA,KAAK5S,QAAL,CAAc4R,QADd,CACTgB,IADS;;YAEXyC,OAAO/Y,SAASua,cAAT,CAAwBzV,MAAxB,CAAb;;;YAGI,CAAC9G,MAAMyD,EAAN,CAASuC,OAAT,CAAiB+U,IAAjB,CAAL,EAA6B;;;;;YAKvByB,QAAQzB,KAAKzP,YAAL,CAAkB,MAAlB,MAA8B,UAA5C;YACI,CAACkR,KAAL,EAAY;;;;;;YAMN7Q,UAAU2M,KAAKjP,aAAL,CAAmB,iCAAnB,CAAhB;YACMhF,YAAYsH,QAAQtF,UAA1B;;;cAGMR,IAAN,CAAWyS,KAAKxU,gBAAL,sBAAyC6H,QAAQL,YAAR,CAAqB,IAArB,CAAzC,QAAX,EAAqFvF,OAArF,CAA6F,kBAAU;mBAC5FvB,YAAP,CAAoB,eAApB,EAAqC,KAArC;SADJ;;;YAKIC,QAAQgY,WAAR,IAAuB,CAAChY,QAAQiY,aAApC,EAAmD;;sBAErCva,KAAV,CAAgBiN,KAAhB,GAA2BzD,QAAQ0Q,WAAnC;sBACUla,KAAV,CAAgBkN,MAAhB,GAA4B1D,QAAQ2Q,YAApC;;;gBAGMK,OAAO/J,SAASgK,UAAT,CAAoB9X,IAApB,CAAyB,IAAzB,EAA+BiW,IAA/B,CAAb;;;gBAGM8B,UAAU,SAAVA,OAAU,IAAK;;oBAEb3Z,EAAE4D,MAAF,KAAazC,SAAb,IAA0B,CAAC,CAC3B,OAD2B,EAE3B,QAF2B,EAG7B2E,QAH6B,CAGpB9F,EAAE4Z,YAHkB,CAA/B,EAG4B;;;;;0BAKlB3a,KAAV,CAAgBiN,KAAhB,GAAwB,EAAxB;0BACUjN,KAAV,CAAgBkN,MAAhB,GAAyB,EAAzB;;;sBAGMjF,GAAN,CAAU/F,SAAV,EAAqBrE,MAAM0P,kBAA3B,EAA+CmN,OAA/C;aAdJ;;;kBAkBM1S,EAAN,CAAS9F,SAAT,EAAoBrE,MAAM0P,kBAA1B,EAA8CmN,OAA9C;;;sBAGU1a,KAAV,CAAgBiN,KAAhB,GAA2BuN,KAAKvN,KAAhC;sBACUjN,KAAV,CAAgBkN,MAAhB,GAA4BsN,KAAKtN,MAAjC;;;;cAIE9K,YAAN,CAAmBoH,OAAnB,EAA4B,IAA5B;gBACQnH,YAAR,CAAqB,UAArB,EAAiC,CAAC,CAAlC;;;cAGMD,YAAN,CAAmBwW,IAAnB,EAAyB,KAAzB;;YAEMd,OAAOja,MAAMyJ,WAAN,CAAkB3E,IAAlB,CAAuB,IAAvB,uBAAgDgC,MAAhD,QAAb;cACMjB,IAAN,CAAWoU,IAAX,EAAiBlU,OAAjB,CAAyB,eAAO;gBACxBvB,YAAJ,CAAiB,eAAjB,EAAkC,IAAlC;SADJ;aAGKkE,eAAL,CAAqB,UAArB;;;aAGK5E,gBAAL,CAAsB,yDAAtB,EAAiF,CAAjF,EAAoFmG,KAApF;KA/7BS;;;;;UAAA,kBAo8BNjG,IAp8BM,EAo8BA;;;;YAELhE,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAK4M,MAAL,CAAYc,QAA3B,CAAJ,EAA0C;mBAC/B,IAAP;;;;YAIEvO,YAAYrE,MAAMsE,aAAN,CAAoB,KAApB,EAA2BtE,MAAM+Y,yBAAN,CAAgC,KAAKjH,MAAL,CAAYQ,SAAZ,CAAsBM,QAAtB,CAA+BjN,OAA/D,CAA3B,CAAlB;;;YAGI,KAAKmM,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,SAA9B,CAAJ,EAA8C;sBAChCxC,WAAV,CAAsBoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;sBAC/BxC,WAAV,CAAsBoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,QAAjC,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;sBAC7BxC,WAAV,CAAsBoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;sBACrCxC,WAAV,CAAsBoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,cAAjC,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;gBACrCsM,WAAWtV,MAAMsE,aAAN,CAAoB,KAApB,EAA2BtE,MAAM+Y,yBAAN,CAAgC,KAAKjH,MAAL,CAAYQ,SAAZ,CAAsBgD,QAAtD,CAA3B,CAAjB;;;gBAGMO,OAAOjD,SAASoK,WAAT,CAAqBlY,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC;mCAChCd,KAAKR;aADb,CAAb;qBAGSgD,WAAT,CAAqBqP,KAAK9B,KAA1B;qBACSvN,WAAT,CAAqBqP,KAAK5V,KAA1B;;;qBAGSuG,WAAT,CAAqBoM,SAASqK,cAAT,CAAwBnY,IAAxB,CAA6B,IAA7B,EAAmC,QAAnC,CAArB;;;;;gBAKI,KAAKgN,MAAL,CAAYyH,QAAZ,CAAqB1D,IAAzB,EAA+B;oBACrB6B,UAAU1X,MAAMsE,aAAN,CACZ,MADY,EAEZ;0BACU,SADV;2BAEW,KAAKwN,MAAL,CAAYS,UAAZ,CAAuBmF;iBAJtB,EAMZ,OANY,CAAhB;;yBASSlR,WAAT,CAAqBkR,OAArB;qBACKhS,QAAL,CAAc6P,OAAd,CAAsBkC,WAAtB,GAAoCC,OAApC;;;iBAGChS,QAAL,CAAc4P,QAAd,GAAyBA,QAAzB;sBACU9O,WAAV,CAAsB,KAAKd,QAAL,CAAc4P,QAApC;;;;YAIA,KAAKxD,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;sBACrCxC,WAAV,CAAsBoM,SAASsK,UAAT,CAAoBpY,IAApB,CAAyB,IAAzB,EAA+B,aAA/B,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;sBACjCxC,WAAV,CAAsBoM,SAASsK,UAAT,CAAoBpY,IAApB,CAAyB,IAAzB,EAA+B,UAA/B,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;sBAC7BxC,WAAV,CAAsBoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;gBACnC+J,SAAS/S,MAAMsE,aAAN,CAAoB,KAApB,EAA2B;uBAC/B;aADI,CAAf;;;gBAKMoC,aAAa;qBACV,CADU;sBAET,IAFS;uBAGR,KAAKoL,MAAL,CAAYiB;aAHvB;;;gBAOM9B,QAAQ2B,SAASoK,WAAT,CAAqBlY,IAArB,CACV,IADU,EAEV,QAFU,EAGV9E,MAAMuN,MAAN,CAAa7G,UAAb,EAAyB;qCACF1C,KAAKR;aAD5B,CAHU,CAAd;mBAOOgD,WAAP,CAAmByK,MAAM8C,KAAzB;mBACOvN,WAAP,CAAmByK,MAAMhR,KAAzB;;iBAEKyF,QAAL,CAAcqN,MAAd,GAAuBA,MAAvB;;sBAEUvM,WAAV,CAAsBuM,MAAtB;;;;YAIA,KAAKjB,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;sBACjCxC,WAAV,CAAsBoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,UAA9B,KAA6C,CAAChJ,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAK4M,MAAL,CAAYwF,QAA3B,CAAlD,EAAwF;gBAC9EgB,OAAOtY,MAAMsE,aAAN,CAAoB,KAApB,EAA2B;uBAC7B,YAD6B;wBAE5B;aAFC,CAAb;;iBAKKkC,WAAL,CACIoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,EAA6C;8CACbd,KAAKR,EADQ;iCAExB,IAFwB;oDAGPQ,KAAKR,EAHE;iCAIxB;aAJrB,CADJ;;gBASMoY,OAAO5b,MAAMsE,aAAN,CAAoB,MAApB,EAA4B;uBAC9B,uBAD8B;uCAEhBN,KAAKR,EAFW;wBAG7B,EAH6B;8DAIOQ,KAAKR,EAJZ;sBAK/B,SAL+B;0BAM3B,CAAC;aANF,CAAb;;gBASM2Z,QAAQnd,MAAMsE,aAAN,CAAoB,KAApB,CAAd;;gBAEM8Y,OAAOpd,MAAMsE,aAAN,CAAoB,KAApB,EAA2B;uCACfN,KAAKR,EAA1B,UADoC;8DAEQQ,KAAKR,EAFb;sBAG9B;aAHG,CAAb;;;gBAOMyW,OAAOja,MAAMsE,aAAN,CAAoB,IAApB,EAA0B;sBAC7B;aADG,CAAb;;;iBAKKwN,MAAL,CAAYwF,QAAZ,CAAqBvR,OAArB,CAA6B,gBAAQ;oBAC3B4V,MAAM3b,MAAMsE,aAAN,CAAoB,IAApB,EAA0B;0BAC5B,KAD4B;4BAE1B;iBAFA,CAAZ;;oBAKMkU,SAASxY,MAAMsE,aAAN,CACX,QADW,EAEXtE,MAAMuN,MAAN,CAAavN,MAAM+Y,yBAAN,CAAgC,OAAKjH,MAAL,CAAYQ,SAAZ,CAAsB2B,OAAtB,CAA8BqD,QAA9D,CAAb,EAAsF;0BAC5E,QAD4E;2BAExE,OAAKxF,MAAL,CAAYS,UAAZ,CAAuBqG,OAAjC,SAA4C,OAAK9G,MAAL,CAAYS,UAAZ,CAAuBqG,OAAnE,cAFkF;2CAG7D5U,KAAKR,EAA1B,SAAgCiD,IAAhC,SAHkF;qCAIjE,IAJiE;wDAKhDzC,KAAKR,EAAvC,SAA6CiD,IALqC;qCAMjE;iBANrB,CAFW,EAUXyL,KAAK8B,GAAL,CAASvN,IAAT,EAAe,OAAKqL,MAApB,CAVW,CAAf;;oBAaMvK,QAAQvH,MAAMsE,aAAN,CAAoB,MAApB,EAA4B;2BAC/B,OAAKwN,MAAL,CAAYS,UAAZ,CAAuB+F,IAAvB,CAA4B/Q;iBADzB,CAAd;;;sBAKMtD,SAAN,GAAkBD,KAAKyC,IAAL,CAAlB;;uBAEOD,WAAP,CAAmBe,KAAnB;oBACIf,WAAJ,CAAgBgS,MAAhB;qBACKhS,WAAL,CAAiBmV,GAAjB;;uBAEKjW,QAAL,CAAc4R,QAAd,CAAuB2C,IAAvB,CAA4BxT,IAA5B,IAAoCkV,GAApC;aA9BJ;;iBAiCKnV,WAAL,CAAiByT,IAAjB;kBACMzT,WAAN,CAAkB4W,IAAlB;;;iBAGKtL,MAAL,CAAYwF,QAAZ,CAAqBvR,OAArB,CAA6B,gBAAQ;oBAC3BgV,OAAO/a,MAAMsE,aAAN,CAAoB,KAApB,EAA2B;2CACfN,KAAKR,EAA1B,SAAgCiD,IADI;4BAE5B,EAF4B;2DAGCzC,KAAKR,EAA1C,SAAgDiD,IAAhD,SAHoC;0BAI9B,UAJ8B;8BAK1B,CAAC;iBALF,CAAb;;oBAQM4W,OAAOrd,MAAMsE,aAAN,CACT,QADS,EAET;0BACU,QADV;2BAEc,OAAKwN,MAAL,CAAYS,UAAZ,CAAuBqG,OAAjC,SAA4C,OAAK9G,MAAL,CAAYS,UAAZ,CAAuBqG,OAAnE,WAFJ;qCAGqB,IAHrB;wDAIsC5U,KAAKR,EAAvC,UAJJ;qCAKqB;iBAPZ,EAST0O,KAAK8B,GAAL,CAASvN,IAAT,EAAe,OAAKqL,MAApB,CATS,CAAb;;qBAYKtL,WAAL,CAAiB6W,IAAjB;;oBAEMzS,UAAU5K,MAAMsE,aAAN,CAAoB,IAApB,CAAhB;;qBAEKkC,WAAL,CAAiBoE,OAAjB;sBACMpE,WAAN,CAAkBuU,IAAlB;;uBAEKrV,QAAL,CAAc4R,QAAd,CAAuB4C,KAAvB,CAA6BzT,IAA7B,IAAqCsU,IAArC;aA5BJ;;iBA+BKvU,WAAL,CAAiB2W,KAAjB;iBACK3W,WAAL,CAAiBoV,IAAjB;sBACUpV,WAAV,CAAsB8R,IAAtB;;iBAEK5S,QAAL,CAAc4R,QAAd,CAAuBsE,IAAvB,GAA8BA,IAA9B;iBACKlW,QAAL,CAAc4R,QAAd,CAAuBgB,IAAvB,GAA8BA,IAA9B;;;;YAIA,KAAKxG,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,KAA9B,KAAwCvE,QAAQ8O,GAApD,EAAyD;sBAC3C/M,WAAV,CAAsBoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,KAAjC,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,SAA9B,KAA4CvE,QAAQ+O,OAAxD,EAAiE;sBACnDhN,WAAV,CAAsBoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;sBACnCxC,WAAV,CAAsBoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAAtB;;;;YAIA,KAAKgN,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;iBACxCtD,QAAL,CAAcrB,SAAd,CAAwBmC,WAAxB,CAAoCoM,SAASmK,YAAT,CAAsBjY,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAApC;;;aAGCY,QAAL,CAAckN,QAAd,GAAyBvO,SAAzB;;YAEI,KAAKsM,OAAT,EAAkB;qBACL2M,cAAT,CAAwBxY,IAAxB,CAA6B,IAA7B,EAAmCqM,MAAMoM,iBAAN,CAAwBzY,IAAxB,CAA6B,IAA7B,CAAnC;;;iBAGK0Y,YAAT,CAAsB1Y,IAAtB,CAA2B,IAA3B;;eAEOT,SAAP;KApsCS;;;;UAAA,oBAwsCJ;;;;YAED,KAAKyN,MAAL,CAAY2L,UAAhB,EAA4B;gBAClB1F,OAAOnF,SAASgF,UAAT,CAAoB9S,IAApB,CAAyB,IAAzB,CAAb;;;gBAGIiT,KAAKjB,IAAT,EAAe;sBACL2G,UAAN,CAAiB1F,KAAKxV,GAAtB,EAA2B,aAA3B;;;;;aAKHiB,EAAL,GAAU+B,KAAKC,KAAL,CAAWD,KAAKE,MAAL,KAAgB,KAA3B,CAAV;;;YAGIpB,YAAY,IAAhB;aACKqB,QAAL,CAAckN,QAAd,GAAyB,IAAzB;;;YAGM8K,QAAQ;gBACN,KAAKla,EADC;sBAEA,KAAKsO,MAAL,CAAYK,QAFZ;mBAGH,KAAKL,MAAL,CAAYM;SAHvB;YAKIuL,SAAS,IAAb;;YAEI3d,MAAMyD,EAAN,CAASlC,MAAT,CAAgB,KAAKuQ,MAAL,CAAYc,QAA5B,KAAyC5S,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAK8L,MAAL,CAAYc,QAA7B,CAA7C,EAAqF;;wBAErE,KAAKd,MAAL,CAAYc,QAAxB;SAFJ,MAGO,IAAI5S,MAAMyD,EAAN,CAAS+G,QAAT,CAAkB,KAAKsH,MAAL,CAAYc,QAA9B,CAAJ,EAA6C;;;wBAGpC,KAAKd,MAAL,CAAYc,QAAZ,CAAqB9N,IAArB,CAA0B,IAA1B,EAAgC4Y,KAAhC,CAAZ;SAHG,MAIA;;wBAES9K,SAASgL,MAAT,CAAgB9Y,IAAhB,CAAqB,IAArB,EAA2B;oBAC/B,KAAKtB,EAD0B;0BAEzB,KAAKsO,MAAL,CAAYK,QAFa;uBAG5B,KAAKc,KAHuB;yBAI1B,KAAKE,OAJqB;0BAKzBoE,SAASqD,QAAT,CAAkB9V,IAAlB,CAAuB,IAAvB;;;aALF,CAAZ;qBASS,KAAT;;;;YAIEkD,UAAU,SAAVA,OAAU,QAAS;gBACjB7C,SAASlF,KAAb;;mBAEOoH,OAAP,CAAeqW,KAAf,EAAsB3X,OAAtB,CAA8B,gBAGxB;;oBAFFuB,GAEE;oBADFC,KACE;;yBACOvH,MAAMiN,UAAN,CAAiB9H,MAAjB,QAA6BmC,GAA7B,QAAqCC,KAArC,CAAT;aAJJ;;mBAOOpC,MAAP;SAVJ;;;YAcIwY,MAAJ,EAAY;gBACJ3d,MAAMyD,EAAN,CAASlC,MAAT,CAAgB,KAAKuQ,MAAL,CAAYc,QAA5B,CAAJ,EAA2C;4BAC3B5K,QAAQ3D,SAAR,CAAZ;aADJ,MAEO,IAAIrE,MAAMyD,EAAN,CAASuC,OAAT,CAAiB3B,SAAjB,CAAJ,EAAiC;0BAC1BJ,SAAV,GAAsB+D,QAAQ3D,UAAUJ,SAAlB,CAAtB;;;;;YAKJ6C,eAAJ;;;YAGI9G,MAAMyD,EAAN,CAASlC,MAAT,CAAgB,KAAKuQ,MAAL,CAAYQ,SAAZ,CAAsBM,QAAtB,CAA+BvO,SAA/C,CAAJ,EAA+D;qBAClDrC,SAASqH,aAAT,CAAuB,KAAKyI,MAAL,CAAYQ,SAAZ,CAAsBM,QAAtB,CAA+BvO,SAAtD,CAAT;;;;YAIA,CAACrE,MAAMyD,EAAN,CAASuC,OAAT,CAAiBc,MAAjB,CAAL,EAA+B;qBAClB,KAAKpB,QAAL,CAAcrB,SAAvB;;;;YAIArE,MAAMyD,EAAN,CAASuC,OAAT,CAAiB3B,SAAjB,CAAJ,EAAiC;mBACtBmC,WAAP,CAAmBnC,SAAnB;SADJ,MAEO,IAAIA,SAAJ,EAAe;mBACXiV,kBAAP,CAA0B,WAA1B,EAAuCjV,SAAvC;;;;YAIA,CAACrE,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAckN,QAA/B,CAAL,EAA+C;qBAClCiL,YAAT,CAAsB/Y,IAAtB,CAA2B,IAA3B;;;;YAIA3E,OAAOiC,SAAP,CAAiBC,SAAjB,CAA2B2G,QAA3B,CAAoC,MAApC,CAAJ,EAAiD;kBACvC8U,OAAN,CAAchX,MAAd;;;;YAIA,KAAKgL,MAAL,CAAYyH,QAAZ,CAAqB3G,QAAzB,EAAmC;gBACzBmL,SAAS/d,MAAMyJ,WAAN,CAAkB3E,IAAlB,CACX,IADW,EAEX,CACI,KAAKgN,MAAL,CAAYQ,SAAZ,CAAsBM,QAAtB,CAA+BjN,OADnC,EAEI,GAFJ,EAGI,KAAKmM,MAAL,CAAYQ,SAAZ,CAAsByL,MAH1B,EAII,IAJJ,EAKI,KAAKjM,MAAL,CAAYS,UAAZ,CAAuBjK,MAL3B,EAMEyG,IANF,CAMO,EANP,CAFW,CAAf;;kBAWMlJ,IAAN,CAAWkY,MAAX,EAAmBhY,OAAnB,CAA2B,iBAAS;sBAC1BsM,WAAN,CAAkB0B,KAAlB,EAAyB,OAAKjC,MAAL,CAAYS,UAAZ,CAAuBjK,MAAhD,EAAwD,KAAxD;sBACM+J,WAAN,CAAkB0B,KAAlB,EAAyB,OAAKjC,MAAL,CAAYS,UAAZ,CAAuBmF,OAAhD,EAAyD,IAAzD;sBACMlT,YAAN,CAAmB,MAAnB,EAA2B,SAA3B;aAHJ;;;CAzzCZ;;ACdA;AACA;AASA,IAAM+S,WAAW;;SAAA,mBAEL;;YAEA,CAAC,KAAKxG,SAAL,CAAef,EAApB,EAAwB;;;;;YAKlBgO,SAAS,KAAKtZ,OAAL,CAAasP,GAAb,CAAiB,UAAjB,CAAf;;YAEI,CAAChU,MAAMyD,EAAN,CAASyB,KAAT,CAAe8Y,MAAf,CAAL,EAA6B;iBACpBzG,QAAL,CAAc4D,QAAd,GAAyB6C,MAAzB;;;YAGAhe,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAKqS,QAAL,CAAc4D,QAA7B,CAAJ,EAA4C;iBACnC5D,QAAL,CAAc4D,QAAd,GAAyB,KAAKrJ,MAAL,CAAYyF,QAAZ,CAAqB4D,QAArB,CAA8BnO,WAA9B,EAAzB;;;;YAIA,CAAChN,MAAMyD,EAAN,CAAS+E,OAAT,CAAiB,KAAK+O,QAAL,CAAcyD,MAA/B,CAAL,EAA6C;gBACnCA,SAAS,KAAKtW,OAAL,CAAasP,GAAb,CAAiB,UAAjB,CAAf;;gBAEIhU,MAAMyD,EAAN,CAAS+E,OAAT,CAAiBwS,MAAjB,CAAJ,EAA8B;qBACrBzD,QAAL,CAAcyD,MAAd,GAAuBA,MAAvB;aADJ,MAEO;qBACEzD,QAAL,CAAcyD,MAAd,GAAuB,KAAKlJ,MAAL,CAAYyF,QAAZ,CAAqByD,MAA5C;;;;;YAKJ,CAAC,KAAKnK,OAAN,IAAiB,KAAKoN,SAAtB,IAAoC,KAAKtN,OAAL,IAAgB,CAAClM,QAAQyZ,UAAjE,EAA8E;;gBAEtEle,MAAMyD,EAAN,CAAS/B,KAAT,CAAe,KAAKoQ,MAAL,CAAYc,QAA3B,KAAwC,KAAKd,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,UAA9B,CAAxC,IAAqF,KAAK8I,MAAL,CAAYwF,QAAZ,CAAqBtO,QAArB,CAA8B,UAA9B,CAAzF,EAAoI;yBACvHmV,eAAT,CAAyBrZ,IAAzB,CAA8B,IAA9B;;;;;;;YAOJ,CAAC9E,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAc6R,QAA/B,CAAL,EAA+C;iBACtC7R,QAAL,CAAc6R,QAAd,GAAyBvX,MAAMsE,aAAN,CAAoB,KAApB,EAA2BtE,MAAM+Y,yBAAN,CAAgC,KAAKjH,MAAL,CAAYQ,SAAZ,CAAsBiF,QAAtD,CAA3B,CAAzB;;kBAEM6G,WAAN,CAAkB,KAAK1Y,QAAL,CAAc6R,QAAhC,EAA0C,KAAK7R,QAAL,CAAcC,OAAxD;;;;cAIE0M,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBgF,QAAvB,CAAgC8G,OAA3E,EAAoF,CAACre,MAAMyD,EAAN,CAASyB,KAAT,CAAeqS,SAAS8D,SAAT,CAAmBvW,IAAnB,CAAwB,IAAxB,CAAf,CAArF;;;YAGMwW,SAAS/D,SAAS8D,SAAT,CAAmBvW,IAAnB,CAAwB,IAAxB,CAAf;;;YAGI9E,MAAMyD,EAAN,CAASyB,KAAT,CAAeoW,MAAf,CAAJ,EAA4B;;;;;YAKtBrL,UAAUjQ,MAAMkQ,UAAN,EAAhB;;;;YAIID,QAAQ+G,IAAR,IAAgB7W,OAAOwW,GAA3B,EAAgC;gBACtBjR,WAAW,KAAKgL,KAAL,CAAW5M,gBAAX,CAA4B,OAA5B,CAAjB;;kBAEM+B,IAAN,CAAWH,QAAX,EAAqBK,OAArB,CAA6B,iBAAS;oBAC5B4L,MAAM4J,MAAMjQ,YAAN,CAAmB,KAAnB,CAAZ;oBACM8C,OAAOpO,MAAMuO,QAAN,CAAeoD,GAAf,CAAb;;oBAEIvD,KAAKkQ,QAAL,KAAkBne,OAAO0W,QAAP,CAAgBzI,IAAhB,CAAqBkQ,QAAvC,IAAmD,CACnD,OADmD,EAEnD,QAFmD,EAGrDtV,QAHqD,CAG5CoF,KAAKmQ,QAHuC,CAAvD,EAG2B;0BAElBvZ,KADL,CACW2M,GADX,EACgB,MADhB,EAEK1M,IAFL,CAEU,gBAAQ;8BACJT,YAAN,CAAmB,KAAnB,EAA0BrE,OAAOwW,GAAP,CAAW6H,eAAX,CAA2BC,IAA3B,CAA1B;qBAHR,EAKKnZ,KALL,CAKW,YAAM;8BACHyB,aAAN,CAAoBwU,KAApB;qBANR;;aARR;;;;iBAqBKmD,WAAT,CAAqB5Z,IAArB,CAA0B,IAA1B;;;iBAGS+W,IAAT,CAAc/W,IAAd,CAAmB,IAAnB;;;YAGI9E,MAAMyD,EAAN,CAAS/B,KAAT,CAAe,KAAKoQ,MAAL,CAAYc,QAA3B,KAAwC,KAAKd,MAAL,CAAYc,QAAZ,CAAqB5J,QAArB,CAA8B,UAA9B,CAAxC,IAAqF,KAAK8I,MAAL,CAAYwF,QAAZ,CAAqBtO,QAArB,CAA8B,UAA9B,CAAzF,EAAoI;qBACvHmV,eAAT,CAAyBrZ,IAAzB,CAA8B,IAA9B;;KA9FK;;;;eAAA,yBAmGC;;;;YAEN,KAAK6L,OAAL,IAAgB,KAAKE,OAAzB,EAAkC;qBACrBwK,SAAT,CAAmBvW,IAAnB,CAAwB,IAAxB,EAA8BiB,OAA9B,CAAsC,iBAAS;;sBAErCoE,EAAN,CAASoR,KAAT,EAAgB,WAAhB,EAA6B;2BAAShE,SAASoH,MAAT,CAAgB7Z,IAAhB,QAA2B+E,KAA3B,CAAT;iBAA7B;;;;sBAIM+U,IAAN,GAAa,QAAb;aANJ;;;gBAUMC,eAAetH,SAASuH,eAAT,CAAyBha,IAAzB,CAA8B,IAA9B,CAArB;;;gBAGI9E,MAAMyD,EAAN,CAAS8X,KAAT,CAAesD,YAAf,CAAJ,EAAkC;;oBAE1Bhe,MAAMgF,IAAN,CAAWgZ,aAAaE,UAAb,IAA2B,EAAtC,EAA0Cnd,MAA9C,EAAsD;6BACzC+c,MAAT,CAAgB7Z,IAAhB,CAAqB,IAArB,EAA2B+Z,YAA3B;;;SAjBZ,MAoBO,IAAI,KAAKpD,OAAL,IAAgB,KAAKlE,QAAL,CAAcyD,MAAlC,EAA0C;iBACxCgE,KAAL,CAAWC,eAAX,CAA2B,KAAK9D,QAAhC;;KA1HK;;;;aAAA,uBA+HD;;YAEJnb,MAAMyD,EAAN,CAAS7C,eAAT,CAAyB,KAAK8P,KAA9B,CAAJ,EAA0C;mBAC/B,EAAP;;;;eAIG7P,MAAMgF,IAAN,CAAW,KAAK6K,KAAL,CAAWwN,UAAX,IAAyB,EAApC,EAAwC1Q,MAAxC,CAA+C;mBAAS,CAC3D,UAD2D,EAE3D,WAF2D,EAG7DxE,QAH6D,CAGpDuS,MAAM/Z,IAH8C,CAAT;SAA/C,CAAP;KAtIS;;;;mBAAA,6BA6IK;;;YACR8Z,SAAS/D,SAAS8D,SAAT,CAAmBvW,IAAnB,CAAwB,IAAxB,CAAf;;YAEI,CAACwW,OAAO1Z,MAAZ,EAAoB;mBACT,IAAP;;;;YAIA2Z,QAAQD,OAAO1O,IAAP,CAAY;mBAAS2O,MAAMJ,QAAN,CAAenO,WAAf,OAAiC,OAAKmO,QAA/C;SAAZ,CAAZ;;;YAGI,CAACI,KAAL,EAAY;oBACAvb,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,IAAtB,EAA4B,gBAA5B,CAAR;;;;YAIA,CAACyW,KAAL,EAAY;wCACED,MADF;;iBAAA;;;eAILC,KAAP;KAjKS;;;;YAAA,oBAqKJA,KArKI,EAqKG;YACRsD,eAAetD,KAAnB;;YAEI,CAACvb,MAAMyD,EAAN,CAAS8X,KAAT,CAAesD,YAAf,CAAD,IAAiCpa,QAAQyZ,UAAzC,IAAuD,KAAK3G,QAAL,CAAcyD,MAAzE,EAAiF;2BAC9DzD,SAASuH,eAAT,CAAyBha,IAAzB,CAA8B,IAA9B,CAAf;;;YAGA9E,MAAMyD,EAAN,CAAS8X,KAAT,CAAesD,YAAf,CAAJ,EAAkC;gBAC1B,CAAC7e,MAAMyD,EAAN,CAASyB,KAAT,CAAe2Z,aAAa9K,KAA5B,CAAL,EAAyC;uBAC9B8K,aAAa9K,KAApB;;;gBAGA,CAAC/T,MAAMyD,EAAN,CAASyB,KAAT,CAAe2Z,aAAa1D,QAA5B,CAAL,EAA4C;uBACjCI,MAAMJ,QAAN,CAAerO,WAAf,EAAP;;;mBAGGoF,KAAK8B,GAAL,CAAS,SAAT,EAAoB,KAAKlC,MAAzB,CAAP;;;eAGGI,KAAK8B,GAAL,CAAS,UAAT,EAAqB,KAAKlC,MAA1B,CAAP;KAxLS;;;;UAAA,kBA4LN7R,KA5LM,EA4LC;;YAEJsb,QAAQvb,MAAMyD,EAAN,CAASoG,KAAT,CAAe5J,KAAf,IAAwBA,MAAM6G,MAA9B,GAAuC7G,KAArD;YACQ8e,UAHE,GAGaxD,KAHb,CAGFwD,UAHE;;YAIJ/D,SAAS+D,WAAWnd,MAAX,IAAqBmd,WAAW,CAAX,CAApC;YACMF,eAAetH,SAASuH,eAAT,CAAyBha,IAAzB,CAA8B,IAA9B,CAArB;;;YAGIyW,UAAUsD,YAAd,EAA4B;;;;;YAKxB7e,MAAMyD,EAAN,CAASyb,GAAT,CAAalE,MAAb,CAAJ,EAA0B;qBACbmE,OAAT,CAAiBra,IAAjB,CAAsB,IAAtB,EAA4BkW,OAAOoE,YAAP,EAA5B;SADJ,MAEO;qBACMD,OAAT,CAAiBra,IAAjB,CAAsB,IAAtB,EAA4B,IAA5B;;;cAGEqG,aAAN,CAAoBrG,IAApB,CAAyB,IAAzB,EAA+B,KAAK4L,KAApC,EAA2C,WAA3C;KA/MS;;;;WAAA,mBAmNLzQ,KAnNK,EAmNE;;YAEP,CAAC,KAAK8Q,SAAL,CAAef,EAApB,EAAwB;;;;YAIpBhQ,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKN,QAAL,CAAc6R,QAA/B,CAAJ,EAA8C;gBACpCxS,UAAU/E,MAAMsE,aAAN,CAAoB,MAApB,CAAhB;;;kBAGM+V,YAAN,CAAmB,KAAK3U,QAAL,CAAc6R,QAAjC;;;gBAGM8H,UAAU,CAACrf,MAAMyD,EAAN,CAAS7C,eAAT,CAAyBX,KAAzB,CAAD,GAAmCA,KAAnC,GAA2C,EAA3D;;;gBAGID,MAAMyD,EAAN,CAASlC,MAAT,CAAgB8d,OAAhB,CAAJ,EAA8B;wBAClBxY,WAAR,GAAsBwY,QAAQvX,IAAR,EAAtB;aADJ,MAEO;wBACKtB,WAAR,CAAoB6Y,OAApB;;;;iBAIC3Z,QAAL,CAAc6R,QAAd,CAAuB/Q,WAAvB,CAAmCzB,OAAnC;SAjBJ,MAkBO;iBACEiN,KAAL,CAAWU,IAAX,CAAgB,kCAAhB;;KA5OK;;;;QAAA,kBAiPN;;YAECsI,SAAS,KAAKtW,OAAL,CAAasP,GAAb,CAAiB,UAAjB,CAAb;;;YAGI,CAAChU,MAAMyD,EAAN,CAAS+E,OAAT,CAAiBwS,MAAjB,CAAL,EAA+B;kBAAA,GACb,KAAKlJ,MAAL,CAAYyF,QADC,CACxByD,MADwB;SAA/B,MAEO;iBACEzD,QAAL,CAAcyD,MAAd,GAAuBA,MAAvB;;;YAGAA,MAAJ,EAAY;kBACF3I,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuBgF,QAAvB,CAAgCyD,MAA3E,EAAmF,IAAnF;kBACM5P,WAAN,CAAkB,KAAK1F,QAAL,CAAcuO,OAAd,CAAsBsD,QAAxC,EAAkD,IAAlD;;;CA9PZ;;ACVA;;;;AAIA,IAAM+H,OAAO,SAAPA,IAAO,GAAM,EAAnB;;IAEqBC;uBACY;YAAjBlB,OAAiB,uEAAP,KAAO;;;aACpBA,OAAL,GAAele,OAAOqf,OAAP,IAAkBnB,OAAjC;;YAEI,KAAKA,OAAT,EAAkB;iBACTpM,GAAL,CAAS,mBAAT;;;;;;+BAIE;;mBAEC,KAAKoM,OAAL,GAAe1d,SAASmI,SAAT,CAAmB2W,IAAnB,CAAwB3a,IAAxB,CAA6B0a,QAAQvN,GAArC,EAA0CuN,OAA1C,CAAf,GAAoEF,IAA3E;;;;+BAEO;;mBAEA,KAAKjB,OAAL,GAAe1d,SAASmI,SAAT,CAAmB2W,IAAnB,CAAwB3a,IAAxB,CAA6B0a,QAAQ9M,IAArC,EAA2C8M,OAA3C,CAAf,GAAqEF,IAA5E;;;;+BAEQ;;mBAED,KAAKjB,OAAL,GAAe1d,SAASmI,SAAT,CAAmB2W,IAAnB,CAAwB3a,IAAxB,CAA6B0a,QAAQvK,KAArC,EAA4CuK,OAA5C,CAAf,GAAsEF,IAA7E;;;;;;ACzBR;;;;AAIA,IAAMI,aAAW;;aAEJ,IAFI;;;WAKN,EALM;;;WAQN,KARM;;;cAWH,KAXG;;;eAcF,IAdE;;;cAiBH,EAjBG;;;YAoBL,CApBK;WAqBN,KArBM;;;cAwBH,IAxBG;;;;qBA4BI,IA5BJ;;;gBA+BD,IA/BC;;;kBAkCC,IAlCD;;;WAqCN,MArCM;;;iBAwCA,IAxCA;;;kBA2CC,IA3CD;;;gBA8CD,KA9CC;;;wBAiDO,IAjDP;;;gBAoDD,IApDC;gBAqDD,MArDC;aAsDJ,oCAtDI;;;gBAyDD,sCAzDC;;;aA4DJ;iBACI,GADJ;iBAEI,CACL,IADK,EAEL,IAFK,EAGL,IAHK,EAIL,IAJK,EAKL,IALK,EAML,GANK,EAOL,GAPK,EAQL,GARK,EASL,GATK,EAUL,GAVK,EAWL,SAXK;KA9DA;;;UA8EP;gBACM;;;KA/EC;;;WAqFN;kBACO,CADP;iBAEM,CACL,GADK,EAEL,IAFK,EAGL,CAHK,EAIL,IAJK,EAKL,GALK,EAML,IANK,EAOL,CAPK;KAvFA;;;cAmGH;iBACG,IADH;gBAEE;KArGC;;;cAyGH;kBACI,KADJ;cAEA;KA3GG;;;cA+GH;gBACE,KADF;kBAEI,CAACtd,UAAU+Y,QAAV,IAAsB/Y,UAAUud,YAAjC,EAA+ChY,KAA/C,CAAqD,GAArD,EAA0D,CAA1D;KAjHD;;;gBAqHD;iBACC,IADD;kBAEE,IAFF;mBAGG,KAHH;KArHC;;;aA4HJ;iBACI,IADJ;aAEA;KA9HI;;;cAkIH,CACN,YADM;;;UAAA;;cAAA,EAON,cAPM,EAQN,MARM,EASN,QATM,EAUN,UAVM,EAWN,UAXM,EAYN,KAZM,EAaN,SAbM,EAcN,YAdM,CAlIG;cAkJH,CACN,UADM,EAEN,SAFM,EAGN,OAHM,CAlJG;;;UAyJP;iBACO,SADP;gBAEM,wBAFN;cAGI,MAHJ;eAIK,OAJL;qBAKW,yBALX;cAMI,MANJ;gBAOM,QAPN;kBAQQ,UARR;qBASW,cATX;kBAUQ,UAVR;gBAWM,QAXN;cAYI,MAZJ;gBAaM,QAbN;wBAcc,iBAdd;yBAee,kBAff;yBAgBe,kBAhBf;wBAiBc,iBAjBd;oBAkBU,oBAlBV;kBAmBQ,UAnBR;kBAoBQ,UApBR;eAqBK,OArBL;gBAsBM,QAtBN;iBAuBO,SAvBP;cAwBI,MAxBJ;eAyBK,OAzBL;aA0BG,KA1BH;aA2BG,KA3BH;eA4BK,OA5BL;kBA6BQ,UA7BR;iBA8BO,SA9BP;uBA+Ba;KAxLN;;;UA4LP;eACK;iBACE,wCADF;oBAEK,wCAFL;iBAGE;SAJP;iBAMO;iBACA,oCADA;iBAEA,uGAFA;oBAGG;SATV;mBAWS;iBACF;;KAxMA;;;eA6MF;cACD,IADC;cAED,IAFC;eAGA,IAHA;iBAIE,IAJF;gBAKC,IALD;qBAMM,IANN;cAOD,IAPC;gBAQC,IARD;kBASG,IATH;oBAUK,IAVL;aAWF,IAXE;iBAYE,IAZF;eAaA,IAbA;iBAcE,IAdF;cAeD,IAfC;kBAgBG;KA7ND;;;YAiOL;;;WAAA,EAIJ,UAJI,EAKJ,SALI,EAMJ,SANI,EAOJ,SAPI,EAQJ,SARI,EASJ,gBATI,EAUJ,WAVI,EAWJ,YAXI,EAYJ,gBAZI,EAaJ,YAbI,EAcJ,cAdI,EAeJ,MAfI,EAgBJ,OAhBI,EAiBJ,OAjBI,EAkBJ,SAlBI,EAmBJ,QAnBI,EAoBJ,SApBI,EAqBJ,YArBI,EAsBJ,WAtBI;;;qBAAA,EA0BJ,gBA1BI,EA2BJ,iBA3BI,EA4BJ,kBA5BI,EA6BJ,gBA7BI,EA8BJ,gBA9BI,EA+BJ,eA/BI,EAgCJ,OAhCI;;;iBAAA,EAoCJ,eApCI,EAqCJ,kBArCI;;;eAAA,EAyCJ,iBAzCI,EA0CJ,kBA1CI,EA2CJ,WA3CI,EA4CJ,aA5CI,EA6CJ,aA7CI,EA8CJ,gBA9CI,EA+CJ,eA/CI,EAgDJ,UAhDI,CAjOK;;;;eAsRF;kBACG,4CADH;mBAEI,OAFJ;kBAGG;uBACK,IADL;qBAEG;SALN;gBAOC,aAPD;iBAQE;kBACC,oBADD;mBAEE,qBAFF;qBAGI,uBAHJ;oBAIG,sBAJH;yBAKQ,4BALR;kBAMC,oBAND;sBAOK,wBAPL;wBAQO,0BARP;iBASA,mBATA;qBAUI,uBAVJ;sBAWK,wBAXL;kBAYC;SApBH;gBAsBC;kBACE,oBADF;oBAEI,sBAFJ;mBAGG,qBAHH;sBAIM,wBAJN;qBAKK;SA3BN;iBA6BE;yBACQ,sBADR;sBAEK,uBAFL;oBAGG,yBAHH;oBAIG,yBAJH;kBAKC,uBALD;oBAMG;SAnCL;kBAqCG,iBArCH;kBAsCG,iBAtCH;cAuCD;qBACO;;KA9TJ;;;gBAmUD;eACD,qBADC;eAED,mBAFC;gBAGA,cAHA;aAIH,WAJG;iBAKC,eALD;cAMF,WANE;kBAOE,WAPF;iBAQC,eARD;gBASA,cATA;iBAUC,eAVD;iBAWC,eAXD;eAYD,iBAZC;eAaD,aAbC;iBAcC,eAdD;cAeF,YAfE;gBAgBA,eAhBA;sBAiBM,qBAjBN;eAkBD,cAlBC;iBAmBC,gBAnBD;qBAoBK,eApBL;sBAqBM,qBArBN;cAsBF;mBACK,mBADL;mBAEK,aAFL;kBAGI;SAzBF;kBA2BE;qBACG,wBADH;oBAEE;SA7BJ;oBA+BI;qBACC,0BADD;sBAEE;SAjCN;aAmCH;uBACU,qBADV;oBAEO;SArCJ;iBAuCC;uBACM,yBADN;oBAEG;SAzCJ;kBA2CE;KA9WD;;;gBAkXD;eACD;sBACO,oBADP;gBAEC;;KArXC;;;UA0XP;gBACM;KA3XC;;;;SAgYR;iBACQ,KADR;qBAEY;;CAlYrB;;ACJA;AACA;AAMA,IAAMsI,YAAUjQ,MAAMkQ,UAAN,EAAhB;;AAEA,SAAS0P,QAAT,GAAoB;QACZ,CAAC,KAAKvB,OAAV,EAAmB;;;;;QAKb7F,SAAS,KAAKjH,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BuD,UAA5C;QACIxX,MAAMyD,EAAN,CAASuC,OAAT,CAAiBwS,MAAjB,CAAJ,EAA8B;cACpBpN,WAAN,CAAkBoN,MAAlB,EAA0B,KAAKwC,MAA/B;;;;UAIE7P,aAAN,CAAoB,KAAKrE,MAAzB,EAAiC,KAAKkU,MAAL,GAAc,iBAAd,GAAkC,gBAAnE,EAAqF,IAArF;;;QAGI,CAAC/K,UAAQwD,KAAb,EAAoB;cACVoM,SAAN,CAAgB/a,IAAhB,CAAqB,KAAKyM,MAA1B,EAAkC,KAAKzK,MAAvC,EAA+C,KAAKkU,MAApD;;;;AAIR,SAAS8E,cAAT,GAAwC;QAAhBnX,MAAgB,uEAAP,KAAO;;;QAEhCA,MAAJ,EAAY;aACHoX,cAAL,GAAsB;eACf5f,OAAO6f,OAAP,IAAkB,CADH;eAEf7f,OAAO8f,OAAP,IAAkB;SAFzB;KADJ,MAKO;eACIC,QAAP,CAAgB,KAAKH,cAAL,CAAoBI,CAApC,EAAuC,KAAKJ,cAAL,CAAoBK,CAA3D;;;;aAIKlc,IAAT,CAAc/B,KAAd,CAAoBke,QAApB,GAA+B1X,SAAS,QAAT,GAAoB,EAAnD;;;UAGM0J,WAAN,CAAkB,KAAKvL,MAAvB,EAA+B,KAAKyK,MAAL,CAAYO,MAAZ,CAAmBS,UAAnB,CAA8BiF,UAA9B,CAAyC8I,QAAxE,EAAkF3X,MAAlF;;;aAGS7D,IAAT,CAAc,IAAd;;;IAGEyb;wBACUhP,MAAZ,EAAoB;;;;;;aAEXA,MAAL,GAAcA,MAAd;;;aAGK7N,MAAL,GAAc6c,WAAW7c,MAAzB;aACK8c,QAAL,GAAgBD,WAAWC,QAA3B;;;aAGKT,cAAL,GAAsB,EAAEI,GAAG,CAAL,EAAQC,GAAG,CAAX,EAAtB;;;;cAIMjW,EAAN,CAASnI,QAAT,EAAmB,KAAK0B,MAAL,KAAgB,IAAhB,GAAuB,oBAAvB,GAAiD,KAAKA,MAAtD,qBAAnB,EAAmG,YAAM;;qBAE5FoB,IAAT;SAFJ;;;cAMMqF,EAAN,CAAS,KAAKoH,MAAL,CAAY7L,QAAZ,CAAqBrB,SAA9B,EAAyC,UAAzC,EAAqD,iBAAS;;gBAEtDrE,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,MAAKuL,MAAL,CAAY7L,QAAZ,CAAqBkN,QAAtC,KAAmD,MAAKrB,MAAL,CAAY7L,QAAZ,CAAqBkN,QAArB,CAA8BhK,QAA9B,CAAuCiB,MAAM/C,MAA7C,CAAvD,EAA6G;;;;kBAIxG6B,MAAL;SANJ;;;aAUKgV,MAAL;;;;;;;;;;;iCAuEK;gBACD,KAAKU,OAAT,EAAkB;qBACT9M,MAAL,CAAYS,KAAZ,CAAkBC,GAAlB,EAAyBsO,WAAWE,MAAX,GAAoB,QAApB,GAA+B,UAAxD;aADJ,MAEO;qBACElP,MAAL,CAAYS,KAAZ,CAAkBC,GAAlB,CAAsB,gDAAtB;;;;kBAIEI,WAAN,CAAkB,KAAKd,MAAL,CAAY7L,QAAZ,CAAqBrB,SAAvC,EAAkD,KAAKkN,MAAL,CAAYO,MAAZ,CAAmBS,UAAnB,CAA8BiF,UAA9B,CAAyC6G,OAA3F,EAAoG,KAAKA,OAAzG;;;;;;;gCAII;gBACA,CAAC,KAAKA,OAAV,EAAmB;;;;;gBAKfpO,UAAQwD,KAAR,IAAiB,KAAKlC,MAAL,CAAYO,MAAZ,CAAmB0F,UAAnB,CAA8BkJ,SAAnD,EAA8D;oBACtD,KAAKnP,MAAL,CAAYG,OAAhB,EAAyB;yBAChB5K,MAAL,CAAY6Z,qBAAZ;;aAFR,MAIO,IAAI,CAACJ,WAAWE,MAAhB,EAAwB;+BACZ3b,IAAf,CAAoB,IAApB,EAA0B,IAA1B;aADG,MAEA,IAAI,CAAC,KAAKpB,MAAV,EAAkB;qBAChBoD,MAAL,CAAY8Z,iBAAZ;aADG,MAEA,IAAI,CAAC5gB,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAKxB,MAApB,CAAL,EAAkC;qBAChCoD,MAAL,CAAe,KAAKpD,MAApB,eAAoC,KAAK8c,QAAzC;;;;;;;;+BAKD;gBACC,CAAC,KAAKnC,OAAV,EAAmB;;;;;gBAKfpO,UAAQwD,KAAR,IAAiB,KAAKlC,MAAL,CAAYO,MAAZ,CAAmB0F,UAAnB,CAA8BkJ,SAAnD,EAA8D;qBACrD5Z,MAAL,CAAY+Z,oBAAZ;qBACKtP,MAAL,CAAYM,IAAZ;aAFJ,MAGO,IAAI,CAAC0O,WAAWE,MAAhB,EAAwB;+BACZ3b,IAAf,CAAoB,IAApB,EAA0B,KAA1B;aADG,MAEA,IAAI,CAAC,KAAKpB,MAAV,EAAkB;iBACpB1B,SAAS8e,gBAAT,IAA6B9e,SAAS+e,cAAvC,EAAuDjc,IAAvD,CAA4D9C,QAA5D;aADG,MAEA,IAAI,CAAChC,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAKxB,MAApB,CAAL,EAAkC;oBAC/Bsd,SAAS,KAAKtd,MAAL,KAAgB,KAAhB,GAAwB,QAAxB,GAAmC,MAAlD;8BACY,KAAKA,MAAjB,GAA0Bsd,MAA1B,GAAmC,KAAKR,QAAxC;;;;;;;;iCAKC;gBACD,CAAC,KAAKxF,MAAV,EAAkB;qBACTiG,KAAL;aADJ,MAEO;qBACEC,IAAL;;;;;;;;+BAvFM;mBAEN,CAACX,WAAWE,MAAX,IAAqB,KAAKlP,MAAL,CAAYO,MAAZ,CAAmB0F,UAAnB,CAA8B8I,QAApD,KACA,KAAK/O,MAAL,CAAYO,MAAZ,CAAmB0F,UAAnB,CAA8B6G,OAD9B,IAEA,KAAK9M,MAAL,CAAYR,SAAZ,CAAsBf,EAFtB,IAGA,KAAKuB,MAAL,CAAYV,OAJhB;;;;;;;+BASS;gBACL,CAAC,KAAKwN,OAAV,EAAmB;uBACR,KAAP;;;;gBAIA,CAACkC,WAAWE,MAAhB,EAAwB;uBACbzgB,MAAM8Z,QAAN,CAAe,KAAKhT,MAApB,EAA4B,KAAKyK,MAAL,CAAYO,MAAZ,CAAmBS,UAAnB,CAA8BiF,UAA9B,CAAyC8I,QAArE,CAAP;;;gBAGEta,UAAU,CAAC,KAAKtC,MAAN,GAAe1B,SAASmf,iBAAxB,GAA4Cnf,cAAY,KAAK0B,MAAjB,GAA0B,KAAK8c,QAA/B,aAA5D;;mBAEOxa,YAAY,KAAKc,MAAxB;;;;;;;+BAIS;mBACFmJ,UAAQwD,KAAR,IAAiB,KAAKlC,MAAL,CAAYO,MAAZ,CAAmB0F,UAAnB,CAA8BkJ,SAA/C,GAA2D,KAAKnP,MAAL,CAAYb,KAAvE,GAA+E,KAAKa,MAAL,CAAY7L,QAAZ,CAAqBrB,SAA3G;;;;+BA/DgB;mBACT,CAAC,EAAErC,SAASof,iBAAT,IAA8Bpf,SAASqf,uBAAvC,IAAkErf,SAASsf,oBAA3E,IAAmGtf,SAASuf,mBAA9G,CAAR;;;;;;;+BAIgB;;gBAEZvhB,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBxI,SAAS+e,cAA3B,CAAJ,EAAgD;uBACrC,EAAP;;;;gBAIAxZ,QAAQ,EAAZ;gBACMia,WAAW,CACb,QADa,EAEb,KAFa,EAGb,IAHa,CAAjB;;qBAMSvG,IAAT,CAAc,eAAO;oBACbjb,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBxI,SAAYyf,GAAZ,oBAAlB,KAAuDzhB,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBxI,SAAYyf,GAAZ,sBAAlB,CAA3D,EAAkH;4BACtGA,GAAR;2BACO,IAAP;;;uBAGG,KAAP;aANJ;;mBASOla,KAAP;;;;+BAGkB;mBACX,KAAK7D,MAAL,KAAgB,KAAhB,GAAwB,YAAxB,GAAuC,YAA9C;;;;;;ACpHR;AACA;;AAQA,IAAMuM,YAAUjQ,MAAMkQ,UAAN,EAAhB;;IAEMwR;uBACUnQ,MAAZ,EAAoB;;;aACXA,MAAL,GAAcA,MAAd;aACKoQ,OAAL,GAAe,IAAf;;aAEKC,SAAL,GAAiB,KAAKA,SAAL,CAAenC,IAAf,CAAoB,IAApB,CAAjB;aACKoC,UAAL,GAAkB,KAAKA,UAAL,CAAgBpC,IAAhB,CAAqB,IAArB,CAAlB;aACKqC,UAAL,GAAkB,KAAKA,UAAL,CAAgBrC,IAAhB,CAAqB,IAArB,CAAlB;;;;;;;;kCAIM5V,OAAO;;;gBACPkY,OAAOlY,MAAMC,OAAN,GAAgBD,MAAMC,OAAtB,GAAgCD,MAAMmY,KAAnD;gBACM3W,UAAUxB,MAAMpD,IAAN,KAAe,SAA/B;gBACMwb,SAAS5W,WAAW0W,SAAS,KAAKJ,OAAxC;;;gBAGI9X,MAAMqY,MAAN,IAAgBrY,MAAMsY,OAAtB,IAAiCtY,MAAMuY,OAAvC,IAAkDvY,MAAMG,QAA5D,EAAsE;;;;;;gBAMlE,CAAChK,MAAMyD,EAAN,CAASyI,MAAT,CAAgB6V,IAAhB,CAAL,EAA4B;;;;;gBAKtBM,YAAY,SAAZA,SAAY,GAAM;;sBAEf9Q,MAAL,CAAYE,WAAZ,GAA0B,MAAKF,MAAL,CAAYqE,QAAZ,GAAuB,EAAvB,IAA6BmM,OAAO,EAApC,CAA1B;aAFJ;;;;gBAOI1W,OAAJ,EAAa;;oBAEHnB,iBAAiB,CACnB,EADmB,EAEnB,EAFmB,EAGnB,EAHmB,EAInB,EAJmB,EAKnB,EALmB,EAMnB,EANmB,EAOnB,EAPmB,EAQnB,EARmB,EASnB,EATmB,EAUnB,EAVmB,EAWnB,EAXmB,EAYnB,EAZmB,EAanB,EAbmB,EAcnB,EAdmB,EAenB,EAfmB,EAgBnB,EAhBmB,EAiBnB,EAjBmB,EAkBnB,EAlBmB,EAmBnB,EAnBmB,EAoBnB,EApBmB,EAqBnB,EArBmB,CAAvB;;;;;oBA2BMZ,UAAUtJ,MAAM+J,eAAN,EAAhB;oBACI/J,MAAMyD,EAAN,CAASuC,OAAT,CAAiBsD,OAAjB,KAA6BtJ,MAAMiJ,OAAN,CAAcK,OAAd,EAAuB,KAAKiI,MAAL,CAAYO,MAAZ,CAAmBQ,SAAnB,CAA6BgQ,QAApD,CAAjC,EAAgG;;;;;oBAK5FpY,eAAelB,QAAf,CAAwB+Y,IAAxB,CAAJ,EAAmC;0BACzB7X,cAAN;0BACM8R,eAAN;;;wBAGI+F,IAAR;yBACS,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;yBACK,EAAL;;4BAEQ,CAACE,MAAL,EAAa;;;;;yBAKZ,EAAL;yBACK,EAAL;;4BAEQ,CAACA,MAAL,EAAa;iCACJ1Q,MAAL,CAAYgR,UAAZ;;;;yBAIH,EAAL;;6BAEShR,MAAL,CAAYiR,cAAZ,CAA2B,GAA3B;;;yBAGC,EAAL;;6BAESjR,MAAL,CAAYkR,cAAZ,CAA2B,GAA3B;;;yBAGC,EAAL;;4BAEQ,CAACR,MAAL,EAAa;iCACJ1Q,MAAL,CAAYyB,KAAZ,GAAoB,CAAC,KAAKzB,MAAL,CAAYyB,KAAjC;;;;yBAIH,EAAL;;6BAESzB,MAAL,CAAYmR,OAAZ;;;yBAGC,EAAL;;6BAESnR,MAAL,CAAY6F,MAAZ;;;yBAGC,EAAL;;6BAES7F,MAAL,CAAYiG,UAAZ,CAAuB7O,MAAvB;;;yBAGC,EAAL;;4BAEQ,CAACsZ,MAAL,EAAa;iCACJ1Q,MAAL,CAAYoR,cAAZ;;;;yBAIH,EAAL;;6BAESpR,MAAL,CAAY2B,IAAZ,GAAmB,CAAC,KAAK3B,MAAL,CAAY2B,IAAhC;;;;;;;;;;;;;;;;;;;oBAqBJ,CAAC,KAAK3B,MAAL,CAAYiG,UAAZ,CAAuB6G,OAAxB,IAAmC,KAAK9M,MAAL,CAAYiG,UAAZ,CAAuBwD,MAA1D,IAAoE+G,SAAS,EAAjF,EAAqF;yBAC5ExQ,MAAL,CAAYiG,UAAZ,CAAuB7O,MAAvB;;;;qBAICgZ,OAAL,GAAeI,IAAf;aApIJ,MAqIO;qBACEJ,OAAL,GAAe,IAAf;;;;;;;;mCAKG9X,OAAO;qBACLgY,UAAT,CAAoB/c,IAApB,CAAyB,KAAKyM,MAA9B,EAAsC1H,KAAtC;;;;;;;qCAIS;iBACJ0H,MAAL,CAAYoC,KAAZ,GAAoB,IAApB;;;kBAGMtB,WAAN,CAAkB,KAAKd,MAAL,CAAY7L,QAAZ,CAAqBrB,SAAvC,EAAkD,KAAKkN,MAAL,CAAYO,MAAZ,CAAmBS,UAAnB,CAA8BmB,OAAhF,EAAyF,IAAzF;;;kBAGMtJ,GAAN,CAAUpI,SAASkC,IAAnB,EAAyB,YAAzB,EAAuC,KAAK4d,UAA5C;;;;;;;iCAIkB;gBAAfnZ,MAAe,uEAAN,IAAM;;;gBAEd,KAAK4I,MAAL,CAAYO,MAAZ,CAAmB8Q,QAAnB,CAA4BC,MAAhC,EAAwC;sBAC9BnY,cAAN,CAAqBvK,MAArB,EAA6B,eAA7B,EAA8C,KAAKyhB,SAAnD,EAA8DjZ,MAA9D,EAAsE,KAAtE;;;;kBAIE+B,cAAN,CAAqB1I,SAASkC,IAA9B,EAAoC,OAApC,EAA6C,KAAK2d,UAAlD,EAA8DlZ,MAA9D;;;kBAGMwB,EAAN,CAASnI,SAASkC,IAAlB,EAAwB,YAAxB,EAAsC,KAAK4d,UAA3C;;;;;;;oCAIQ;;;;gBAEJ,CAAC,KAAKvQ,MAAL,CAAYO,MAAZ,CAAmB8Q,QAAnB,CAA4BC,MAA7B,IAAuC,KAAKtR,MAAL,CAAYO,MAAZ,CAAmB8Q,QAAnB,CAA4BtZ,OAAvE,EAAgF;sBACtEa,EAAN,CAAS,KAAKoH,MAAL,CAAY7L,QAAZ,CAAqBrB,SAA9B,EAAyC,eAAzC,EAA0D,KAAKud,SAA/D,EAA0E,KAA1E;;;;;kBAKEzX,EAAN,CAAS,KAAKoH,MAAL,CAAY7L,QAAZ,CAAqBrB,SAA9B,EAAyC,UAAzC,EAAqD,iBAAS;sBACpDgO,WAAN,CAAkBxI,MAAM/C,MAAxB,EAAgC,OAAKyK,MAAL,CAAYO,MAAZ,CAAmBS,UAAnB,CAA8BuQ,QAA9D,EAAwE,KAAxE;aADJ;;;kBAKM3Y,EAAN,CAAS,KAAKoH,MAAL,CAAY7L,QAAZ,CAAqBrB,SAA9B,EAAyC,SAAzC,EAAoD,iBAAS;oBACrDwF,MAAMC,OAAN,KAAkB,CAAtB,EAAyB;;;;;;2BAMd,YAAM;0BACPuI,WAAN,CAAkBrS,MAAM+J,eAAN,EAAlB,EAA2C,OAAKwH,MAAL,CAAYO,MAAZ,CAAmBS,UAAnB,CAA8BuQ,QAAzE,EAAmF,IAAnF;iBADJ,EAEG,CAFH;aAPJ;;;gBAaI,KAAKvR,MAAL,CAAYO,MAAZ,CAAmBiR,YAAvB,EAAqC;;sBAE3B5Y,EAAN,CAAS,KAAKoH,MAAL,CAAY7L,QAAZ,CAAqBrB,SAA9B,EAAyC,8FAAzC,EAAyI,iBAAS;2BACzIkN,MAAL,CAAYoD,cAAZ,CAA2B9K,KAA3B;iBADJ;;;;;;;;gCAOA;;;;kBAEEM,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,oBAA5B,EAAkD;uBAASV,GAAGqD,UAAH,CAAcvO,IAAd,CAAmB,OAAKyM,MAAxB,EAAgC1H,KAAhC,CAAT;aAAlD;;;kBAGMM,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,0CAA5B,EAAwE;uBAASV,GAAGgT,cAAH,CAAkBle,IAAlB,CAAuB,OAAKyM,MAA5B,EAAoC1H,KAApC,CAAT;aAAxE;;;;kBAIMM,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,YAA5B,EAA0C,YAAM;sBACtCnM,YAAN,CAAmB,OAAKgN,MAAL,CAAY7L,QAAZ,CAAqBqN,MAAxC,EAAgD,CAAC,OAAKxB,MAAL,CAAY0R,QAA7D;sBACM1e,YAAN,CAAmB,OAAKgN,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BmB,IAAhD,EAAsD,CAAC,OAAK7D,MAAL,CAAY0R,QAAnE;aAFJ;;;kBAMM9Y,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,OAA5B,EAAqC,YAAM;;oBAEnC,OAAKa,MAAL,CAAYZ,OAAZ,IAAuB,OAAKY,MAAL,CAAYV,OAAnC,IAA8C,OAAKU,MAAL,CAAYO,MAAZ,CAAmBoR,UAArE,EAAiF;;2BAExE3R,MAAL,CAAY4F,OAAZ;;aAJR;;;kBASMhN,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,kBAA5B,EAAgD;uBAASV,GAAGqG,cAAH,CAAkBvR,IAAlB,CAAuB,OAAKyM,MAA5B,EAAoC1H,KAApC,CAAT;aAAhD;;;kBAGMM,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,cAA5B,EAA4C;uBAASV,GAAGoD,YAAH,CAAgBtO,IAAhB,CAAqB,OAAKyM,MAA1B,EAAkC1H,KAAlC,CAAT;aAA5C;;;kBAGMM,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,6CAA5B,EAA2E;uBAASV,GAAGsD,YAAH,CAAgBxO,IAAhB,CAAqB,OAAKyM,MAA1B,EAAkC1H,KAAlC,CAAT;aAA3E;;;kBAGMM,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,gCAA5B,EAA8D;uBAASV,GAAGmT,YAAH,CAAgBre,IAAhB,CAAqB,OAAKyM,MAA1B,EAAkC1H,KAAlC,CAAT;aAA9D;;;;;;;kBAOMM,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,SAA5B,EAAuC,YAAM;oBACrC,CAAC,OAAKa,MAAL,CAAY6R,GAAjB,EAAsB;;;;;oBAKlB,OAAK7R,MAAL,CAAY6R,GAAZ,CAAgB/E,OAAhB,IAA2B,CAAC,OAAK9M,MAAL,CAAY6R,GAAZ,CAAgBC,WAAhD,EAA6D;;2BAEpD9R,MAAL,CAAY6R,GAAZ,CAAgBE,cAAhB,CAA+Bre,IAA/B,CAAoC;+BAAM,OAAKsM,MAAL,CAAY6R,GAAZ,CAAgBvR,IAAhB,EAAN;qBAApC,EAAkEvM,KAAlE,CAAwE;+BAAM,OAAKiM,MAAL,CAAYM,IAAZ,EAAN;qBAAxE;;aARR;;;gBAaI,KAAKN,MAAL,CAAYR,SAAZ,CAAsBf,EAAtB,IAA4B,KAAKuB,MAAL,CAAYO,MAAZ,CAAmByR,WAA/C,IAA8D,CAAC,KAAKhS,MAAL,CAAYT,OAA/E,EAAwF;;oBAE9EnL,UAAU3F,MAAMoU,UAAN,CAAiBtP,IAAjB,CAAsB,KAAKyM,MAA3B,QAAuC,KAAKA,MAAL,CAAYO,MAAZ,CAAmBS,UAAnB,CAA8BlC,KAArE,CAAhB;;;oBAGI,CAACrQ,MAAMyD,EAAN,CAASuC,OAAT,CAAiBL,OAAjB,CAAL,EAAgC;;;;;sBAK1BwE,EAAN,CAASxE,OAAT,EAAkB,OAAlB,EAA2B,YAAM;;wBAEzB,OAAK4L,MAAL,CAAYO,MAAZ,CAAmBiR,YAAnB,IAAmC,OAAKxR,MAAL,CAAYoC,KAA/C,IAAwD,CAAC,OAAKpC,MAAL,CAAYkD,MAAzE,EAAiF;;;;wBAI7E,OAAKlD,MAAL,CAAYkD,MAAhB,EAAwB;+BACflD,MAAL,CAAYM,IAAZ;qBADJ,MAEO,IAAI,OAAKN,MAAL,CAAYiS,KAAhB,EAAuB;+BACrBjS,MAAL,CAAY4F,OAAZ;+BACK5F,MAAL,CAAYM,IAAZ;qBAFG,MAGA;+BACEN,MAAL,CAAY2F,KAAZ;;iBAZR;;;;gBAkBA,KAAK3F,MAAL,CAAYR,SAAZ,CAAsBf,EAAtB,IAA4B,KAAKuB,MAAL,CAAYO,MAAZ,CAAmB2R,kBAAnD,EAAuE;sBAC7DtZ,EAAN,CACI,KAAKoH,MAAL,CAAY7L,QAAZ,CAAqBC,OADzB,EAEI,aAFJ,EAGI,iBAAS;0BACCuE,cAAN;iBAJR,EAMI,KANJ;;;;kBAWEC,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,cAA5B,EAA4C,YAAM;;uBAEzCa,MAAL,CAAY7M,OAAZ,CAAoBgf,GAApB,CAAwB,EAAE3Q,QAAQ,OAAKxB,MAAL,CAAYwB,MAAtB,EAA8BC,OAAO,OAAKzB,MAAL,CAAYyB,KAAjD,EAAxB;aAFJ;;;kBAMM7I,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,YAA5B,EAA0C,YAAM;;yBAEnCoK,aAAT,CAAuBhW,IAAvB,CAA4B,OAAKyM,MAAjC,EAAyC,OAAzC;;;uBAGKA,MAAL,CAAY7M,OAAZ,CAAoBgf,GAApB,CAAwB,EAAEzQ,OAAO,OAAK1B,MAAL,CAAY0B,KAArB,EAAxB;aALJ;;;kBASM9I,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,kBAA5B,EAAgD,iBAAS;;uBAEhDa,MAAL,CAAY7M,OAAZ,CAAoBgf,GAApB,CAAwB,EAAEvQ,SAAStJ,MAAMkB,MAAN,CAAaoI,OAAxB,EAAxB;aAFJ;;;kBAMMhJ,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,eAA5B,EAA6C,iBAAS;;yBAEzCoK,aAAT,CAAuBhW,IAAvB,CAA4B,OAAKyM,MAAjC,EAAyC,SAAzC,EAAoD,IAApD,EAA0D1H,MAAMkB,MAAN,CAAaoI,OAAvE;aAFJ;;;kBAMMhJ,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,gBAA5B,EAA8C,YAAM;;yBAEvCoK,aAAT,CAAuBhW,IAAvB,CAA4B,OAAKyM,MAAjC,EAAyC,UAAzC;;;uBAGKA,MAAL,CAAY7M,OAAZ,CAAoBgf,GAApB,CAAwB,EAAEvI,UAAU,OAAK5J,MAAL,CAAY4J,QAAxB,EAAxB;aALJ;;;kBASMhR,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,kCAA5B,EAAgE,YAAM;;yBAEzDoK,aAAT,CAAuBhW,IAAvB,CAA4B,OAAKyM,MAAjC,EAAyC,UAAzC;;;uBAGKA,MAAL,CAAY7M,OAAZ,CAAoBgf,GAApB,CAAwB,EAAEnM,UAAU,OAAKhG,MAAL,CAAYgG,QAAZ,CAAqByD,MAAjC,EAAxB;aALJ;;;;kBAUM7Q,EAAN,CAAS,KAAKoH,MAAL,CAAYb,KAArB,EAA4B,KAAKa,MAAL,CAAYO,MAAZ,CAAmBnH,MAAnB,CAA0BgZ,MAA1B,CAAiC,CACzD,OADyD,EAEzD,SAFyD,CAAjC,EAGzB5U,IAHyB,CAGpB,GAHoB,CAA5B,EAGc,iBAAS;oBACfhE,SAAS,EAAb;;;oBAGIlB,MAAMpD,IAAN,KAAe,OAAnB,EAA4B;6BACf,OAAK8K,MAAL,CAAYb,KAAZ,CAAkBuE,KAA3B;;;sBAGE9J,aAAN,CAAoBrG,IAApB,CAAyB,OAAKyM,MAA9B,EAAsC,OAAKA,MAAL,CAAY7L,QAAZ,CAAqBrB,SAA3D,EAAsEwF,MAAMpD,IAA5E,EAAkF,IAAlF,EAAwFsE,MAAxF;aAXJ;;;;;;;sCAgBO;;;;gBAED6Y,aAAa3T,UAAQ+G,IAAR,GAAe,QAAf,GAA0B,OAA7C;;;gBAGM6M,QAAQ,SAARA,KAAQ,CAACha,KAAD,EAAQia,cAAR,EAAwBC,gBAAxB,EAA6C;oBACjDC,gBAAgB,OAAKzS,MAAL,CAAYO,MAAZ,CAAmBW,SAAnB,CAA6BsR,gBAA7B,CAAtB;oBACME,mBAAmBjkB,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBwZ,aAAlB,CAAzB;oBACIE,WAAW,IAAf;;;oBAGID,gBAAJ,EAAsB;+BACPD,cAAclf,IAAd,CAAmB,OAAKyM,MAAxB,EAAgC1H,KAAhC,CAAX;;;;oBAIAqa,YAAYlkB,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBsZ,cAAlB,CAAhB,EAAmD;mCAChChf,IAAf,CAAoB,OAAKyM,MAAzB,EAAiC1H,KAAjC;;aAZR;;;gBAiBMM,KAAK,SAALA,EAAK,CAACnE,OAAD,EAAUS,IAAV,EAAgBqd,cAAhB,EAAgCC,gBAAhC,EAAqE;oBAAnBzZ,OAAmB,uEAAT,IAAS;;oBACtE0Z,gBAAgB,OAAKzS,MAAL,CAAYO,MAAZ,CAAmBW,SAAnB,CAA6BsR,gBAA7B,CAAtB;oBACME,mBAAmBjkB,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBwZ,aAAlB,CAAzB;;sBAEM7Z,EAAN,CAASnE,OAAT,EAAkBS,IAAlB,EAAwB;2BAASod,MAAMha,KAAN,EAAaia,cAAb,EAA6BC,gBAA7B,CAAT;iBAAxB,EAAiFzZ,WAAW,CAAC2Z,gBAA7F;aAJJ;;;eAQG,KAAK1S,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BpC,IAAhC,EAAsC,OAAtC,EAA+C,KAAKN,MAAL,CAAYgR,UAA3D,EAAuE,MAAvE;;;eAGG,KAAKhR,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BkD,OAAhC,EAAyC,OAAzC,EAAkD,KAAK5F,MAAL,CAAY4F,OAA9D,EAAuE,SAAvE;;;eAGG,KAAK5F,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BmD,MAAhC,EAAwC,OAAxC,EAAiD,KAAK7F,MAAL,CAAY6F,MAA7D,EAAqE,QAArE;;;eAGG,KAAK7F,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BoD,WAAhC,EAA6C,OAA7C,EAAsD,KAAK9F,MAAL,CAAYmR,OAAlE,EAA2E,aAA3E;;;eAII,KAAKnR,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BmB,IADjC,EAEI,OAFJ,EAGI,YAAM;uBACG7D,MAAL,CAAYyB,KAAZ,GAAoB,CAAC,OAAKzB,MAAL,CAAYyB,KAAjC;aAJR,EAMI,MANJ;;;eAUG,KAAKzB,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BsD,QAAhC,EAA0C,OAA1C,EAAmD,KAAKhG,MAAL,CAAYoR,cAA/D;;;eAII,KAAKpR,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BuD,UADjC,EAEI,OAFJ,EAGI,YAAM;uBACGjG,MAAL,CAAYiG,UAAZ,CAAuB7O,MAAvB;aAJR,EAMI,YANJ;;;eAWI,KAAK4I,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BV,GADjC,EAEI,OAFJ,EAGI,YAAM;uBACGhC,MAAL,CAAYgC,GAAZ,GAAkB,QAAlB;aAJR,EAMI,KANJ;;;eAUG,KAAKhC,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BT,OAAhC,EAAyC,OAAzC,EAAkD,KAAKjC,MAAL,CAAYiC,OAA9D,EAAuE,SAAvE;;;eAGG,KAAKjC,MAAL,CAAY7L,QAAZ,CAAqBuO,OAArB,CAA6BqD,QAAhC,EAA0C,OAA1C,EAAmD,iBAAS;yBAC/CuK,UAAT,CAAoB/c,IAApB,CAAyB,OAAKyM,MAA9B,EAAsC1H,KAAtC;aADJ;;;eAKG,KAAK0H,MAAL,CAAY7L,QAAZ,CAAqB4R,QAArB,CAA8BsE,IAAjC,EAAuC,OAAvC,EAAgD,iBAAS;sBAC/CI,eAAN;;;oBAGMmI,cAAc,SAAdA,WAAc,GAAM;wBAChB3gB,wBAAsB,OAAK+N,MAAL,CAAY/N,EAAlC,UAAN;6BACS4gB,OAAT,CAAiBtf,IAAjB,CAAsB,OAAKyM,MAA3B,EAAmC/N,EAAnC;iBAFJ;;;oBAMIxD,MAAMiJ,OAAN,CAAcY,MAAM/C,MAApB,EAA4B,OAAKyK,MAAL,CAAYO,MAAZ,CAAmBQ,SAAnB,CAA6B4C,MAA7B,CAAoCiG,QAAhE,CAAJ,EAA+E;0BAEvEtR,KADJ,EAEI,YAAM;+BACG0H,MAAL,CAAY4J,QAAZ,GAAuBtR,MAAM/C,MAAN,CAAaS,KAApC;;qBAHR,EAMI,UANJ;iBADJ,MASO,IAAIvH,MAAMiJ,OAAN,CAAcY,MAAM/C,MAApB,EAA4B,OAAKyK,MAAL,CAAYO,MAAZ,CAAmBQ,SAAnB,CAA6B4C,MAA7B,CAAoC/B,OAAhE,CAAJ,EAA8E;0BAE7EtJ,KADJ,EAEI,YAAM;+BACG0H,MAAL,CAAY4B,OAAZ,GAAsBtJ,MAAM/C,MAAN,CAAaS,KAAnC;;qBAHR,EAMI,SANJ;iBADG,MASA,IAAIvH,MAAMiJ,OAAN,CAAcY,MAAM/C,MAApB,EAA4B,OAAKyK,MAAL,CAAYO,MAAZ,CAAmBQ,SAAnB,CAA6B4C,MAA7B,CAAoCjC,KAAhE,CAAJ,EAA4E;0BAE3EpJ,KADJ,EAEI,YAAM;+BACG0H,MAAL,CAAY0B,KAAZ,GAAoB8G,WAAWlQ,MAAM/C,MAAN,CAAaS,KAAxB,CAApB;;qBAHR,EAMI,OANJ;iBADG,MASA;wBACGoU,MAAM9R,MAAM/C,MAAlB;6BACSsd,OAAT,CAAiBtf,IAAjB,CAAsB,OAAKyM,MAA3B,EAAmCoK,IAAIrQ,YAAJ,CAAiB,eAAjB,CAAnC;;aAvCR;;;eA6CI,KAAKiG,MAAL,CAAY7L,QAAZ,CAAqBwP,MAArB,CAA4BW,IADhC,EAEI+N,UAFJ,EAGI,iBAAS;uBACArS,MAAL,CAAYE,WAAZ,GAA0B5H,MAAM/C,MAAN,CAAaS,KAAb,GAAqBsC,MAAM/C,MAAN,CAAa8E,GAAlC,GAAwC,OAAK2F,MAAL,CAAYqE,QAA9E;aAJR,EAMI,MANJ;;;;gBAWI,KAAKrE,MAAL,CAAYO,MAAZ,CAAmBuS,YAAnB,IAAmC,CAACrkB,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,KAAKuL,MAAL,CAAY7L,QAAZ,CAAqB6P,OAArB,CAA6BK,QAA9C,CAAxC,EAAiG;mBAC1F,KAAKrE,MAAL,CAAY7L,QAAZ,CAAqB6P,OAArB,CAA6B9D,WAAhC,EAA6C,OAA7C,EAAsD,YAAM;;wBAEpD,OAAKF,MAAL,CAAYE,WAAZ,KAA4B,CAAhC,EAAmC;;;;2BAI9BF,MAAL,CAAYO,MAAZ,CAAmBoE,UAAnB,GAAgC,CAAC,OAAK3E,MAAL,CAAYO,MAAZ,CAAmBoE,UAApD;uBACG7C,UAAH,CAAcvO,IAAd,CAAmB,OAAKyM,MAAxB;iBAPJ;;;;eAaA,KAAKA,MAAL,CAAY7L,QAAZ,CAAqBwP,MAArB,CAA4BnC,MADhC,EAEI6Q,UAFJ,EAGI,iBAAS;uBACArS,MAAL,CAAYwB,MAAZ,GAAqBlJ,MAAM/C,MAAN,CAAaS,KAAlC;aAJR,EAMI,QANJ;;;gBAUI0I,UAAQwG,QAAZ,EAAsB;mBACfzW,MAAMyJ,WAAN,CAAkB3E,IAAlB,CAAuB,KAAKyM,MAA5B,EAAoC,qBAApC,CAAH,EAA+D,OAA/D,EAAwE,iBAAS;6BACpE8D,eAAT,CAAyBvQ,IAAzB,CAA8B,OAAKyM,MAAnC,EAA2C1H,MAAM/C,MAAjD;iBADJ;;;;eAMD,KAAKyK,MAAL,CAAY7L,QAAZ,CAAqB4P,QAAxB,EAAkC,iCAAlC,EAAqE;uBAAS1C,SAAS4D,iBAAT,CAA2B1R,IAA3B,CAAgC,OAAKyM,MAArC,EAA6C1H,KAA7C,CAAT;aAArE;;;gBAGI,KAAK0H,MAAL,CAAYO,MAAZ,CAAmBiR,YAAvB,EAAqC;;mBAE9B,KAAKxR,MAAL,CAAY7L,QAAZ,CAAqBkN,QAAxB,EAAkC,uBAAlC,EAA2D,iBAAS;2BAC3DrB,MAAL,CAAY7L,QAAZ,CAAqBkN,QAArB,CAA8B0R,KAA9B,GAAsC,CAAC,OAAK/S,MAAL,CAAYoC,KAAb,IAAsB9J,MAAMpD,IAAN,KAAe,YAA3E;iBADJ;;;mBAKG,KAAK8K,MAAL,CAAY7L,QAAZ,CAAqBkN,QAAxB,EAAkC,mDAAlC,EAAuF,iBAAS;2BACvFrB,MAAL,CAAY7L,QAAZ,CAAqBkN,QAArB,CAA8BvH,OAA9B,GAAwC,CACpC,WADoC,EAEpC,YAFoC,EAGtCrC,QAHsC,CAG7Ba,MAAMpD,IAHuB,CAAxC;iBADJ;;;mBAQG,KAAK8K,MAAL,CAAY7L,QAAZ,CAAqBkN,QAAxB,EAAkC,kBAAlC,EAAsD,iBAAS;2BACtDrB,MAAL,CAAYoD,cAAZ,CAA2B9K,KAA3B;iBADJ;;;;eAOA,KAAK0H,MAAL,CAAY7L,QAAZ,CAAqBwP,MAArB,CAA4BnC,MADhC,EAEI,OAFJ,EAGI,iBAAS;;;oBAGC9G,WAAWpC,MAAM0a,iCAAvB;oBACMC,OAAO,IAAI,EAAjB;oBACIC,YAAY,CAAhB;;;oBAGI5a,MAAM6a,MAAN,GAAe,CAAf,IAAoB7a,MAAM8a,MAAN,GAAe,CAAvC,EAA0C;wBAClC1Y,QAAJ,EAAc;+BACLsF,MAAL,CAAYkR,cAAZ,CAA2B+B,IAA3B;oCACY,CAAC,CAAb;qBAFJ,MAGO;+BACEjT,MAAL,CAAYiR,cAAZ,CAA2BgC,IAA3B;oCACY,CAAZ;;;;;oBAKJ3a,MAAM6a,MAAN,GAAe,CAAf,IAAoB7a,MAAM8a,MAAN,GAAe,CAAvC,EAA0C;wBAClC1Y,QAAJ,EAAc;+BACLsF,MAAL,CAAYiR,cAAZ,CAA2BgC,IAA3B;oCACY,CAAZ;qBAFJ,MAGO;+BACEjT,MAAL,CAAYkR,cAAZ,CAA2B+B,IAA3B;oCACY,CAAC,CAAb;;;;;oBAKHC,cAAc,CAAd,IAAmB,OAAKlT,MAAL,CAAYb,KAAZ,CAAkBqC,MAAlB,GAA2B,CAA/C,IAAsD0R,cAAc,CAAC,CAAf,IAAoB,OAAKlT,MAAL,CAAYb,KAAZ,CAAkBqC,MAAlB,GAA2B,CAAzG,EAA6G;0BACnG7I,cAAN;;aAlCZ,EAqCI,QArCJ,EAsCI,KAtCJ;;;;;;;gCA2CI;iBACC2Y,MAAL,CAAY,KAAZ;;;;;;ACjoBR;AACA;AAQA,IAAM7U,QAAQ;SAAA,mBACF;;;;cAEEqE,WAAN,CAAkB,KAAK3M,QAAL,CAAcC,OAAhC,EAAyC,KAAKmM,MAAL,CAAYS,UAAZ,CAAuByM,KAAhE,EAAuE,IAAvE;;;cAGM4F,cAAN,CAAqB9f,IAArB,CAA0B,IAA1B;;;YAGI,CAAC9E,MAAMyD,EAAN,CAAS5B,MAAT,CAAgB1B,OAAO0kB,KAAvB,CAAL,EAAoC;kBAE3BC,UADL,CACgB,KAAKhT,MAAL,CAAYiT,IAAZ,CAAiB/W,KAAjB,CAAuBgX,GADvC,EAEK/f,IAFL,CAEU,YAAM;sBACF2O,KAAN,CAAY9O,IAAZ;aAHR,EAKKQ,KALL,CAKW,iBAAS;sBACP0M,KAAL,CAAWU,IAAX,CAAgB,0BAAhB,EAA4CuC,KAA5C;aANR;SADJ,MASO;kBACGrB,KAAN,CAAY9O,IAAZ,CAAiB,IAAjB;;KAnBE;;;;;kBAAA,0BAyBK7E,KAzBL,EAyBY;YACZwP,QAAQzP,MAAMyD,EAAN,CAASlC,MAAT,CAAgBtB,KAAhB,IAAyBA,MAAM0H,KAAN,CAAY,GAAZ,CAAzB,GAA4C,KAAKmK,MAAL,CAAYrC,KAAZ,CAAkB9H,KAAlB,CAAwB,GAAxB,CAA1D;YACMsd,UAAU,MAAMxV,MAAM,CAAN,CAAN,GAAiBA,MAAM,CAAN,CAAjC;aACK/J,QAAL,CAAcC,OAAd,CAAsBxD,KAAtB,CAA4B+iB,aAA5B,GAA+CD,OAA/C;;YAEI,KAAKlU,SAAL,CAAef,EAAnB,EAAuB;gBACbX,SAAS,GAAf;gBACM8V,SAAS,CAAC9V,SAAS4V,OAAV,KAAsB5V,SAAS,EAA/B,CAAf;;iBAEKqB,KAAL,CAAWvO,KAAX,CAAiBijB,SAAjB,oBAA4CD,MAA5C;;KAlCE;;;;SAAA,mBAuCF;;;YACE5T,SAAS,IAAf;;;YAGM3G,UAAU;kBACN2G,OAAOO,MAAP,CAAcoB,IAAd,CAAmB8H,MADb;sBAEFzJ,OAAO8T,QAFL;oBAGJ,KAHI;sBAIF,KAJE;mBAKL,KALK;mBAML,IANK;yBAOC,CAPD;qBAQH,OARG;yBASC,CAAC,KAAKvT,MAAL,CAAY0F,UAAZ,CAAuBkJ;SATzC;YAWMjS,SAASzO,MAAMslB,cAAN,CAAqB1a,OAArB,CAAf;;;YAGIyC,SAASkE,OAAOb,KAAP,CAAapF,YAAb,CAA0B,KAA1B,CAAb;;;YAGItL,MAAMyD,EAAN,CAASyB,KAAT,CAAemI,MAAf,CAAJ,EAA4B;qBACfkE,OAAOb,KAAP,CAAapF,YAAb,CAA0BiG,OAAOO,MAAP,CAAcpL,UAAd,CAAyBsY,KAAzB,CAA+Bxb,EAAzD,CAAT;;;YAGEA,KAAKxD,MAAMulB,YAAN,CAAmBlY,MAAnB,CAAX;;;YAGM8G,SAASnU,MAAMsE,aAAN,CAAoB,QAApB,CAAf;YACMqN,MAAM3R,MAAMoM,MAAN,CAAamF,OAAOO,MAAP,CAAciT,IAAd,CAAmB/W,KAAnB,CAAyBmG,MAAtC,EAA8C3Q,EAA9C,EAAkDiL,MAAlD,CAAZ;eACOjK,YAAP,CAAoB,KAApB,EAA2BmN,GAA3B;eACOnN,YAAP,CAAoB,iBAApB,EAAuC,EAAvC;eACOA,YAAP,CAAoB,mBAApB,EAAyC,EAAzC;eACOA,YAAP,CAAoB,OAApB,EAA6B,UAA7B;;;YAGMmB,UAAU3F,MAAMsE,aAAN,CAAoB,KAApB,CAAhB;gBACQkC,WAAR,CAAoB2N,MAApB;eACOzD,KAAP,GAAe1Q,MAAMwlB,cAAN,CAAqB7f,OAArB,EAA8B4L,OAAOb,KAArC,CAAf;;;cAGM1L,KAAN,CAAYhF,MAAMoM,MAAN,CAAamF,OAAOO,MAAP,CAAciT,IAAd,CAAmB/W,KAAnB,CAAyB+B,GAAtC,EAA2CvM,EAA3C,CAAZ,EAA4D,MAA5D,EAAoEyB,IAApE,CAAyE,oBAAY;gBAC7EjF,MAAMyD,EAAN,CAASyB,KAAT,CAAe/B,QAAf,CAAJ,EAA8B;;;;;gBAKxBZ,MAAM,IAAIoU,GAAJ,CAAQxT,SAAS,CAAT,EAAYsiB,eAApB,CAAZ;;;gBAGIC,QAAJ,GAAkBnjB,IAAImjB,QAAJ,CAAa/d,KAAb,CAAmB,GAAnB,EAAwB,CAAxB,CAAlB;;;mBAGO+I,KAAP,CAAalM,YAAb,CAA0B,QAA1B,EAAoCjC,IAAI6L,IAAxC;;;eAGG0F,SAAH,CAAahP,IAAb,CAAkByM,MAAlB;SAfJ;;;;eAoBOyN,KAAP,GAAe,IAAI7e,OAAO0kB,KAAP,CAAac,MAAjB,CAAwBxR,MAAxB,CAAf;;eAEOzD,KAAP,CAAa+D,MAAb,GAAsB,IAAtB;eACO/D,KAAP,CAAae,WAAb,GAA2B,CAA3B;;;YAGIF,OAAOR,SAAP,CAAiBf,EAArB,EAAyB;mBACdgP,KAAP,CAAa4G,gBAAb;;;;eAIGlV,KAAP,CAAamB,IAAb,GAAoB,YAAM;mBACfmN,KAAP,CAAanN,IAAb,GAAoB5M,IAApB,CAAyB,YAAM;uBACpByL,KAAP,CAAa+D,MAAb,GAAsB,KAAtB;aADJ;SADJ;;eAMO/D,KAAP,CAAawG,KAAb,GAAqB,YAAM;mBAChB8H,KAAP,CAAa9H,KAAb,GAAqBjS,IAArB,CAA0B,YAAM;uBACrByL,KAAP,CAAa+D,MAAb,GAAsB,IAAtB;aADJ;SADJ;;eAMO/D,KAAP,CAAamV,IAAb,GAAoB,YAAM;mBACf3O,KAAP;mBACOzF,WAAP,GAAqB,CAArB;SAFJ;;;YAMMA,WA1FF,GA0FkBF,OAAOb,KA1FzB,CA0FEe,WA1FF;;eA2FGT,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,aAApC,EAAmD;eAAA,iBACzC;uBACKe,WAAP;aAF2C;eAAA,eAI3C1F,IAJ2C,EAIrC;;;oBAGE0I,MAHF,GAGalD,OAAOb,KAHpB,CAGE+D,MAHF;;;;uBAMC/D,KAAP,CAAa0F,OAAb,GAAuB,IAAvB;;;sBAGMjL,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,SAA/C;;;uBAGOsO,KAAP,CAAa8G,cAAb,CAA4B/Z,IAA5B,EAAkCzG,KAAlC,CAAwC,YAAM;;iBAA9C;;;oBAKImP,MAAJ,EAAY;2BACDyC,KAAP;;;SAtBZ;;;YA4BIjE,QAAQ1B,OAAOO,MAAP,CAAcmB,KAAd,CAAoB8S,QAAhC;eACO/U,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,cAApC,EAAoD;eAAA,iBAC1C;uBACKuC,KAAP;aAF4C;eAAA,eAI5ChT,KAJ4C,EAIrC;uBACA+e,KAAP,CACKgH,eADL,CACqB/lB,KADrB,EAEKgF,IAFL,CAEU,YAAM;4BACAhF,KAAR;0BACMkL,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,YAA/C;iBAJR,EAMKpL,KANL,CAMW,iBAAS;;wBAER2P,MAAMmH,IAAN,KAAe,OAAnB,EAA4B;iCACfoB,YAAT,CAAsB1Y,IAAtB,CAA2ByM,MAA3B,EAAmC,EAAnC;;iBATZ;;SALR;;;YAqBMwB,MA7IF,GA6IaxB,OAAOO,MA7IpB,CA6IEiB,MA7IF;;eA8IG/B,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,QAApC,EAA8C;eAAA,iBACpC;uBACKqC,MAAP;aAFsC;eAAA,eAItC9S,KAJsC,EAI/B;uBACA+e,KAAP,CAAaiH,SAAb,CAAuBhmB,KAAvB,EAA8BgF,IAA9B,CAAmC,YAAM;6BAC5BhF,KAAT;0BACMkL,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,cAA/C;iBAFJ;;SALR;;;YAaMsC,KA3JF,GA2JYzB,OAAOO,MA3JnB,CA2JEkB,KA3JF;;eA4JGhC,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,OAApC,EAA6C;eAAA,iBACnC;uBACKsC,KAAP;aAFqC;eAAA,eAIrC/S,KAJqC,EAI9B;oBACD0I,SAAS3I,MAAMyD,EAAN,CAAS+E,OAAT,CAAiBvI,KAAjB,IAA0BA,KAA1B,GAAkC,KAAjD;;uBAEO+e,KAAP,CAAaiH,SAAb,CAAuBtd,SAAS,CAAT,GAAa4I,OAAOO,MAAP,CAAciB,MAAlD,EAA0D9N,IAA1D,CAA+D,YAAM;4BACzD0D,MAAR;0BACMwC,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,cAA/C;iBAFJ;;SAPR;;;YAeMwC,IA3KF,GA2KW3B,OAAOO,MA3KlB,CA2KEoB,IA3KF;;eA4KGlC,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,MAApC,EAA4C;eAAA,iBAClC;uBACKwC,IAAP;aAFoC;eAAA,eAIpCjT,KAJoC,EAI7B;oBACD0I,SAAS3I,MAAMyD,EAAN,CAAS+E,OAAT,CAAiBvI,KAAjB,IAA0BA,KAA1B,GAAkCsR,OAAOO,MAAP,CAAcoB,IAAd,CAAmB8H,MAApE;;uBAEOgE,KAAP,CAAakH,OAAb,CAAqBvd,MAArB,EAA6B1D,IAA7B,CAAkC,YAAM;2BAC7B0D,MAAP;iBADJ;;SAPR;;;YAcIwd,mBAAJ;eACOnH,KAAP,CACKoH,WADL,GAEKnhB,IAFL,CAEU,iBAAS;yBACEsC,KAAb;SAHR,EAKKjC,KALL,CAKW,iBAAS;mBACP0M,KAAL,CAAWU,IAAX,CAAgBuC,KAAhB;SANR;;eASOjE,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,YAApC,EAAkD;eAAA,iBACxC;uBACKyV,UAAP;;SAFR;;;eAOOnV,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,OAApC,EAA6C;eAAA,iBACnC;uBACKa,OAAOE,WAAP,KAAuBF,OAAOqE,QAArC;;SAFR;;;gBAOQyQ,GAAR,CAAY,CACR9U,OAAOyN,KAAP,CAAasH,aAAb,EADQ,EAER/U,OAAOyN,KAAP,CAAauH,cAAb,EAFQ,CAAZ,EAGGthB,IAHH,CAGQ,sBAAc;gBACZwK,QAAQzP,MAAMwmB,cAAN,CAAqBC,WAAW,CAAX,CAArB,EAAoCA,WAAW,CAAX,CAApC,CAAd;kBACM7B,cAAN,CAAqB9f,IAArB,SAAgC2K,KAAhC;SALJ;;;eASOuP,KAAP,CAAa0H,YAAb,CAA0BnV,OAAOO,MAAP,CAAc6U,SAAxC,EAAmD1hB,IAAnD,CAAwD,iBAAS;mBACtD6M,MAAP,CAAc6U,SAAd,GAA0Bpb,KAA1B;SADJ;;;eAKOyT,KAAP,CAAa4H,aAAb,GAA6B3hB,IAA7B,CAAkC,iBAAS;mBAChC6M,MAAP,CAAcM,KAAd,GAAsBA,KAAtB;eACGyB,QAAH,CAAY/O,IAAZ;SAFJ;;;eAMOka,KAAP,CAAa6H,cAAb,GAA8B5hB,IAA9B,CAAmC,iBAAS;0BAC1BsC,KAAd;kBACM4D,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,YAA/C;SAFJ;;;eAMOsO,KAAP,CAAa8H,WAAb,GAA2B7hB,IAA3B,CAAgC,iBAAS;mBAC9ByL,KAAP,CAAakF,QAAb,GAAwBrO,KAAxB;kBACM4D,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,gBAA/C;SAFJ;;;eAMOsO,KAAP,CAAa+H,aAAb,GAA6B9hB,IAA7B,CAAkC,kBAAU;mBACjCyL,KAAP,CAAawN,UAAb,GAA0B5C,MAA1B;qBACSxI,KAAT,CAAehO,IAAf,CAAoByM,MAApB;SAFJ;;eAKOyN,KAAP,CAAa7U,EAAb,CAAgB,WAAhB,EAA6B,gBAAQ;gBAC7B+U,MAAM,IAAV;;gBAEIlb,KAAKgjB,IAAL,CAAUplB,MAAd,EAAsB;sBACZ5B,MAAMinB,SAAN,CAAgBjjB,KAAKgjB,IAAL,CAAU,CAAV,EAAargB,IAA7B,CAAN;;;qBAGKwY,OAAT,CAAiBra,IAAjB,CAAsByM,MAAtB,EAA8B2N,GAA9B;SAPJ;;eAUOF,KAAP,CAAa7U,EAAb,CAAgB,QAAhB,EAA0B,YAAM;gBACxBnK,MAAMyD,EAAN,CAASuC,OAAT,CAAiBuL,OAAOyN,KAAP,CAAahZ,OAA9B,KAA0CuL,OAAOR,SAAP,CAAiBf,EAA/D,EAAmE;oBACzDkX,QAAQ3V,OAAOyN,KAAP,CAAahZ,OAA3B;;;;sBAIMxB,YAAN,CAAmB,UAAnB,EAA+B,CAAC,CAAhC;;SANR;;eAUOwa,KAAP,CAAa7U,EAAb,CAAgB,MAAhB,EAAwB,YAAM;;gBAEtBoH,OAAOb,KAAP,CAAa+D,MAAjB,EAAyB;sBACftJ,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,MAA/C;;mBAEGA,KAAP,CAAa+D,MAAb,GAAsB,KAAtB;kBACMtJ,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,SAA/C;SANJ;;eASOsO,KAAP,CAAa7U,EAAb,CAAgB,OAAhB,EAAyB,YAAM;mBACpBuG,KAAP,CAAa+D,MAAb,GAAsB,IAAtB;kBACMtJ,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,OAA/C;SAFJ;;eAKOsO,KAAP,CAAa7U,EAAb,CAAgB,YAAhB,EAA8B,gBAAQ;mBAC3BuG,KAAP,CAAa0F,OAAb,GAAuB,KAAvB;0BACcpS,KAAKmjB,OAAnB;kBACMhc,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,YAA/C;SAHJ;;eAMOsO,KAAP,CAAa7U,EAAb,CAAgB,UAAhB,EAA4B,gBAAQ;mBACzBuG,KAAP,CAAaqF,QAAb,GAAwB/R,KAAKwV,OAA7B;kBACMrO,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,UAA/C;;;gBAGI5E,SAAS9H,KAAKwV,OAAd,EAAuB,EAAvB,MAA+B,CAAnC,EAAsC;sBAC5BrO,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,gBAA/C;;;;;mBAKGsO,KAAP,CAAa8H,WAAb,GAA2B7hB,IAA3B,CAAgC,iBAAS;oBACjCsC,UAAUgK,OAAOb,KAAP,CAAakF,QAA3B,EAAqC;2BAC1BlF,KAAP,CAAakF,QAAb,GAAwBrO,KAAxB;0BACM4D,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,gBAA/C;;aAHR;SAXJ;;eAmBOsO,KAAP,CAAa7U,EAAb,CAAgB,QAAhB,EAA0B,YAAM;mBACrBuG,KAAP,CAAa0F,OAAb,GAAuB,KAAvB;kBACMjL,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,QAA/C;kBACMvF,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,MAA/C;SAHJ;;eAMOsO,KAAP,CAAa7U,EAAb,CAAgB,OAAhB,EAAyB,YAAM;mBACpBuG,KAAP,CAAa+D,MAAb,GAAsB,IAAtB;kBACMtJ,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,OAA/C;SAFJ;;eAKOsO,KAAP,CAAa7U,EAAb,CAAgB,OAAhB,EAAyB,kBAAU;mBACxBuG,KAAP,CAAauE,KAAb,GAAqBlK,MAArB;kBACMI,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,OAA/C;SAFJ;;;mBAMW;mBAAMV,GAAGoX,KAAH,CAAStiB,IAAT,CAAcyM,MAAd,CAAN;SAAX,EAAwC,CAAxC;;CA1WR;;ACTA;AACA;;AAQA,SAAS8V,cAAT,CAAwBpnB,KAAxB,EAA+B;YACnBA,KAAR;aACS,QAAL;mBACW,IAAP;;aAEC,IAAL;mBACW,QAAP;;aAEC,QAAL;mBACW,IAAP;;aAEC,IAAL;mBACW,QAAP;;aAEC,QAAL;mBACW,IAAP;;aAEC,IAAL;mBACW,QAAP;;aAEC,OAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,OAAP;;aAEC,OAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,OAAP;;aAEC,QAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,QAAP;;aAEC,OAAL;mBACW,GAAP;;aAEC,GAAL;mBACW,OAAP;;;mBAGO,SAAP;;;;AAIZ,SAASqnB,eAAT,CAAyBC,MAAzB,EAAiC;QACzBvnB,MAAMyD,EAAN,CAASyB,KAAT,CAAeqiB,MAAf,CAAJ,EAA4B;eACjBA,MAAP;;;WAGGvnB,MAAMsR,MAAN,CAAaiW,OAAO1Y,GAAP,CAAW;eAASwY,eAAeG,KAAf,CAAT;KAAX,CAAb,CAAP;;;AAGJ,IAAMzZ,UAAU;SAAA,mBACJ;;;;cAEEsE,WAAN,CAAkB,KAAK3M,QAAL,CAAcC,OAAhC,EAAyC,KAAKmM,MAAL,CAAYS,UAAZ,CAAuByM,KAAhE,EAAuE,IAAvE;;;gBAGQ4F,cAAR,CAAuB9f,IAAvB,CAA4B,IAA5B;;;YAGI9E,MAAMyD,EAAN,CAAS5B,MAAT,CAAgB1B,OAAOsnB,EAAvB,KAA8BznB,MAAMyD,EAAN,CAAS+G,QAAT,CAAkBrK,OAAOsnB,EAAP,CAAU9B,MAA5B,CAAlC,EAAuE;oBAC3D/R,KAAR,CAAc9O,IAAd,CAAmB,IAAnB;SADJ,MAEO;;kBAEGggB,UAAN,CAAiB,KAAKhT,MAAL,CAAYiT,IAAZ,CAAiBhX,OAAjB,CAAyBiX,GAA1C,EAA+C1f,KAA/C,CAAqD,iBAAS;sBACrD0M,KAAL,CAAWU,IAAX,CAAgB,4BAAhB,EAA8CuC,KAA9C;aADJ;;;;mBAMOyS,uBAAP,GAAiCvnB,OAAOunB,uBAAP,IAAkC,EAAnE;;;mBAGOA,uBAAP,CAA+B1O,IAA/B,CAAoC,YAAM;wBAC9BpF,KAAR,CAAc9O,IAAd;aADJ;;;mBAKO6iB,uBAAP,GAAiC,YAAM;uBAC5BD,uBAAP,CAA+B3hB,OAA/B,CAAuC,oBAAY;;iBAAnD;aADJ;;KA3BI;;;;YAAA,oBAoCH6hB,OApCG,EAoCM;;;;;;YAIV5nB,MAAMyD,EAAN,CAAS+G,QAAT,CAAkB,KAAKwU,KAAL,CAAW6I,YAA7B,CAAJ,EAAgD;sCAC1B,KAAK7I,KAAL,CAAW6I,YAAX,EAD0B;gBACpCzV,KADoC,uBACpCA,KADoC;;gBAGxCpS,MAAMyD,EAAN,CAASyB,KAAT,CAAekN,KAAf,CAAJ,EAA2B;qBAClBN,MAAL,CAAYM,KAAZ,GAAoBA,KAApB;mBACGyB,QAAH,CAAY/O,IAAZ,CAAiB,IAAjB;;;;;;YAMFwC,MAAM,KAAKwK,MAAL,CAAYhQ,IAAZ,CAAiBgmB,MAA7B;YACI9nB,MAAMyD,EAAN,CAASlC,MAAT,CAAgB+F,GAAhB,KAAwB,CAACtH,MAAMyD,EAAN,CAASyB,KAAT,CAAeoC,GAAf,CAA7B,EAAkD;gBACxC/E,MAAMvC,MAAMoM,MAAN,CAAa,KAAK0F,MAAL,CAAYiT,IAAZ,CAAiBhX,OAAjB,CAAyBgC,GAAtC,EAA2C6X,OAA3C,EAAoDtgB,GAApD,CAAZ;;kBAGKtC,KADL,CACWzC,GADX,EAEK0C,IAFL,CAEU,kBAAU;oBACRjF,MAAMyD,EAAN,CAAS5B,MAAT,CAAgBsD,MAAhB,CAAJ,EAA6B;2BACpB2M,MAAL,CAAYM,KAAZ,GAAoBjN,OAAO4iB,KAAP,CAAa,CAAb,EAAgBC,OAAhB,CAAwB5V,KAA5C;uBACGyB,QAAH,CAAY/O,IAAZ;;aALZ,EAQKQ,KARL,CAQW,YAAM,EARjB;;KAvDI;;;;kBAAA,4BAoEK;YACPmK,QAAQ,KAAKqC,MAAL,CAAYrC,KAAZ,CAAkB9H,KAAlB,CAAwB,GAAxB,CAAd;aACKjC,QAAL,CAAcC,OAAd,CAAsBxD,KAAtB,CAA4B+iB,aAA5B,GAA+C,MAAMzV,MAAM,CAAN,CAAN,GAAiBA,MAAM,CAAN,CAAhE;KAtEQ;;;;SAAA,mBA0EJ;YACE8B,SAAS,IAAf;;;YAGM0W,YAAY1W,OAAOb,KAAP,CAAapF,YAAb,CAA0B,IAA1B,CAAlB;YACI,CAACtL,MAAMyD,EAAN,CAASyB,KAAT,CAAe+iB,SAAf,CAAD,IAA8BA,UAAU3Z,UAAV,CAAqB,UAArB,CAAlC,EAAoE;;;;;YAKhEjB,SAASkE,OAAOb,KAAP,CAAapF,YAAb,CAA0B,KAA1B,CAAb;;;YAGItL,MAAMyD,EAAN,CAASyB,KAAT,CAAemI,MAAf,CAAJ,EAA4B;qBACfkE,OAAOb,KAAP,CAAapF,YAAb,CAA0B,KAAKwG,MAAL,CAAYpL,UAAZ,CAAuBsY,KAAvB,CAA6Bxb,EAAvD,CAAT;;;;YAIEokB,UAAU5nB,MAAMkoB,cAAN,CAAqB7a,MAArB,CAAhB;YACM7J,KAAKxD,MAAMmoB,UAAN,CAAiB5W,OAAO1B,QAAxB,CAAX;YACMxL,YAAYrE,MAAMsE,aAAN,CAAoB,KAApB,EAA2B,EAAEd,MAAF,EAA3B,CAAlB;eACOkN,KAAP,GAAe1Q,MAAMwlB,cAAN,CAAqBnhB,SAArB,EAAgCkN,OAAOb,KAAvC,CAAf;;;eAGOA,KAAP,CAAalM,YAAb,CAA0B,QAA1B,EAAoCxE,MAAMoM,MAAN,CAAamF,OAAOO,MAAP,CAAciT,IAAd,CAAmBhX,OAAnB,CAA2BsG,MAAxC,EAAgDuT,OAAhD,CAApC;;;;eAIO5I,KAAP,GAAe,IAAI7e,OAAOsnB,EAAP,CAAU9B,MAAd,CAAqBniB,EAArB,EAAyB;4BAAA;wBAExB;0BACE+N,OAAOO,MAAP,CAAcuT,QAAd,GAAyB,CAAzB,GAA6B,CAD/B;0BAEE9T,OAAOR,SAAP,CAAiBf,EAAjB,GAAsB,CAAtB,GAA0B,CAF5B;qBAGH,CAHG;0BAIE,CAJF;gCAKQ,CALR;gCAMQ,CANR;2BAOG,CAPH;6BAQK,CARL;;;;iCAYS7P,SAASA,OAAO0W,QAAP,CAAgBzI,IAAzB,GAAgC,IAZzC;;;gCAeQmD,OAAOgG,QAAP,CAAgByD,MAAhB,GAAyB,CAAzB,GAA6B,CAfrC;8BAgBMzJ,OAAOO,MAAP,CAAcyF,QAAd,CAAuB4D;aAlBL;oBAoB5B;uBAAA,mBACItR,KADJ,EACW;;;wBAGP7J,MAAMyD,EAAN,CAAS5B,MAAT,CAAgB0P,OAAOb,KAAP,CAAauE,KAA7B,CAAJ,EAAyC;;;;wBAInClK,SAAS;8BACLlB,MAAM7F;qBADhB;;;4BAKQ6F,MAAM7F,IAAd;6BACS,CAAL;mCACWokB,OAAP,GACI,sOADJ;;;6BAIC,CAAL;mCACWA,OAAP,GACI,sHADJ;;;6BAIC,GAAL;mCACWA,OAAP,GACI,oIADJ;;;6BAIC,GAAL;6BACK,GAAL;mCACWA,OAAP,GAAiB,sFAAjB;;;;mCAIOA,OAAP,GAAiB,0BAAjB;;;;2BAID1X,KAAP,CAAauE,KAAb,GAAqBlK,MAArB;;0BAEMI,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,OAA/C;iBAzCA;uCAAA,qCA2CsB;0BAChBvF,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,eAA/C,EAAgE,KAAhE,EAAuE;iCAC1Da,OAAOb,KAAP,CAAayC;qBAD1B;iBA5CA;oCAAA,gCAgDiBtJ,KAhDjB,EAgDwB;;wBAElBwe,WAAWxe,MAAM/C,MAAvB;;;2BAGO4J,KAAP,CAAa4X,YAAb,GAA4BD,SAASE,eAAT,EAA5B;;0BAEMpd,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,YAA/C;iBAvDA;uBAAA,mBAyDI7G,KAzDJ,EAyDW;;wBAELwe,WAAWxe,MAAM/C,MAAvB;;;4BAGQ0hB,QAAR,CAAiB1jB,IAAjB,CAAsByM,MAAtB,EAA8BqW,OAA9B;;;2BAGOlX,KAAP,CAAamB,IAAb,GAAoB,YAAM;iCACb4W,SAAT;qBADJ;;2BAIO/X,KAAP,CAAawG,KAAb,GAAqB,YAAM;iCACdwR,UAAT;qBADJ;;2BAIOhY,KAAP,CAAamV,IAAb,GAAoB,YAAM;iCACb8C,SAAT;qBADJ;;2BAIOjY,KAAP,CAAakF,QAAb,GAAwByS,SAASvB,WAAT,EAAxB;2BACOpW,KAAP,CAAa+D,MAAb,GAAsB,IAAtB;;;2BAGO/D,KAAP,CAAae,WAAb,GAA2B,CAA3B;2BACOT,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,aAApC,EAAmD;2BAAA,iBACzC;mCACKnQ,OAAO8nB,SAASxB,cAAT,EAAP,CAAP;yBAF2C;2BAAA,eAI3C9a,IAJ2C,EAIrC;;gCAEE0I,MAFF,GAEalD,OAAOb,KAFpB,CAEE+D,MAFF;;;;mCAKC/D,KAAP,CAAa0F,OAAb,GAAuB,IAAvB;;;kCAGMjL,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,SAA/C;;;qCAGSkY,MAAT,CAAgB7c,IAAhB;;;gCAGI0I,MAAJ,EAAY;uCACDyC,KAAP;;;qBAnBZ;;;2BAyBOlG,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,cAApC,EAAoD;2BAAA,iBAC1C;mCACK2X,SAASE,eAAT,EAAP;yBAF4C;2BAAA,eAI5CtoB,KAJ4C,EAIrC;qCACE+lB,eAAT,CAAyB/lB,KAAzB;;qBALR;;;2BAUO+Q,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,SAApC,EAA+C;2BAAA,iBACrC;mCACK2W,eAAegB,SAASQ,kBAAT,EAAf,CAAP;yBAFuC;2BAAA,eAIvC5oB,KAJuC,EAIhC;gCACDkT,UAAUlT,KAAhB;;;qCAGS6oB,kBAAT,CAA4BzB,eAAelU,OAAf,CAA5B;;;kCAGMhI,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,kBAA/C,EAAmE,KAAnE,EAA0E;;6BAA1E;;qBAXR;;;wBAkBMqC,MA9EK,GA8EMxB,OAAOO,MA9Eb,CA8ELiB,MA9EK;;2BA+EJ/B,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,QAApC,EAA8C;2BAAA,iBACpC;mCACKqC,MAAP;yBAFsC;2BAAA,eAItC9S,KAJsC,EAI/B;qCACEA,KAAT;qCACSgmB,SAAT,CAAmBlT,SAAS,GAA5B;kCACM5H,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,cAA/C;;qBAPR;;;wBAYMsC,KA3FK,GA2FKzB,OAAOO,MA3FZ,CA2FLkB,KA3FK;;2BA4FJhC,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,OAApC,EAA6C;2BAAA,iBACnC;mCACKsC,KAAP;yBAFqC;2BAAA,eAIrC/S,KAJqC,EAI9B;gCACD0I,SAAS3I,MAAMyD,EAAN,CAAS+E,OAAT,CAAiBvI,KAAjB,IAA0BA,KAA1B,GAAkC+S,KAAjD;oCACQrK,MAAR;qCACSA,SAAS,MAAT,GAAkB,QAA3B;kCACMwC,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,cAA/C;;qBARR;;;2BAaOM,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,YAApC,EAAkD;2BAAA,iBACxC;mCACK2X,SAASjC,WAAT,EAAP;;qBAFR;;;2BAOOpV,cAAP,CAAsBO,OAAOb,KAA7B,EAAoC,OAApC,EAA6C;2BAAA,iBACnC;mCACKa,OAAOE,WAAP,KAAuBF,OAAOqE,QAArC;;qBAFR;;;2BAOOhL,OAAP,CAAeqI,KAAf,GAAuBoV,SAASU,yBAAT,EAAvB;;;wBAGIxX,OAAOR,SAAP,CAAiBf,EAArB,EAAyB;+BACdU,KAAP,CAAalM,YAAb,CAA0B,UAA1B,EAAsC,CAAC,CAAvC;;;0BAGE2G,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,YAA/C;0BACMvF,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,gBAA/C;;;kCAGca,OAAOsD,MAAP,CAAcmU,SAA5B;;;2BAGOnU,MAAP,CAAcmU,SAAd,GAA0BC,YAAY,YAAM;;+BAEjCvY,KAAP,CAAaqF,QAAb,GAAwBsS,SAASa,sBAAT,EAAxB;;;4BAGI3X,OAAOb,KAAP,CAAayY,YAAb,KAA8B,IAA9B,IAAsC5X,OAAOb,KAAP,CAAayY,YAAb,GAA4B5X,OAAOb,KAAP,CAAaqF,QAAnF,EAA6F;kCACnF5K,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,UAA/C;;;;+BAIGA,KAAP,CAAayY,YAAb,GAA4B5X,OAAOb,KAAP,CAAaqF,QAAzC;;;4BAGIxE,OAAOb,KAAP,CAAaqF,QAAb,KAA0B,CAA9B,EAAiC;0CACfxE,OAAOsD,MAAP,CAAcmU,SAA5B;;;kCAGM7d,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,gBAA/C;;qBAjBkB,EAmBvB,GAnBuB,CAA1B;;;+BAsBW;+BAAMV,GAAGoX,KAAH,CAAStiB,IAAT,CAAcyM,MAAd,CAAN;qBAAX,EAAwC,EAAxC;iBApNA;6BAAA,yBAsNU1H,KAtNV,EAsNiB;;wBAEXwe,WAAWxe,MAAM/C,MAAvB;;;kCAGcyK,OAAOsD,MAAP,CAAcnD,OAA5B;;;;;;;;;4BASQ7H,MAAM7F,IAAd;6BACS,CAAC,CAAN;;kCAEUmH,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,YAA/C;;;mCAGOA,KAAP,CAAaqF,QAAb,GAAwBsS,SAASa,sBAAT,EAAxB;kCACM/d,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,UAA/C;;;;6BAIC,CAAL;mCACWA,KAAP,CAAa+D,MAAb,GAAsB,IAAtB;;;gCAGIlD,OAAOb,KAAP,CAAawC,IAAjB,EAAuB;;yCAEVyV,SAAT;yCACSF,SAAT;6BAHJ,MAIO;sCACGtd,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,OAA/C;;;;;6BAKH,CAAL;;gCAEQa,OAAOb,KAAP,CAAa0F,OAAjB,EAA0B;sCAChBjL,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,QAA/C;;mCAEGA,KAAP,CAAa0F,OAAb,GAAuB,KAAvB;;;gCAGI7E,OAAOb,KAAP,CAAa+D,MAAjB,EAAyB;sCACftJ,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,MAA/C;;mCAEGA,KAAP,CAAa+D,MAAb,GAAsB,KAAtB;;kCAEMtJ,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,SAA/C;;;mCAGOmE,MAAP,CAAcnD,OAAd,GAAwBuX,YAAY,YAAM;sCAChC9d,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,YAA/C;6BADoB,EAErB,EAFqB,CAAxB;;;;;gCAOIa,OAAOb,KAAP,CAAakF,QAAb,KAA0ByS,SAASvB,WAAT,EAA9B,EAAsD;uCAC3CpW,KAAP,CAAakF,QAAb,GAAwByS,SAASvB,WAAT,EAAxB;sCACM3b,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,gBAA/C;;;;qCAIK4M,cAAT,CAAwBxY,IAAxB,CAA6ByM,MAA7B,EAAqC+V,gBAAgBe,SAASe,yBAAT,EAAhB,CAArC;;;;6BAIC,CAAL;mCACW1Y,KAAP,CAAa+D,MAAb,GAAsB,IAAtB;;kCAEMtJ,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAOb,KAAxC,EAA+C,OAA/C;;;;;;;;0BAQFvF,aAAN,CAAoBrG,IAApB,CAAyByM,MAAzB,EAAiCA,OAAO7L,QAAP,CAAgBrB,SAAjD,EAA4D,aAA5D,EAA2E,KAA3E,EAAkF;8BACxEwF,MAAM7F;qBADhB;;;SA7TG,CAAf;;CAtGR;;AClEA;AACA;AAQA,IAAM0M,QAAQ;;SAAA,mBAEF;;YAEA,CAAC,KAAKA,KAAV,EAAiB;iBACRsB,KAAL,CAAWU,IAAX,CAAgB,yBAAhB;;;;;cAKEL,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuB9L,IAAvB,CAA4BuB,OAA5B,CAAoC,KAApC,EAA2C,KAAKvB,IAAhD,CAA3C,EAAkG,IAAlG;;;cAGM4L,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuB1C,QAAvB,CAAgC7H,OAAhC,CAAwC,KAAxC,EAA+C,KAAK6H,QAApD,CAA3C,EAA0G,IAA1G;;;;YAII,KAAKqE,OAAT,EAAkB;kBACR7B,WAAN,CAAkB,KAAK3M,QAAL,CAAcrB,SAAhC,EAA2C,KAAKyN,MAAL,CAAYS,UAAZ,CAAuB9L,IAAvB,CAA4BuB,OAA5B,CAAoC,KAApC,EAA2C,OAA3C,CAA3C,EAAgG,IAAhG;;;;YAIA,KAAK6I,OAAT,EAAkB;;iBAETnL,QAAL,CAAcC,OAAd,GAAwB3F,MAAMsE,aAAN,CAAoB,KAApB,EAA2B;uBACxC,KAAKwN,MAAL,CAAYS,UAAZ,CAAuBlC;aADV,CAAxB;;;kBAKMgZ,IAAN,CAAW,KAAK3Y,KAAhB,EAAuB,KAAKhL,QAAL,CAAcC,OAArC;;;iBAGKD,QAAL,CAAc2O,MAAd,GAAuBrU,MAAMsE,aAAN,CAAoB,MAApB,EAA4B;uBACxC,KAAKwN,MAAL,CAAYS,UAAZ,CAAuB8B;aADX,CAAvB;;iBAIK3O,QAAL,CAAcC,OAAd,CAAsBa,WAAtB,CAAkC,KAAKd,QAAL,CAAc2O,MAAhD;;;YAGA,KAAKH,OAAT,EAAkB;oBACN,KAAKrE,QAAb;qBACS,SAAL;4BACYiD,KAAR,CAAchO,IAAd,CAAmB,IAAnB;;;qBAGC,OAAL;0BACUgO,KAAN,CAAYhO,IAAZ,CAAiB,IAAjB;;;;;;SAPZ,MAaO,IAAI,KAAK6L,OAAT,EAAkB;kBACfpD,MAAN,CAAazI,IAAb,CAAkB,IAAlB;;;CArDZ;;ACTA;AACA;IAUMwkB;;;;;;iBAMU/X,MAAZ,EAAoB;;;;;aACXA,MAAL,GAAcA,MAAd;aACKgY,WAAL,GAAmBhY,OAAOO,MAAP,CAAcsR,GAAd,CAAkBmG,WAArC;aACKlL,OAAL,GAAe9M,OAAOZ,OAAP,IAAkBY,OAAOV,OAAzB,IAAoCU,OAAOO,MAAP,CAAcsR,GAAd,CAAkB/E,OAAtD,IAAiEre,MAAMyD,EAAN,CAASlC,MAAT,CAAgB,KAAKgoB,WAArB,CAAjE,IAAsG,KAAKA,WAAL,CAAiB3nB,MAAtI;aACK8P,OAAL,GAAe,KAAf;aACK2R,WAAL,GAAmB,KAAnB;aACK3d,QAAL,GAAgB;uBACD,IADC;8BAEM;SAFtB;aAIK8jB,OAAL,GAAe,IAAf;aACKC,MAAL,GAAc,IAAd;aACKC,SAAL,GAAiB,IAAjB;aACK/e,MAAL,GAAc,EAAd;aACKgf,WAAL,GAAmB,IAAnB;aACKC,cAAL,GAAsB,IAAtB;;;aAGKtG,cAAL,GAAsB,IAAI7gB,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;;kBAE9CwH,EAAL,CAAQ,QAAR,EAAkBzH,OAAlB;;;kBAGKyH,EAAL,CAAQ,OAAR,EAAiBxH,MAAjB;SALkB,CAAtB;;aAQKiP,IAAL;;;;;;;;;;+BAMG;;;gBACC,KAAKyM,OAAT,EAAkB;;oBAEV,CAACre,MAAMyD,EAAN,CAAS5B,MAAT,CAAgB1B,OAAO2nB,MAAvB,CAAD,IAAmC,CAAC9nB,MAAMyD,EAAN,CAAS5B,MAAT,CAAgB1B,OAAO2nB,MAAP,CAAc+B,GAA9B,CAAxC,EAA4E;0BAEnE/E,UADL,CACgB,KAAKvT,MAAL,CAAYO,MAAZ,CAAmBiT,IAAnB,CAAwB+E,SAAxB,CAAkC9E,GADlD,EAEK/f,IAFL,CAEU,YAAM;+BACH2O,KAAL;qBAHR,EAKKtO,KALL,CAKW,YAAM;;+BAEJykB,OAAL,CAAa,OAAb,EAAsB,IAAI3mB,KAAJ,CAAU,+BAAV,CAAtB;qBAPR;iBADJ,MAUO;yBACEwQ,KAAL;;;;;;;;;;;gCAQJ;;;;;iBAGCoW,gBAAL,CAAsB,KAAtB,EAA6B,SAA7B;;;iBAGK1G,cAAL,CAAoBre,IAApB,CAAyB,YAAM;uBACtBglB,gBAAL,CAAsB,sBAAtB;aADJ;;;iBAKKxX,SAAL;;;iBAGKyX,QAAL;;;;;;;;;;;;;;;;;mCA4BO;;iBAEFxkB,QAAL,CAAcrB,SAAd,GAA0BrE,MAAMsE,aAAN,CAAoB,KAApB,EAA2B;uBAC1C,KAAKiN,MAAL,CAAYO,MAAZ,CAAmBS,UAAnB,CAA8B6Q;aADf,CAA1B;iBAGK7R,MAAL,CAAY7L,QAAZ,CAAqBrB,SAArB,CAA+BmC,WAA/B,CAA2C,KAAKd,QAAL,CAAcrB,SAAzD;;;mBAGOwlB,GAAP,CAAWvS,QAAX,CAAoB6S,YAApB,CAAiCrC,OAAO+B,GAAP,CAAWO,cAAX,CAA0BC,SAA1B,CAAoCC,OAArE;;;mBAGOT,GAAP,CAAWvS,QAAX,CAAoBiT,SAApB,CAA8B,KAAKhZ,MAAL,CAAYO,MAAZ,CAAmBsR,GAAnB,CAAuBjI,QAArD;;;;iBAIKzV,QAAL,CAAc8kB,gBAAd,GAAiC,IAAI1C,OAAO+B,GAAP,CAAWY,kBAAf,CAAkC,KAAK/kB,QAAL,CAAcrB,SAAhD,CAAjC;;;iBAGKqmB,UAAL;;;;;;;;;qCAMS;;;gBACDrmB,SADC,GACa,KAAKkN,MAAL,CAAY7L,QADzB,CACDrB,SADC;;;gBAGL;;qBAEKolB,MAAL,GAAc,IAAI3B,OAAO+B,GAAP,CAAWc,SAAf,CAAyB,KAAKjlB,QAAL,CAAc8kB,gBAAvC,CAAd;;;qBAGKf,MAAL,CAAY3mB,gBAAZ,CAA6BglB,OAAO+B,GAAP,CAAWe,qBAAX,CAAiCC,IAAjC,CAAsCC,kBAAnE,EAAuF;2BAAS,OAAKC,kBAAL,CAAwBlhB,KAAxB,CAAT;iBAAvF,EAAgI,KAAhI;qBACK4f,MAAL,CAAY3mB,gBAAZ,CAA6BglB,OAAO+B,GAAP,CAAWmB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA1D,EAAoE;2BAAS,OAAKC,SAAL,CAAejW,KAAf,CAAT;iBAApE,EAAoG,KAApG;;;oBAGMrS,UAAU,IAAIklB,OAAO+B,GAAP,CAAWsB,UAAf,EAAhB;wBACQC,QAAR,GAAmB,KAAKC,MAAxB;;;;wBAIQC,iBAAR,GAA4BjnB,UAAUknB,WAAtC;wBACQC,kBAAR,GAA6BnnB,UAAUuL,YAAvC;wBACQ6b,oBAAR,GAA+BpnB,UAAUknB,WAAzC;wBACQG,qBAAR,GAAgCrnB,UAAUuL,YAA1C;;;wBAGQ+b,sBAAR,GAAiC,KAAjC;;;wBAGQC,kBAAR,CAA2B,CAAC,KAAKra,MAAL,CAAYyB,KAAxC;;qBAEKyW,MAAL,CAAYiB,UAAZ,CAAuB9nB,OAAvB;aAzBJ,CA0BE,OAAOM,CAAP,EAAU;qBACHgoB,SAAL,CAAehoB,CAAf;;;;;;;;;;;wCAQqB;;;gBAAfiF,KAAe,uEAAP,KAAO;;gBACrB,CAACA,KAAL,EAAY;8BACM,KAAKyhB,cAAnB;qBACKlkB,QAAL,CAAcrB,SAAd,CAAwBqE,eAAxB,CAAwC,iBAAxC;;;;gBAIEiV,SAAS,SAATA,MAAS,GAAM;oBACX5R,OAAO/L,MAAMmM,UAAN,CAAiB5G,KAAKqG,GAAL,CAAS,OAAK4d,OAAL,CAAaqC,gBAAb,EAAT,EAA0C,CAA1C,CAAjB,CAAb;oBACM9X,QAAW7B,KAAK8B,GAAL,CAAS,eAAT,EAA0B,OAAKzC,MAAL,CAAYO,MAAtC,CAAX,WAA8D/F,IAApE;uBACKrG,QAAL,CAAcrB,SAAd,CAAwBG,YAAxB,CAAqC,iBAArC,EAAwDuP,KAAxD;aAHJ;;iBAMK6V,cAAL,GAAsBX,YAAYtL,MAAZ,EAAoB,GAApB,CAAtB;;;;;;;;;;2CAOe9T,OAAO;;;;gBAEhByN,WAAW,IAAIwQ,OAAO+B,GAAP,CAAWiC,oBAAf,EAAjB;;;qBAGSC,2CAAT,GAAuD,IAAvD;qBACSC,gBAAT,GAA4B,IAA5B;;;;iBAIKxC,OAAL,GAAe3f,MAAMoiB,aAAN,CAAoB,KAAK1a,MAAzB,EAAiC+F,QAAjC,CAAf;;;iBAGKoS,SAAL,GAAiB,KAAKF,OAAL,CAAa0C,YAAb,EAAjB;;;gBAGI,CAAClsB,MAAMyD,EAAN,CAASyB,KAAT,CAAe,KAAKwkB,SAApB,CAAL,EAAqC;qBAC5BA,SAAL,CAAe3jB,OAAf,CAAuB,oBAAY;wBAC3BomB,aAAa,CAAb,IAAkBA,aAAa,CAAC,CAAhC,IAAqCA,WAAW,OAAK5a,MAAL,CAAYqE,QAAhE,EAA0E;4BAChEwW,cAAc,OAAK7a,MAAL,CAAY7L,QAAZ,CAAqB4P,QAAzC;;4BAEItV,MAAMyD,EAAN,CAASuC,OAAT,CAAiBomB,WAAjB,CAAJ,EAAmC;gCACzBC,gBAAgB,MAAM,OAAK9a,MAAL,CAAYqE,QAAlB,GAA6BuW,QAAnD;gCACMjN,MAAMlf,MAAMsE,aAAN,CAAoB,MAApB,EAA4B;uCAC7B,OAAKiN,MAAL,CAAYO,MAAZ,CAAmBS,UAAnB,CAA8ByU;6BAD7B,CAAZ;;gCAII7kB,KAAJ,CAAU0X,IAAV,GAAoBwS,cAAc5gB,QAAd,EAApB;wCACYjF,WAAZ,CAAwB0Y,GAAxB;;;iBAXZ;;;;;;;;iBAsBCsK,OAAL,CAAavD,SAAb,CAAuB,KAAK1U,MAAL,CAAYwB,MAAnC;;;;iBAIKyW,OAAL,CAAa1mB,gBAAb,CAA8BglB,OAAO+B,GAAP,CAAWmB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA3D,EAAqE;uBAAS,OAAKC,SAAL,CAAejW,KAAf,CAAT;aAArE;;;mBAGOnT,IAAP,CAAYgmB,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAA/B,EAAqC9kB,OAArC,CAA6C,gBAAQ;uBAC5CyjB,OAAL,CAAa1mB,gBAAb,CAA8BglB,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBpkB,IAAxB,CAA9B,EAA6D;2BAAS,OAAK8lB,SAAL,CAAe1iB,KAAf,CAAT;iBAA7D;aADJ;;;iBAKKkgB,OAAL,CAAa,QAAb;;;;;;;;;;;;kCASMlgB,OAAO;;;gBACLxF,SADK,GACS,KAAKkN,MAAL,CAAY7L,QADrB,CACLrB,SADK;;;;;gBAKPmoB,KAAK3iB,MAAM4iB,KAAN,EAAX;;;gBAGMthB,gBAAgB,SAAhBA,aAAgB,OAAQ;oBACpBtB,gBAAcpD,KAAKuB,OAAL,CAAa,IAAb,EAAmB,EAAnB,EAAuBgF,WAAvB,EAApB;sBACM7B,aAAN,CAAoBrG,IAApB,CAAyB,OAAKyM,MAA9B,EAAsC,OAAKA,MAAL,CAAYb,KAAlD,EAAyD7G,KAAzD;aAFJ;;oBAKQA,MAAMpD,IAAd;qBACSqhB,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwB6B,MAA7B;;;yBAGS3C,OAAL,CAAa,QAAb;;;kCAGclgB,MAAMpD,IAApB;;;yBAGKkmB,aAAL,CAAmB,IAAnB;;wBAEI,CAACH,GAAGI,QAAH,EAAL,EAAoB;;2BAEbxd,KAAH,GAAW/K,UAAUknB,WAArB;2BACGlc,MAAH,GAAYhL,UAAUuL,YAAtB;;;;;;;qBAOHkY,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBgC,iBAA7B;;;;;kCAKkBhjB,MAAMpD,IAApB;;;;;;;;;;;;;;;;;;;;;;;;;yBAyBKqmB,OAAL;;;qBAGChF,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBkC,uBAA7B;;;;;kCAKkBljB,MAAMpD,IAApB;;yBAEKumB,YAAL;;;;qBAIClF,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBoC,wBAA7B;;;;;;kCAMkBpjB,MAAMpD,IAApB;;yBAEKkmB,aAAL;;yBAEKO,aAAL;;;;qBAICpF,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBsC,OAA7B;qBACKrF,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBuC,QAA7B;qBACKtF,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwBwC,QAA7B;qBACKvF,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwByC,UAA7B;qBACKxF,OAAO+B,GAAP,CAAWyC,OAAX,CAAmBzB,IAAnB,CAAwB0C,KAA7B;kCACkB1jB,MAAMpD,IAApB;;;;;;;;;;;;;;;kCAYFoD,OAAO;iBACR2jB,MAAL;iBACKjc,MAAL,CAAYS,KAAZ,CAAkBU,IAAlB,CAAuB,WAAvB,EAAoC7I,KAApC;;;;;;;;;;;oCAQQ;;;gBACAxF,SADA,GACc,KAAKkN,MAAL,CAAY7L,QAD1B,CACArB,SADA;;gBAEJ0H,aAAJ;;;iBAGKwF,MAAL,CAAYpH,EAAZ,CAAe,OAAf,EAAwB,YAAM;uBACrBsf,MAAL,CAAYgE,eAAZ;aADJ;;iBAIKlc,MAAL,CAAYpH,EAAZ,CAAe,SAAf,EAA0B,YAAM;uBACrB,OAAKoH,MAAL,CAAYE,WAAnB;uBACO1F,IAAP;aAFJ;;iBAKKwF,MAAL,CAAYpH,EAAZ,CAAe,QAAf,EAAyB,YAAM;oBACrBujB,aAAa,OAAKnc,MAAL,CAAYE,WAA/B;;oBAEIzR,MAAMyD,EAAN,CAASyB,KAAT,CAAe,OAAKwkB,SAApB,CAAJ,EAAoC;;;;uBAI/BA,SAAL,CAAe3jB,OAAf,CAAuB,UAAComB,QAAD,EAAWlmB,KAAX,EAAqB;wBACpC8F,OAAOogB,QAAP,IAAmBA,WAAWuB,UAAlC,EAA8C;+BACrClE,OAAL,CAAamE,cAAb;+BACKjE,SAAL,CAAekE,MAAf,CAAsB3nB,KAAtB,EAA6B,CAA7B;;iBAHR;aAPJ;;;;mBAiBOnD,gBAAP,CAAwB,QAAxB,EAAkC,YAAM;oBAChC,OAAK0mB,OAAT,EAAkB;2BACTA,OAAL,CAAaqE,MAAb,CAAoBxpB,UAAUknB,WAA9B,EAA2ClnB,UAAUuL,YAArD,EAAmEkY,OAAO+B,GAAP,CAAWiE,QAAX,CAAoBC,MAAvF;;aAFR;;;;;;;;;+BAUG;;;gBACK1pB,SADL,GACmB,KAAKkN,MAAL,CAAY7L,QAD/B,CACKrB,SADL;;;gBAGC,CAAC,KAAKif,cAAV,EAA0B;qBACjB4J,aAAL;;;;iBAIC5J,cAAL,CACKre,IADL,CACU,YAAM;;uBAEHS,QAAL,CAAc8kB,gBAAd,CAA+BwD,UAA/B;;oBAEI;wBACI,CAAC,OAAK3K,WAAV,EAAuB;;+BAEdmG,OAAL,CAAayE,IAAb,CAAkB5pB,UAAUknB,WAA5B,EAAyClnB,UAAUuL,YAAnD,EAAiEkY,OAAO+B,GAAP,CAAWiE,QAAX,CAAoBC,MAArF;;;;+BAIKvE,OAAL,CAAarhB,KAAb;;;2BAGCkb,WAAL,GAAmB,IAAnB;iBAVJ,CAWE,OAAO6K,OAAP,EAAgB;;;2BAGThD,SAAL,CAAegD,OAAf;;aAnBZ,EAsBK5oB,KAtBL,CAsBW,YAAM,EAtBjB;;;;;;;;;wCA4BY;;iBAEPI,QAAL,CAAcrB,SAAd,CAAwBlC,KAAxB,CAA8BgsB,MAA9B,GAAuC,EAAvC;;;iBAGKzc,OAAL,GAAe,KAAf;;;gBAGI,KAAKH,MAAL,CAAYE,WAAZ,GAA0B,KAAKF,MAAL,CAAYqE,QAA1C,EAAoD;qBAC3CrE,MAAL,CAAYM,IAAZ;;;;;;;;;;uCAOO;;iBAENnM,QAAL,CAAcrB,SAAd,CAAwBlC,KAAxB,CAA8BgsB,MAA9B,GAAuC,CAAvC;;;iBAGKzc,OAAL,GAAe,IAAf;;;iBAGKH,MAAL,CAAY2F,KAAZ;;;;;;;;;;;;iCASK;;gBAED,KAAKmM,WAAT,EAAsB;qBACb6J,aAAL;;;;iBAICnD,OAAL,CAAa,OAAb;;;iBAGK+C,OAAL;;;;;;;;;kCAMM;;;;iBAEDxJ,cAAL,CACKre,IADL,CACU,YAAM;;oBAEJ,QAAKukB,OAAT,EAAkB;4BACTA,OAAL,CAAa4E,OAAb;;;;wBAIC9K,cAAL,GAAsB,IAAI7gB,OAAJ,CAAY,mBAAW;4BACpC0H,EAAL,CAAQ,QAAR,EAAkBzH,OAAlB;4BACK6O,MAAL,CAAYS,KAAZ,CAAkBC,GAAlB,CAAsB,QAAKuX,OAA3B;iBAFkB,CAAtB;;;wBAMKkB,UAAL;aAdR,EAgBKplB,KAhBL,CAgBW,YAAM,EAhBjB;;;;;;;;;;gCAuBIuE,OAAgB;;;8CAAN2B,IAAM;oBAAA;;;gBACd6iB,WAAW,KAAK1jB,MAAL,CAAYd,KAAZ,CAAjB;;gBAEI7J,MAAMyD,EAAN,CAAS/B,KAAT,CAAe2sB,QAAf,CAAJ,EAA8B;yBACjBtoB,OAAT,CAAiB,mBAAW;wBACpB/F,MAAMyD,EAAN,CAAS+G,QAAT,CAAkB8jB,OAAlB,CAAJ,EAAgC;gCACpBC,KAAR,UAAoB/iB,IAApB;;iBAFR;;;;;;;;;;;;;2BAcL3B,OAAOQ,UAAU;gBACZ,CAACrK,MAAMyD,EAAN,CAAS/B,KAAT,CAAe,KAAKiJ,MAAL,CAAYd,KAAZ,CAAf,CAAL,EAAyC;qBAChCc,MAAL,CAAYd,KAAZ,IAAqB,EAArB;;;iBAGCc,MAAL,CAAYd,KAAZ,EAAmBmP,IAAnB,CAAwB3O,QAAxB;;mBAEO,IAAP;;;;;;;;;;;;;;yCAWa0B,MAAMlG,MAAM;;;iBACpB0L,MAAL,CAAYS,KAAZ,CAAkBC,GAAlB,iCAAoDpM,IAApD;;iBAEK8jB,WAAL,GAAmB7U,WAAW,YAAM;wBAC3B0Y,MAAL;wBACKvD,gBAAL,CAAsB,oBAAtB;aAFe,EAGhBle,IAHgB,CAAnB;;;;;;;;;;yCAUalG,MAAM;gBACf,CAAC7F,MAAMyD,EAAN,CAAS7C,eAAT,CAAyB,KAAK+oB,WAA9B,CAAL,EAAiD;qBACxCpY,MAAL,CAAYS,KAAZ,CAAkBC,GAAlB,iCAAoDpM,IAApD;;6BAEa,KAAK8jB,WAAlB;qBACKA,WAAL,GAAmB,IAAnB;;;;;+BA3eK;gBACHlb,SAAS;gCACK,0BADL;8BAEG,0BAFH;wBAGHoI,SAASyH,QAHN;oBAIPkQ,KAAKC,GAAL,EAJO;0BAKD,GALC;2BAMA,GANA;0BAOD,KAAKlF;aAPnB;;gBAUMmF,OAAO,4CAAb;;mBAEUA,IAAV,SAAkB1uB,MAAMslB,cAAN,CAAqB7W,MAArB,CAAlB;;;;;;ACtGR;AACA;AAUA,IAAMpB,SAAS;;kBAAA,0BAEI5G,IAFJ,EAEUC,UAFV,EAEsB;;;YACzB1G,MAAMyD,EAAN,CAASlC,MAAT,CAAgBmF,UAAhB,CAAJ,EAAiC;kBACvBioB,aAAN,CAAoBloB,IAApB,EAA0B,KAAKiK,KAA/B,EAAsC;qBAC7BhK;aADT;SADJ,MAIO,IAAI1G,MAAMyD,EAAN,CAAS/B,KAAT,CAAegF,UAAf,CAAJ,EAAgC;uBACxBX,OAAX,CAAmB,qBAAa;sBACtB4oB,aAAN,CAAoBloB,IAApB,EAA0B,MAAKiK,KAA/B,EAAsCke,SAAtC;aADJ;;KARG;;;;;UAAA,kBAgBJ3uB,KAhBI,EAgBG;;;YACN,CAACD,MAAMyD,EAAN,CAAS5B,MAAT,CAAgB5B,KAAhB,CAAD,IAA2B,EAAE,aAAaA,KAAf,CAA3B,IAAoD,CAACA,MAAMmN,OAAN,CAAcxL,MAAvE,EAA+E;iBACtEoQ,KAAL,CAAWU,IAAX,CAAgB,uBAAhB;;;;;cAKEmc,cAAN,CAAqB/pB,IAArB,CAA0B,IAA1B;;;aAGKspB,OAAL,CAAatpB,IAAb,CACI,IADJ,EAEI,YAAM;;mBAEG8F,OAAL,CAAauI,OAAb,GAAuB,EAAvB;;;kBAGMpM,aAAN,CAAoB,OAAK2J,KAAzB;mBACKA,KAAL,GAAa,IAAb;;;gBAGI1Q,MAAMyD,EAAN,CAASuC,OAAT,CAAiB,OAAKN,QAAL,CAAcrB,SAA/B,CAAJ,EAA+C;uBACtCqB,QAAL,CAAcrB,SAAd,CAAwBqE,eAAxB,CAAwC,OAAxC;;;;mBAICjC,IAAL,GAAYxG,MAAMwG,IAAlB;mBACKoJ,QAAL,GAAgB,CAAC7P,MAAMyD,EAAN,CAASyB,KAAT,CAAejF,MAAMmN,OAAN,CAAc,CAAd,EAAiByC,QAAhC,CAAD,GAA6C5P,MAAMmN,OAAN,CAAc,CAAd,EAAiByC,QAA9D,GAAyE/P,UAAUqR,KAAnG;;;mBAGKJ,SAAL,GAAiBtM,QAAQqqB,KAAR,CAAc,OAAKroB,IAAnB,EAAyB,OAAKoJ,QAA9B,EAAwC,OAAKiC,MAAL,CAAYhC,WAApD,CAAjB;;;oBAGW,OAAKD,QAAhB,SAA4B,OAAKpJ,IAAjC;qBACS,aAAL;2BACSiK,KAAL,GAAa1Q,MAAMsE,aAAN,CAAoB,OAApB,CAAb;;;qBAGC,aAAL;2BACSoM,KAAL,GAAa1Q,MAAMsE,aAAN,CAAoB,OAApB,CAAb;;;qBAGC,eAAL;qBACK,aAAL;2BACSoM,KAAL,GAAa1Q,MAAMsE,aAAN,CAAoB,KAApB,EAA2B;6BAC/BrE,MAAMmN,OAAN,CAAc,CAAd,EAAiBuE;qBADb,CAAb;;;;;;;;mBAUHjM,QAAL,CAAcrB,SAAd,CAAwBmC,WAAxB,CAAoC,OAAKkK,KAAzC;;;gBAGI1Q,MAAMyD,EAAN,CAAS+E,OAAT,CAAiBvI,MAAMolB,QAAvB,CAAJ,EAAsC;uBAC7BvT,MAAL,CAAYuT,QAAZ,GAAuBplB,MAAMolB,QAA7B;;;;gBAIA,OAAK1U,OAAT,EAAkB;oBACV,OAAKmB,MAAL,CAAYid,WAAhB,EAA6B;2BACpBre,KAAL,CAAWlM,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;;oBAEA,OAAKsN,MAAL,CAAYuT,QAAhB,EAA0B;2BACjB3U,KAAL,CAAWlM,YAAX,CAAwB,UAAxB,EAAoC,EAApC;;oBAEA,YAAYvE,KAAhB,EAAuB;2BACdyQ,KAAL,CAAWlM,YAAX,CAAwB,QAAxB,EAAkCvE,MAAMoU,MAAxC;;oBAEA,OAAKvC,MAAL,CAAYoB,IAAZ,CAAiB8H,MAArB,EAA6B;2BACpBtK,KAAL,CAAWlM,YAAX,CAAwB,MAAxB,EAAgC,EAAhC;;oBAEA,OAAKsN,MAAL,CAAYkB,KAAhB,EAAuB;2BACdtC,KAAL,CAAWlM,YAAX,CAAwB,OAAxB,EAAiC,EAAjC;;oBAEA,OAAKsN,MAAL,CAAYhC,WAAhB,EAA6B;2BACpBY,KAAL,CAAWlM,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;;;;;eAKLwqB,YAAH,CAAgBlqB,IAAhB;;;gBAGI,OAAK6L,OAAT,EAAkB;uBACPse,cAAP,CAAsBnqB,IAAtB,SAAiC,QAAjC,EAA2C7E,MAAMmN,OAAjD;;;;mBAIC0E,MAAL,CAAYM,KAAZ,GAAoBnS,MAAMmS,KAA1B;;;kBAGMU,KAAN,CAAYhO,IAAZ;;;gBAGI,OAAK6L,OAAT,EAAkB;;oBAEV,YAAY1Q,KAAhB,EAAuB;2BACZgvB,cAAP,CAAsBnqB,IAAtB,SAAiC,OAAjC,EAA0C7E,MAAMqb,MAAhD;;;;uBAIC5K,KAAL,CAAWkB,IAAX;;;;gBAIA,OAAKjB,OAAL,IAAiB,OAAKuD,OAAL,IAAgB,CAAC,OAAKnD,SAAL,CAAef,EAArD,EAA0D;;mBAEnDoX,KAAH,CAAStiB,IAAT;;;;mBAIC0S,UAAL,CAAgBmG,MAAhB;SAzGR,EA2GI,IA3GJ;;CA1BR;;ACXA;AACA;IAKMuR;qBACU3d,MAAZ,EAAoB;;;aACX8M,OAAL,GAAe9M,OAAOO,MAAP,CAAcpN,OAAd,CAAsB2Z,OAArC;aACK/W,GAAL,GAAWiK,OAAOO,MAAP,CAAcpN,OAAd,CAAsB4C,GAAjC;;;;;;;;+BAuBAA,KAAK;gBACD,CAAC4nB,QAAQne,SAAb,EAAwB;uBACb,IAAP;;;gBAGEoe,QAAQhvB,OAAOyE,YAAP,CAAoBC,OAApB,CAA4B,KAAKyC,GAAjC,CAAd;;gBAEItH,MAAMyD,EAAN,CAASyB,KAAT,CAAeiqB,KAAf,CAAJ,EAA2B;uBAChB,IAAP;;;gBAGEC,OAAOrsB,KAAKC,KAAL,CAAWmsB,KAAX,CAAb;;mBAEOnvB,MAAMyD,EAAN,CAASlC,MAAT,CAAgB+F,GAAhB,KAAwBA,IAAI1F,MAA5B,GAAqCwtB,KAAK9nB,GAAL,CAArC,GAAiD8nB,IAAxD;;;;+BAGAvtB,QAAQ;;gBAEJ,CAACqtB,QAAQne,SAAT,IAAsB,CAAC,KAAKsN,OAAhC,EAAyC;;;;;gBAKrC,CAACre,MAAMyD,EAAN,CAAS5B,MAAT,CAAgBA,MAAhB,CAAL,EAA8B;;;;;gBAK1B6C,UAAU,KAAKsP,GAAL,EAAd;;;gBAGIhU,MAAMyD,EAAN,CAASyB,KAAT,CAAeR,OAAf,CAAJ,EAA6B;0BACf,EAAV;;;;kBAIE6I,MAAN,CAAa7I,OAAb,EAAsB7C,MAAtB;;;mBAGO+C,YAAP,CAAoBQ,OAApB,CAA4B,KAAKkC,GAAjC,EAAsCvE,KAAKsC,SAAL,CAAeX,OAAf,CAAtC;;;;+BA1DmB;gBACf;oBACI,EAAE,kBAAkBvE,MAApB,CAAJ,EAAiC;2BACtB,KAAP;;;oBAGEsB,OAAO,SAAb;;;;uBAIOmD,YAAP,CAAoBQ,OAApB,CAA4B3D,IAA5B,EAAkCA,IAAlC;uBACOmD,YAAP,CAAoByqB,UAApB,CAA+B5tB,IAA/B;;uBAEO,IAAP;aAZJ,CAaE,OAAOyB,CAAP,EAAU;uBACD,KAAP;;;;;;;AC5BZ;AACA;;;;;;;IA0BA9C;kBACA0G,MAAA,EAAA8D,OAAA,EAAA;;;;;aACAiK,MAAA,GAAA,EAAA;;;aAGAjB,KAAA,GAAA,KAAA;aACAgB,OAAA,GAAA,KAAA;aACAG,MAAA,GAAA,KAAA;;;aAGApB,KAAA,GAAAlP,QAAAkP,KAAA;;;aAGAjD,KAAA,GAAA5J,MAAA;;;YAGA9G,MAAAyD,EAAA,CAAAlC,MAAA,CAAA,KAAAmP,KAAA,CAAA,EAAA;iBACAA,KAAA,GAAA1O,SAAA8B,gBAAA,CAAA,KAAA4M,KAAA,CAAA;;;;YAIAvQ,OAAAmvB,MAAA,IAAA,KAAA5e,KAAA,YAAA4e,MAAA,IAAAtvB,MAAAyD,EAAA,CAAA9B,QAAA,CAAA,KAAA+O,KAAA,CAAA,IAAA1Q,MAAAyD,EAAA,CAAA/B,KAAA,CAAA,KAAAgP,KAAA,CAAA,EAAA;;iBAEAA,KAAA,GAAA,KAAAA,KAAA,CAAA,CAAA,CAAA;;;;aAIAoB,MAAA,GAAA9R,MAAAuN,MAAA,CACA,EADA,EAEAmS,UAFA,EAGA9U,WAAA,EAHA,EAIA,YAAA;gBACA;uBACA7H,KAAAC,KAAA,CAAA,MAAA0N,KAAA,CAAApF,YAAA,CAAA,kBAAA,CAAA,CAAA;aADA,CAEA,OAAApI,CAAA,EAAA;uBACA,EAAA;;SAJA,EAJA,CAAA;;;aAcAwC,QAAA,GAAA;uBACA,IADA;qBAEA,EAFA;qBAGA,EAHA;sBAIA,EAJA;oBAKA,EALA;sBAMA;sBACA,IADA;uBAEA,EAFA;sBAGA;aATA;sBAWA;SAXA;;;aAeA6R,QAAA,GAAA;oBACA,IADA;0BAEA;SAFA;;;aAMAC,UAAA,GAAA;oBACA;SADA;;;aAKA5M,OAAA,GAAA;mBACA,EADA;qBAEA,EAFA;sBAGA;SAHA;;;;aAQAoH,KAAA,GAAA,IAAAuN,OAAA,CAAA,KAAAzN,MAAA,CAAAE,KAAA,CAAA;;;aAGAA,KAAA,CAAAC,GAAA,CAAA,QAAA,EAAA,KAAAH,MAAA;aACAE,KAAA,CAAAC,GAAA,CAAA,SAAA,EAAAxN,OAAA;;;YAGAzE,MAAAyD,EAAA,CAAA7C,eAAA,CAAA,KAAA8P,KAAA,KAAA,CAAA1Q,MAAAyD,EAAA,CAAAuC,OAAA,CAAA,KAAA0K,KAAA,CAAA,EAAA;iBACAsB,KAAA,CAAAiD,KAAA,CAAA,0CAAA;;;;;YAKA,KAAAvE,KAAA,CAAAxF,IAAA,EAAA;iBACA8G,KAAA,CAAAU,IAAA,CAAA,sBAAA;;;;;YAKA,CAAA,KAAAZ,MAAA,CAAAuM,OAAA,EAAA;iBACArM,KAAA,CAAAiD,KAAA,CAAA,kCAAA;;;;;;YAMA,CAAAxQ,QAAAqqB,KAAA,GAAA/e,GAAA,EAAA;iBACAiC,KAAA,CAAAiD,KAAA,CAAA,0BAAA;;;;;YAKAgH,QAAA,KAAAvL,KAAA,CAAAvK,SAAA,CAAA,IAAA,CAAA;cACAkf,QAAA,GAAA,KAAA;aACA3f,QAAA,CAAA6pB,QAAA,GAAAtT,KAAA;;;;YAIAxV,OAAA,KAAAiK,KAAA,CAAA8e,OAAA,CAAAxiB,WAAA,EAAA;;;YAGAmH,SAAA,IAAA;YACA5R,MAAA,IAAA;YACAkM,SAAA,IAAA;;;gBAGAhI,IAAA;iBACA,KAAA;;yBAEA,KAAAiK,KAAA,CAAArH,aAAA,CAAA,QAAA,CAAA;;;oBAGArJ,MAAAyD,EAAA,CAAAuC,OAAA,CAAAmO,MAAA,CAAA,EAAA;;0BAEAA,OAAA7I,YAAA,CAAA,KAAA,CAAA;yBACAuE,QAAA,GAAA7P,MAAAyvB,gBAAA,CAAAltB,GAAA,CAAA;;;yBAGAmD,QAAA,CAAArB,SAAA,GAAA,KAAAqM,KAAA;yBACAA,KAAA,GAAAyD,MAAA;;;yBAGAzO,QAAA,CAAArB,SAAA,CAAA0D,SAAA,GAAA,EAAA;;;6BAGA/H,MAAA0vB,YAAA,CAAAntB,GAAA,CAAA;wBACA,CAAAvC,MAAAyD,EAAA,CAAAyB,KAAA,CAAAuJ,MAAA,CAAA,EAAA;4BACAkhB,SAAA,CACA,GADA,EAEA,MAFA,CAAA;;4BAKAA,OAAA3mB,QAAA,CAAAyF,OAAA4W,QAAA,CAAA,EAAA;iCACAvT,MAAA,CAAAuT,QAAA,GAAA,IAAA;;4BAEAsK,OAAA3mB,QAAA,CAAAyF,OAAAyE,IAAA,CAAA,EAAA;iCACApB,MAAA,CAAAoB,IAAA,CAAA8H,MAAA,GAAA,IAAA;;;;;4BAKA,KAAAiD,SAAA,EAAA;iCACAnM,MAAA,CAAAhC,WAAA,GAAA6f,OAAA3mB,QAAA,CAAAyF,OAAAqB,WAAA,CAAA;yBADA,MAEA;iCACAgC,MAAA,CAAAhC,WAAA,GAAA,IAAA;;;iBAhCA,MAmCA;;yBAEAD,QAAA,GAAA,KAAAa,KAAA,CAAApF,YAAA,CAAA,KAAAwG,MAAA,CAAApL,UAAA,CAAAsY,KAAA,CAAAnP,QAAA,CAAA;;;yBAGAa,KAAA,CAAAhI,eAAA,CAAA,KAAAoJ,MAAA,CAAApL,UAAA,CAAAsY,KAAA,CAAAnP,QAAA;;;;oBAIA7P,MAAAyD,EAAA,CAAAyB,KAAA,CAAA,KAAA2K,QAAA,KAAA,CAAAvP,OAAAwB,IAAA,CAAAhC,SAAA,EAAAkJ,QAAA,CAAA,KAAA6G,QAAA,CAAA,EAAA;yBACAmC,KAAA,CAAAiD,KAAA,CAAA,gCAAA;;;;;qBAKAxO,IAAA,GAAA1G,MAAAsQ,KAAA;;;;iBAIA,OAAA;iBACA,OAAA;qBACA5J,IAAA,GAAAA,IAAA;qBACAoJ,QAAA,GAAA/P,UAAAqR,KAAA;;;oBAGA,KAAAT,KAAA,CAAAjI,YAAA,CAAA,aAAA,CAAA,EAAA;yBACAqJ,MAAA,CAAAid,WAAA,GAAA,IAAA;;oBAEA,KAAAre,KAAA,CAAAjI,YAAA,CAAA,UAAA,CAAA,EAAA;yBACAqJ,MAAA,CAAAuT,QAAA,GAAA,IAAA;;oBAEA,KAAA3U,KAAA,CAAAjI,YAAA,CAAA,aAAA,CAAA,EAAA;yBACAqJ,MAAA,CAAAhC,WAAA,GAAA,IAAA;;oBAEA,KAAAY,KAAA,CAAAjI,YAAA,CAAA,OAAA,CAAA,EAAA;yBACAqJ,MAAA,CAAAkB,KAAA,GAAA,IAAA;;oBAEA,KAAAtC,KAAA,CAAAjI,YAAA,CAAA,MAAA,CAAA,EAAA;yBACAqJ,MAAA,CAAAoB,IAAA,CAAA8H,MAAA,GAAA,IAAA;;;;;;qBAMAhJ,KAAA,CAAAiD,KAAA,CAAA,gCAAA;;;;;aAKAlE,SAAA,GAAAtM,QAAAqqB,KAAA,CAAA,KAAAroB,IAAA,EAAA,KAAAoJ,QAAA,EAAA,KAAAiC,MAAA,CAAAhC,WAAA,CAAA;;;YAGA,CAAA,KAAAiB,SAAA,CAAAhB,GAAA,EAAA;iBACAiC,KAAA,CAAAiD,KAAA,CAAA,0BAAA;;;;;aAKAxC,SAAA,GAAA,IAAAiP,SAAA,CAAA,IAAA,CAAA;;;aAGAhd,OAAA,GAAA,IAAAwqB,OAAA,CAAA,IAAA,CAAA;;;aAGAxe,KAAA,CAAAxF,IAAA,GAAA,IAAA;;;YAGA,CAAAlL,MAAAyD,EAAA,CAAAuC,OAAA,CAAA,KAAAN,QAAA,CAAArB,SAAA,CAAA,EAAA;iBACAqB,QAAA,CAAArB,SAAA,GAAArE,MAAAsE,aAAA,CAAA,KAAA,CAAA;kBACA+kB,IAAA,CAAA,KAAA3Y,KAAA,EAAA,KAAAhL,QAAA,CAAArB,SAAA;;;;aAIAqB,QAAA,CAAArB,SAAA,CAAAG,YAAA,CAAA,UAAA,EAAA,CAAA;;;WAGAwqB,YAAA,CAAAlqB,IAAA,CAAA,IAAA;;;cAGAgO,KAAA,CAAAhO,IAAA,CAAA,IAAA;;;YAGA,KAAAgN,MAAA,CAAAE,KAAA,EAAA;kBACA7H,EAAA,CAAA,KAAAzE,QAAA,CAAArB,SAAA,EAAA,KAAAyN,MAAA,CAAAnH,MAAA,CAAAoE,IAAA,CAAA,GAAA,CAAA,EAAA,iBAAA;sBACAiD,KAAA,CAAAC,GAAA,aAAApI,MAAApD,IAAA;aADA;;;;;YAOA,KAAAkK,OAAA,IAAA,KAAAuD,OAAA,IAAA,CAAA,KAAAnD,SAAA,CAAAf,EAAA,EAAA;eACAoX,KAAA,CAAAtiB,IAAA,CAAA,IAAA;;;;aAIA2N,SAAA,CAAApO,SAAA;;;aAGAoO,SAAA,CAAAoQ,MAAA;;;aAGArL,UAAA,GAAA,IAAA+I,UAAA,CAAA,IAAA,CAAA;;;aAGA6C,GAAA,GAAA,IAAAkG,GAAA,CAAA,IAAA,CAAA;;;YAGA,KAAAxX,MAAA,CAAAuT,QAAA,EAAA;iBACAxT,IAAA;;;;;;;;;;;;;;;;;;;;+BAiCA;gBACA,CAAA7R,MAAAyD,EAAA,CAAA+G,QAAA,CAAA,KAAAkG,KAAA,CAAAmB,IAAA,CAAA,EAAA;uBACA,IAAA;;;;;;;;;mBASA,KAAAnB,KAAA,CAAAmB,IAAA,EAAA;;;;;;;;;gCAMA;gBACA,CAAA,KAAAH,OAAA,IAAA,CAAA1R,MAAAyD,EAAA,CAAA+G,QAAA,CAAA,KAAAkG,KAAA,CAAAwG,KAAA,CAAA,EAAA;;;;iBAIAxG,KAAA,CAAAwG,KAAA;;;;;;;;;;;;;;;mCAmCAjX,OAAA;;gBAEA0I,SAAA3I,MAAAyD,EAAA,CAAA+E,OAAA,CAAAvI,KAAA,IAAAA,KAAA,GAAA,CAAA,KAAAyR,OAAA;;gBAEA/I,MAAA,EAAA;qBACAkJ,IAAA;aADA,MAEA;qBACAqF,KAAA;;;;;;;;;;+BAOA;gBACA,KAAAvG,OAAA,EAAA;qBACAD,KAAA,CAAAkB,IAAA;aADA,MAEA,IAAA5R,MAAAyD,EAAA,CAAA+G,QAAA,CAAA,KAAAkG,KAAA,CAAAmV,IAAA,CAAA,EAAA;qBACAnV,KAAA,CAAAmV,IAAA;;;;;;;;;;kCAOA;iBACApU,WAAA,GAAA,CAAA;;;;;;;;;;+BAOAU,UAAA;iBACAV,WAAA,GAAA,KAAAA,WAAA,IAAAzR,MAAAyD,EAAA,CAAAyI,MAAA,CAAAiG,QAAA,IAAAA,QAAA,GAAA,KAAAL,MAAA,CAAAK,QAAA,CAAA;;;;;;;;;;gCAOAA,UAAA;iBACAV,WAAA,GAAA,KAAAA,WAAA,IAAAzR,MAAAyD,EAAA,CAAAyI,MAAA,CAAAiG,QAAA,IAAAA,QAAA,GAAA,KAAAL,MAAA,CAAAK,QAAA,CAAA;;;;;;;;;;;;;;;;uCAoIAqS,MAAA;gBACAzR,SAAA,KAAArC,KAAA,CAAAsC,KAAA,GAAA,CAAA,GAAA,KAAAD,MAAA;iBACAA,MAAA,GAAAA,UAAA/S,MAAAyD,EAAA,CAAAyI,MAAA,CAAAsY,IAAA,IAAAA,IAAA,GAAA,CAAA,CAAA;;;;;;;;;;uCAOAA,MAAA;gBACAzR,SAAA,KAAArC,KAAA,CAAAsC,KAAA,GAAA,CAAA,GAAA,KAAAD,MAAA;iBACAA,MAAA,GAAAA,UAAA/S,MAAAyD,EAAA,CAAAyI,MAAA,CAAAsY,IAAA,IAAAA,IAAA,GAAA,CAAA,CAAA;;;;;;;;;;;;;;;;uCAgRAvkB,OAAA;;gBAEA,CAAA,KAAA8Q,SAAA,CAAAf,EAAA,EAAA;;;;;gBAKA6L,OAAA7b,MAAAyD,EAAA,CAAA+E,OAAA,CAAAvI,KAAA,IAAAA,KAAA,GAAA,CAAA,KAAAyF,QAAA,CAAArB,SAAA,CAAAwE,SAAA,CAAAD,QAAA,CAAA,KAAAkJ,MAAA,CAAAS,UAAA,CAAAgF,QAAA,CAAAyD,MAAA,CAAA;;;gBAGA,KAAAzD,QAAA,CAAAyD,MAAA,KAAAa,IAAA,EAAA;;;;;iBAKAtE,QAAA,CAAAyD,MAAA,GAAAa,IAAA;;;kBAGAzQ,WAAA,CAAA,KAAA1F,QAAA,CAAAuO,OAAA,CAAAsD,QAAA,EAAA,KAAAA,QAAA,CAAAyD,MAAA;;;kBAGA3I,WAAA,CAAA,KAAA3M,QAAA,CAAArB,SAAA,EAAA,KAAAyN,MAAA,CAAAS,UAAA,CAAAgF,QAAA,CAAAyD,MAAA,EAAA,KAAAzD,QAAA,CAAAyD,MAAA;;;kBAGA7P,aAAA,CAAArG,IAAA,CAAA,IAAA,EAAA,KAAA4L,KAAA,EAAA,KAAA6G,QAAA,CAAAyD,MAAA,GAAA,iBAAA,GAAA,kBAAA;;;;;;;;;;;;;;;;kCAmGA;;gBAEAvW,QAAA+O,OAAA,EAAA;qBACA9C,KAAA,CAAAkf,8BAAA;;;;;;;;;;;uCAQAjnB,QAAA;;;;gBAEA,CAAA3I,MAAAyD,EAAA,CAAAuC,OAAA,CAAA,KAAAN,QAAA,CAAAkN,QAAA,CAAA,EAAA;;;;;gBAKA,CAAA,KAAA7B,SAAA,CAAAf,EAAA,IAAA,KAAAc,OAAA,EAAA;;;;gBAIA+e,QAAA,CAAA;gBACAhU,OAAAlT,MAAA;gBACAmnB,oBAAA,KAAA;;;gBAGA,CAAA9vB,MAAAyD,EAAA,CAAA+E,OAAA,CAAAG,MAAA,CAAA,EAAA;oBACA3I,MAAAyD,EAAA,CAAAoG,KAAA,CAAAlB,MAAA,CAAA,EAAA;;wCAEAA,OAAAlC,IAAA,KAAA,iBAAA;;;wBAGAspB,aAAA,CACA,YADA,EAEA,WAFA,EAGA,YAHA,EAIA,WAJA,EAKA,SALA,CAAA;;;wBASAC,cAAA,CACA,WADA,EAEA,UAFA,EAGA,WAHA,CAAA;;;2BAOAD,WAAA/mB,QAAA,CAAAL,OAAAlC,IAAA,CAAA;;;wBAGAupB,YAAAhnB,QAAA,CAAAL,OAAAlC,IAAA,CAAA,EAAA;gCACA,IAAA;;;;wBAIA,CAAA,KAAAkN,KAAA,IAAAhL,OAAAlC,IAAA,KAAA,SAAA,EAAA;gCACA,IAAA;8BACA4L,WAAA,CAAA,KAAA3M,QAAA,CAAAkN,QAAA,EAAA,KAAAd,MAAA,CAAAS,UAAA,CAAA0d,YAAA,EAAA,IAAA;;iBA/BA,MAiCA;2BACAjwB,MAAA8Z,QAAA,CAAA,KAAApU,QAAA,CAAArB,SAAA,EAAA,KAAAyN,MAAA,CAAAS,UAAA,CAAAwQ,YAAA,CAAA;;;;;yBAKA,KAAAlO,MAAA,CAAAjC,QAAA;;;gBAGAiJ,QAAA,KAAApH,MAAA,IAAA,KAAAG,OAAA,EAAA;;oBAEAsb,UAAAlwB,MAAAqS,WAAA,CAAA,KAAA3M,QAAA,CAAArB,SAAA,EAAA,KAAAyN,MAAA,CAAAS,UAAA,CAAAwQ,YAAA,EAAA,KAAA,CAAA;;;oBAGAmN,OAAA,EAAA;0BACA/kB,aAAA,CAAArG,IAAA,CAAA,IAAA,EAAA,KAAA4L,KAAA,EAAA,eAAA;;;;oBAIA,KAAA+D,MAAA,IAAA,KAAAG,OAAA,EAAA;;;;;oBAKA,KAAAjB,KAAA,EAAA;4BACA,IAAA;;;;;;gBAMA,CAAAkI,IAAA,IAAA,KAAAnK,OAAA,EAAA;qBACAmD,MAAA,CAAAjC,QAAA,GAAAkC,WAAA,YAAA;;wBAEA,CAAA9U,MAAAyD,EAAA,CAAAuC,OAAA,CAAA,OAAAN,QAAA,CAAAkN,QAAA,CAAA,EAAA;;;;;wBAKA,CAAA,OAAAlN,QAAA,CAAAkN,QAAA,CAAAvH,OAAA,IAAA,OAAA3F,QAAA,CAAAkN,QAAA,CAAA0R,KAAA,KAAA,CAAAwL,iBAAA,EAAA;;;;;wBAKA,CAAA9vB,MAAA8Z,QAAA,CAAA,OAAApU,QAAA,CAAArB,SAAA,EAAA,OAAAyN,MAAA,CAAAS,UAAA,CAAAwQ,YAAA,CAAA,EAAA;8BACA1Q,WAAA,CAAA,OAAA3M,QAAA,CAAAkN,QAAA,EAAA,OAAAd,MAAA,CAAAS,UAAA,CAAA0d,YAAA,EAAA,KAAA;;;;wBAIAC,UAAAlwB,MAAAqS,WAAA,CAAA,OAAA3M,QAAA,CAAArB,SAAA,EAAA,OAAAyN,MAAA,CAAAS,UAAA,CAAAwQ,YAAA,EAAA,OAAAjR,MAAA,CAAAiR,YAAA,CAAA;;;wBAGAmN,OAAA,EAAA;8BACA/kB,aAAA,CAAArG,IAAA,SAAA,OAAA4L,KAAA,EAAA,gBAAA;;4BAEA,OAAAoB,MAAA,CAAAc,QAAA,CAAA5J,QAAA,CAAA,UAAA,KAAA,CAAAhJ,MAAAyD,EAAA,CAAAyB,KAAA,CAAA,OAAA4M,MAAA,CAAAwF,QAAA,CAAA,EAAA;qCACAuK,UAAA,CAAA/c,IAAA,SAAA,KAAA;;;iBAxBA,EA2BA+qB,KA3BA,CAAA;;;;;;;;;;;;2BAoCAhmB,OAAAQ,UAAA;kBACAF,EAAA,CAAA,KAAAzE,QAAA,CAAArB,SAAA,EAAAwF,KAAA,EAAAQ,QAAA;;;;;;;;;;;4BAQAR,OAAAQ,UAAA;kBACAD,GAAA,CAAA,KAAA1E,QAAA,CAAArB,SAAA,EAAAwF,KAAA,EAAAQ,QAAA;;;;;;;;;;;;;gCAUAA,UAAA;;;gBAAA8lB,IAAA,uEAAA,KAAA;;gBACA,CAAA,KAAAvc,KAAA,EAAA;;;;gBAIAwc,OAAA,SAAAA,IAAA,GAAA;;yBAEAlsB,IAAA,CAAA/B,KAAA,CAAAke,QAAA,GAAA,EAAA;;;uBAGArB,KAAA,GAAA,IAAA;;;oBAGAmR,IAAA,EAAA;wBACA7vB,OAAAwB,IAAA,CAAA,OAAA4D,QAAA,EAAA9D,MAAA,EAAA;;8BAEAmF,aAAA,CAAA,OAAArB,QAAA,CAAAuO,OAAA,CAAApC,IAAA;8BACA9K,aAAA,CAAA,OAAArB,QAAA,CAAA6R,QAAA;8BACAxQ,aAAA,CAAA,OAAArB,QAAA,CAAAkN,QAAA;8BACA7L,aAAA,CAAA,OAAArB,QAAA,CAAAC,OAAA;;;+BAGAD,QAAA,CAAAuO,OAAA,CAAApC,IAAA,GAAA,IAAA;+BACAnM,QAAA,CAAA6R,QAAA,GAAA,IAAA;+BACA7R,QAAA,CAAAkN,QAAA,GAAA,IAAA;+BACAlN,QAAA,CAAAC,OAAA,GAAA,IAAA;;;;wBAIA3F,MAAAyD,EAAA,CAAA+G,QAAA,CAAAH,QAAA,CAAA,EAAA;;;iBAhBA,MAmBA;;2BAEAoI,SAAA,CAAA4d,KAAA;;;0BAGA7K,cAAA,CAAA,OAAA9f,QAAA,CAAA6pB,QAAA,EAAA,OAAA7pB,QAAA,CAAArB,SAAA;;;0BAGA8G,aAAA,CAAArG,IAAA,SAAA,OAAAY,QAAA,CAAA6pB,QAAA,EAAA,WAAA,EAAA,IAAA;;;wBAGAvvB,MAAAyD,EAAA,CAAA+G,QAAA,CAAAH,QAAA,CAAA,EAAA;iCACAvF,IAAA,CAAA,OAAAY,QAAA,CAAA6pB,QAAA;;;;2BAIA3b,KAAA,GAAA,KAAA;;;+BAGA,YAAA;+BACAlO,QAAA,GAAA,IAAA;+BACAgL,KAAA,GAAA,IAAA;qBAFA,EAGA,GAHA;;aA9CA;;;iBAsDAmV,IAAA;;;oBAGA,KAAAhW,QAAA,SAAA,KAAApJ,IAAA;qBACA,aAAA;qBACA,aAAA;;iCAEA,KAAAoO,MAAA,CAAAD,OAAA;;;uBAGAjC,oBAAA,CAAA7N,IAAA,CAAA,IAAA,EAAA,IAAA;;;;;;;qBAOA,eAAA;;kCAEA,KAAA+P,MAAA,CAAAmU,SAAA;kCACA,KAAAnU,MAAA,CAAAnD,OAAA;;;wBAGA,KAAAsN,KAAA,KAAA,IAAA,IAAAhf,MAAAyD,EAAA,CAAA+G,QAAA,CAAA,KAAAwU,KAAA,CAAAoP,OAAA,CAAA,EAAA;6BACApP,KAAA,CAAAoP,OAAA;;;;;;;;qBAQA,aAAA;;;wBAGA,KAAApP,KAAA,KAAA,IAAA,EAAA;6BACAA,KAAA,CAAAsR,MAAA,GAAArrB,IAAA,CAAAmrB,IAAA;;;;+BAIAA,IAAA,EAAA,GAAA;;;;;;;;;;;;;;;;iCAaA3pB,MAAA;mBACAhC,QAAA+M,IAAA,CAAA1M,IAAA,CAAA,IAAA,EAAA2B,IAAA,CAAA;;;;;;;;;;;;+BAz5BA;mBACA/F,QAAA,KAAAmP,QAAA,KAAA/P,UAAAqR,KAAA,CAAA;;;;+BAEA;mBACAzQ,QAAA,KAAAud,SAAA,IAAA,KAAAxC,OAAA,CAAA;;;;+BAEA;mBACA/a,QAAA,KAAAmP,QAAA,KAAA/P,UAAAiO,OAAA,CAAA;;;;+BAEA;mBACArN,QAAA,KAAAmP,QAAA,KAAA/P,UAAAkO,KAAA,CAAA;;;;+BAEA;mBACAtN,QAAA,KAAA+F,IAAA,KAAA1G,MAAAsQ,KAAA,CAAA;;;;+BAEA;mBACA3P,QAAA,KAAA+F,IAAA,KAAA1G,MAAAwQ,KAAA,CAAA;;;;+BAkCA;mBACA7P,QAAA,KAAAkT,KAAA,IAAA,CAAA,KAAAa,MAAA,IAAA,CAAA,KAAA+O,KAAA,CAAA;;;;;;;;;+BAMA;mBACA9iB,QAAA,KAAAgQ,KAAA,CAAA+D,MAAA,CAAA;;;;;;;;;+BAMA;mBACA/T,QAAA,KAAA+T,MAAA,IAAA,KAAAhD,WAAA,KAAA,CAAA,CAAA;;;;;;;;;+BAMA;mBACA/Q,QAAA,KAAAgQ,KAAA,CAAA8S,KAAA,CAAA;;;;6BAwDAvjB,OAAA;gBACAswB,aAAA,CAAA;;gBAEAvwB,MAAAyD,EAAA,CAAAyI,MAAA,CAAAjM,KAAA,CAAA,EAAA;6BACAA,KAAA;;;;gBAIAswB,aAAA,CAAA,EAAA;6BACA,CAAA;aADA,MAEA,IAAAA,aAAA,KAAA3a,QAAA,EAAA;6BACA,KAAAA,QAAA;;;;iBAIAlF,KAAA,CAAAe,WAAA,GAAA8e,UAAA;;;iBAGAve,KAAA,CAAAC,GAAA,iBAAA,KAAAR,WAAA;;;;;;;+BAMA;mBACAlR,OAAA,KAAAmQ,KAAA,CAAAe,WAAA,CAAA;;;;;;;;;+BAMA;gBACAsE,QADA,GACA,KAAArF,KADA,CACAqF,QADA;;;;gBAIA/V,MAAAyD,EAAA,CAAAyI,MAAA,CAAA6J,QAAA,CAAA,EAAA;uBACAA,QAAA;;;;;;gBAMAA,YAAAA,SAAAnU,MAAA,IAAA,KAAAgU,QAAA,GAAA,CAAA,EAAA;uBACAG,SAAAya,GAAA,CAAA,CAAA,IAAA,KAAA5a,QAAA;;;mBAGA,CAAA;;;;;;;;;+BAMA;mBACAlV,QAAA,KAAAgQ,KAAA,CAAA0F,OAAA,CAAA;;;;;;;;;+BAMA;;gBAEAqa,eAAA1W,WAAA,KAAAjI,MAAA,CAAA8D,QAAA,CAAA;;;gBAGA8a,eAAA,KAAAhgB,KAAA,GAAAnQ,OAAA,KAAAmQ,KAAA,CAAAkF,QAAA,CAAA,GAAA,CAAA;;;mBAGA,CAAArV,OAAAC,KAAA,CAAAiwB,YAAA,CAAA,GAAAA,YAAA,GAAAC,YAAA;;;;;;;;;;6BAOAnpB,OAAA;gBACAwL,SAAAxL,KAAA;gBACAqE,MAAA,CAAA;gBACA+kB,MAAA,CAAA;;gBAEA3wB,MAAAyD,EAAA,CAAAlC,MAAA,CAAAwR,MAAA,CAAA,EAAA;yBACAxS,OAAAwS,MAAA,CAAA;;;;gBAIA,CAAA/S,MAAAyD,EAAA,CAAAyI,MAAA,CAAA6G,MAAA,CAAA,EAAA;yBACA,KAAArO,OAAA,CAAAsP,GAAA,CAAA,QAAA,CAAA;;;;gBAIA,CAAAhU,MAAAyD,EAAA,CAAAyI,MAAA,CAAA6G,MAAA,CAAA,EAAA;sBAAA,GACA,KAAAjB,MADA,CACAiB,MADA;;;;gBAKAA,SAAAnH,GAAA,EAAA;yBACAA,GAAA;;;gBAGAmH,SAAA4d,GAAA,EAAA;yBACAA,GAAA;;;;iBAIA7e,MAAA,CAAAiB,MAAA,GAAAA,MAAA;;;iBAGArC,KAAA,CAAAqC,MAAA,GAAAA,MAAA;;;gBAGA,CAAA/S,MAAAyD,EAAA,CAAAyB,KAAA,CAAAqC,KAAA,CAAA,IAAA,KAAAyL,KAAA,IAAAD,SAAA,CAAA,EAAA;qBACAC,KAAA,GAAA,KAAA;;;;;;;;+BAOA;mBACAzS,OAAA,KAAAmQ,KAAA,CAAAqC,MAAA,CAAA;;;;6BAyBAqC,MAAA;gBACAzM,SAAAyM,IAAA;;;gBAGA,CAAApV,MAAAyD,EAAA,CAAA+E,OAAA,CAAAG,MAAA,CAAA,EAAA;yBACA,KAAAjE,OAAA,CAAAsP,GAAA,CAAA,OAAA,CAAA;;;;gBAIA,CAAAhU,MAAAyD,EAAA,CAAA+E,OAAA,CAAAG,MAAA,CAAA,EAAA;yBACA,KAAAmJ,MAAA,CAAAkB,KAAA;;;;iBAIAlB,MAAA,CAAAkB,KAAA,GAAArK,MAAA;;;iBAGA+H,KAAA,CAAAsC,KAAA,GAAArK,MAAA;;;;;;;+BAMA;mBACAjI,QAAA,KAAAgQ,KAAA,CAAAsC,KAAA,CAAA;;;;;;;;;+BAMA;;gBAEA,CAAA,KAAArC,OAAA,EAAA;uBACA,IAAA;;;gBAGA,KAAAG,OAAA,EAAA;uBACA,IAAA;;;;mBAKApQ,QAAA,KAAAgQ,KAAA,CAAAkgB,WAAA,KACAlwB,QAAA,KAAAgQ,KAAA,CAAAmgB,2BAAA,CADA,IAEAnwB,QAAA,KAAAgQ,KAAA,CAAAogB,WAAA,IAAA,KAAApgB,KAAA,CAAAogB,WAAA,CAAAlvB,MAAA,CAHA;;;;;;;;;;6BAWA3B,OAAA;gBACAgT,QAAA,IAAA;;gBAEAjT,MAAAyD,EAAA,CAAAyI,MAAA,CAAAjM,KAAA,CAAA,EAAA;wBACAA,KAAA;;;gBAGA,CAAAD,MAAAyD,EAAA,CAAAyI,MAAA,CAAA+G,KAAA,CAAA,EAAA;wBACA,KAAAvO,OAAA,CAAAsP,GAAA,CAAA,OAAA,CAAA;;;gBAGA,CAAAhU,MAAAyD,EAAA,CAAAyI,MAAA,CAAA+G,KAAA,CAAA,EAAA;wBACA,KAAAnB,MAAA,CAAAmB,KAAA,CAAA8S,QAAA;;;;gBAIA9S,QAAA,GAAA,EAAA;wBACA,GAAA;;gBAEAA,QAAA,GAAA,EAAA;wBACA,GAAA;;;gBAGA,CAAA,KAAAnB,MAAA,CAAAmB,KAAA,CAAArI,OAAA,CAAA5B,QAAA,CAAAiK,KAAA,CAAA,EAAA;qBACAjB,KAAA,CAAAU,IAAA,yBAAAO,KAAA;;;;;iBAKAnB,MAAA,CAAAmB,KAAA,CAAA8S,QAAA,GAAA9S,KAAA;;;iBAGAvC,KAAA,CAAA4X,YAAA,GAAArV,KAAA;;;;;;;+BAMA;mBACA1S,OAAA,KAAAmQ,KAAA,CAAA4X,YAAA,CAAA;;;;;;;;;;;6BAQAroB,OAAA;gBACAkT,UAAA,IAAA;;gBAEA,CAAAnT,MAAAyD,EAAA,CAAAyB,KAAA,CAAAjF,KAAA,CAAA,EAAA;0BACAM,OAAAN,KAAA,CAAA;;;gBAGA,CAAAD,MAAAyD,EAAA,CAAAyI,MAAA,CAAAiH,OAAA,CAAA,IAAAA,YAAA,CAAA,EAAA;0BACA,KAAAzO,OAAA,CAAAsP,GAAA,CAAA,SAAA,CAAA;;;gBAGA,CAAAhU,MAAAyD,EAAA,CAAAyI,MAAA,CAAAiH,OAAA,CAAA,EAAA;0BACA,KAAArB,MAAA,CAAAqB,OAAA,CAAA4S,QAAA;;;gBAGA,CAAA/lB,MAAAyD,EAAA,CAAAyI,MAAA,CAAAiH,OAAA,CAAA,EAAA;0BACA,KAAArB,MAAA,CAAAqB,OAAA,CAAAiI,OAAA;;;gBAGA,CAAA,KAAAxQ,OAAA,CAAAuI,OAAA,CAAAvR,MAAA,EAAA;;;;gBAIA,CAAA,KAAAgJ,OAAA,CAAAuI,OAAA,CAAAnK,QAAA,CAAAmK,OAAA,CAAA,EAAA;oBACA4d,UAAA/wB,MAAA+wB,OAAA,CAAA,KAAAnmB,OAAA,CAAAuI,OAAA,EAAAA,OAAA,CAAA;qBACAnB,KAAA,CAAAU,IAAA,kCAAAS,OAAA,gBAAA4d,OAAA;0BACAA,OAAA;;;;iBAIAjf,MAAA,CAAAqB,OAAA,CAAA4S,QAAA,GAAA5S,OAAA;;;iBAGAzC,KAAA,CAAAyC,OAAA,GAAAA,OAAA;;;;;;;+BAMA;mBACA,KAAAzC,KAAA,CAAAyC,OAAA;;;;;;;;;;;6BAQAlT,OAAA;gBACA0I,SAAA3I,MAAAyD,EAAA,CAAA+E,OAAA,CAAAvI,KAAA,IAAAA,KAAA,GAAA,KAAA6R,MAAA,CAAAoB,IAAA,CAAA8H,MAAA;iBACAlJ,MAAA,CAAAoB,IAAA,CAAA8H,MAAA,GAAArS,MAAA;iBACA+H,KAAA,CAAAwC,IAAA,GAAAvK,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAiDA;mBACAjI,QAAA,KAAAgQ,KAAA,CAAAwC,IAAA,CAAA;;;;;;;;;;6BAOAjT,OAAA;mBACA+wB,MAAA,CAAAlsB,IAAA,CAAA,IAAA,EAAA7E,KAAA;;;;;;;+BAMA;mBACA,KAAAyQ,KAAA,CAAAyV,UAAA;;;;;;;;;;6BAOAlmB,OAAA;gBACA,CAAA,KAAA4Q,OAAA,EAAA;qBACAmB,KAAA,CAAAU,IAAA,CAAA,kCAAA;;;;gBAIA1S,MAAAyD,EAAA,CAAAlC,MAAA,CAAAtB,KAAA,CAAA,EAAA;qBACAyQ,KAAA,CAAAlM,YAAA,CAAA,QAAA,EAAAvE,KAAA;mBACA6T,SAAA,CAAAhP,IAAA,CAAA,IAAA;;;;;;;;+BAOA;gBACA,CAAA,KAAA+L,OAAA,EAAA;uBACA,IAAA;;;mBAGA,KAAAH,KAAA,CAAApF,YAAA,CAAA,QAAA,CAAA;;;;;;;;;;6BAOArL,OAAA;gBACA0I,SAAA3I,MAAAyD,EAAA,CAAA+E,OAAA,CAAAvI,KAAA,IAAAA,KAAA,GAAA,KAAA6R,MAAA,CAAAuT,QAAA;iBACAvT,MAAA,CAAAuT,QAAA,GAAA1c,MAAA;;;;;;;+BAMA;mBACAjI,QAAA,KAAAoR,MAAA,CAAAuT,QAAA,CAAA;;;;6BAsCAplB,OAAA;;gBAEA,CAAAD,MAAAyD,EAAA,CAAAlC,MAAA,CAAAtB,KAAA,CAAA,EAAA;;;;;gBAKAD,MAAAyD,EAAA,CAAAyB,KAAA,CAAAjF,KAAA,CAAA,EAAA;qBACA0iB,cAAA,CAAA,KAAA;;;;;gBAKAxH,WAAAlb,MAAA+M,WAAA,EAAA;;;gBAGA,CAAA,KAAApC,OAAA,CAAA2M,QAAA,CAAAvO,QAAA,CAAAmS,QAAA,CAAA,EAAA;qBACAnJ,KAAA,CAAAU,IAAA,mCAAAyI,QAAA;;;;;iBAKAwH,cAAA,CAAA,IAAA;;;gBAGAxH,aAAA,SAAA,EAAA;;;;;gBAKA,KAAAA,QAAA,KAAAA,QAAA,EAAA;;;;;iBAKA5D,QAAA,CAAA4D,QAAA,GAAAA,QAAA;;;qBAGAgE,OAAA,CAAAra,IAAA,CAAA,IAAA,EAAA,IAAA;;;qBAGA4Z,WAAA,CAAA5Z,IAAA,CAAA,IAAA;;;kBAGAqG,aAAA,CAAArG,IAAA,CAAA,IAAA,EAAA,KAAA4L,KAAA,EAAA,gBAAA;;;;;;;+BAMA;mBACA,KAAA6G,QAAA,CAAA4D,QAAA;;;;;;;;;;;6BAQAlb,OAAA;gBACAgxB,SAAA;qBACA,oBADA;wBAEA;aAFA;;;gBAMA,CAAAxsB,QAAA8O,GAAA,EAAA;;;;;gBAKA5K,SAAA3I,MAAAyD,EAAA,CAAA+E,OAAA,CAAAvI,KAAA,IAAAA,KAAA,GAAA,KAAAsT,GAAA,KAAA0d,OAAAC,MAAA;;;iBAGAxgB,KAAA,CAAAF,yBAAA,CAAA7H,SAAAsoB,OAAA1d,GAAA,GAAA0d,OAAAC,MAAA;;;;;;;+BAMA;gBACA,CAAAzsB,QAAA8O,GAAA,EAAA;uBACA,IAAA;;;mBAGA,KAAA7C,KAAA,CAAAygB,sBAAA;;;;kCAsRA1qB,MAAAoJ,UAAAqhB,QAAA;mBACAzsB,QAAAqqB,KAAA,CAAAroB,IAAA,EAAAoJ,QAAA,EAAAqhB,MAAA,CAAA;;;;;;;;;;;mCAQA3uB,KAAAiB,IAAA;mBACAxD,MAAAyd,UAAA,CAAAlb,GAAA,EAAAiB,EAAA,CAAA","file":"plyr.js","sourcesContent":["(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => utils.is.string(args[i]) ? args[i] : '');\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Set the poster image\n ui.setPoster.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Set the poster image\n setPoster() {\n if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {\n return;\n }\n\n // Set the inline style\n const posters = this.poster.split(',');\n this.elements.poster.style.backgroundImage = posters.map(p => `url('${p}')`).join(',');\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n poster: 'plyr__poster',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set attribute\n player.media.setAttribute('poster', url.href);\n\n // Update\n ui.setPoster.call(player);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('span', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n ui.setPoster.call(this);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Set hideControls class\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, this.config.hideControls);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.min.js b/dist/plyr.min.js
index be093134..0550346a 100644
--- a/dist/plyr.min.js
+++ b/dist/plyr.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e={html5:"html5",youtube:"youtube",vimeo:"vimeo"},t={audio:"audio",video:"video"},i={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.2.4/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}};"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var n,s,a=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function l(t,i,n,s){var a,r,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,p=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(r=o.createElement("link")).rel="stylesheet",r.href=p):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(r=o.createElement("img")).src=p:((r=o.createElement("script")).src=t,r.async=void 0===c||c),r.onload=r.onerror=r.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in r)try{r.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return l(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,r)&&o.head.appendChild(r)}function r(e,i,n){var r,o;if(i&&i.trim&&(r=i),o=(r?n:i)||{},r){if(r in t)throw"LoadJS";t[r]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,r=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<r;s++)l(e[s],n,i)}(e,function(e){a(o,e),s(r,e)},o)}return r.ready=function(e,t){return function(e,t){var s,a,l,r=[],o=(e=e.push?e:[e]).length,c=o;for(s=function(e,i){i.length&&r.push(e),--c||t(r)};o--;)a=e[o],(l=i[a])?s(a,l):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),r},r.done=function(e){s(e,[])},r.reset=function(){t={},i={},n={}},r.isDefined=function(e){return e in t},r},e.exports=i()}(n={exports:{}},n.exports),n.exports),l=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},r=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),o=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},c=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var l,r=e[Symbol.iterator]();!(n=(l=r.next()).done)&&(i.push(l.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&r.return&&r.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e){return new Promise(function(t,i){a(e,{success:t,error:i})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return document.querySelectorAll("#"+t).length};if(!i||!n()){var s=document.createElement("div");if(u.toggleHidden(s,!0),i&&s.setAttribute("id",t),d.storage){var a=window.localStorage.getItem("cache-"+t);if(null!==a){var l=JSON.parse(a);return void r.call(s,l.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(d.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),r.call(s,e))}).catch(function(){})}}function r(e){i&&n()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.element(e)&&u.is.element(e.parentNode)&&(u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=c(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),l=a[0],r=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[l]=r}}),i},toggleHidden:function(e,t){if(u.is.element(e)){var i=t;u.is.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,i){if(u.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime),duration:u.getElement.call(this,this.config.selectors.display.duration)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var l=t.split(" "),r=a;d.passiveListeners&&(r={passive:s,capture:a}),l.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,r)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(u.is.element(e)&&!u.is.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:u.is.plyr(this)?this:null})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),l=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(l)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,o({},t,{})),u.extend(e[t],s[t])):Object.assign(e,o({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},dedupe:function(e){return u.is.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e},closest:function(e,t){return u.is.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null},getProviderByUrl:function(t){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(t)?e.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(t)?e.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=c(i,2),s=n[0],a=n[1];return Object.assign(e,o({},s,decodeURIComponent(a)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),l=a.isIPhone&&i&&d.playsinline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||l);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||l);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(s=document.createElement("input"),s.type="range","range"===s.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p=function(){},h=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];l(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return r(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):p}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):p}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):p}}]),e}(),m=u.getBrowser();function g(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),m.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function f(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),g.call(this)}var y=function(){function e(t){var i=this;l(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){g.call(i)}),u.on(this.player.elements.container,"dblclick",function(e){u.is.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return r(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(m.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():f.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(m.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else f.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return m.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(u.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),v=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var i=t.i18n[e],n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=c(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},b={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(u.is.empty(e)||(this.captions.language=e),u.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!u.is.boolean(this.captions.active)){var t=this.storage.get("captions");u.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&T.setCaptionsMenu.call(this);else{u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(b.getTracks.call(this)));var i=b.getTracks.call(this);if(!u.is.empty(i)){if(u.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}b.setLanguage.call(this),b.show.call(this),u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&T.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){b.getTracks.call(this).forEach(function(t){u.on(t,"cuechange",function(t){return b.setCue.call(e,t)}),t.mode="hidden"});var t=b.getCurrentTrack.call(this);u.is.track(t)&&Array.from(t.activeCues||[]).length&&b.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return u.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=b.getTracks.call(this);if(!t.length)return null;var i=t.find(function(t){return t.language.toLowerCase()===e.language});(i||(i=u.getElement.call(this,"track[default]")),i)||(i=c(t,1)[0]);return i},getLabel:function(e){var t=e;return!u.is.track(t)&&d.textTracks&&this.captions.active&&(t=b.getCurrentTrack.call(this)),u.is.track(t)?u.is.empty(t.label)?u.is.empty(t.language)?v("enabled",this.config):e.language.toUpperCase():t.label:v("disabled",this.config)},setCue:function(e){var t=u.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===b.getCurrentTrack.call(this)&&(u.is.cue(n)?b.setText.call(this,n.getCueAsHTML()):b.setText.call(this,null),u.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions)){var t=u.createElement("span");u.emptyElement(this.elements.captions);var i=u.is.nullOrUndefined(e)?"":e;u.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");u.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(u.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),u.toggleState(this.elements.buttons.captions,!0))}},k={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void k.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(T.inject.call(this),this.listeners.controls()),k.toggleNativeControls.call(this),b.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,k.updateVolume.call(this),k.timeUpdate.call(this),k.checkPlaying.call(this),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),k.setTitle.call(this)},setTitle:function(){var e=v("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;u.is.empty(this.config.title)||this.config.title;t.setAttribute("title",v("frameTitle",this.config))}},checkPlaying:function(){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),u.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(u.toggleClass(this.elements.container,this.config.classNames.loading,!1),u.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){u.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&k.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,T.updateRangeFill.call(this,e))},setProgress:function(e,t){var i=u.is.number(t)?t:0,n=u.is.element(e)?e:this.elements.display.buffer;if(u.is.element(n)){n.value=i;var s=n.getElementsByTagName("span")[0];u.is.element(s)&&(s.childNodes[0].nodeValue=i)}},updateProgress:function(e){if(this.supported.ui&&u.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&k.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":k.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.textContent=u.formatTime(t,n,i)}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;k.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||k.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&k.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&k.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),T.updateSeekTooltip.call(this)}}},w={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=w.getSources.call(this);if(u.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!u.is.empty(e.getAttribute("size"))});return u.is.empty(t)?null:u.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=w.getSources.call(e);if(u.is.empty(t))return null;var i=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return u.is.empty(i)?null:Number(i[0].getAttribute("size"))},set:function(t){var i=w.getSources.call(e);if(!u.is.empty(i)){var n=Array.from(i).filter(function(e){return Number(e.getAttribute("size"))===t});if(!u.is.empty(n)){var s=n.filter(function(t){return d.mime.call(e,t.getAttribute("type"))});if(!u.is.empty(s)){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var a=e.currentTime,l=e.playing;e.media.src=s[0].getAttribute("src"),e.media.load(),l&&e.play(),e.currentTime=a,u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(u.removeElement(w.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},E=u.getBrowser(),T={updateRangeFill:function(e){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),E.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||E.isIE&&!window.svg4everybody}},createIcon:function(e,t){var i=T.getIconUrl.call(this),n=(i.absolute?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),l=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",l):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l),s.appendChild(a),s},createLabel:function(e,t){var i=v(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,l=void 0,r=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,l="play",o="pause",r="play",c="pause";break;case"mute":a=!0,l="mute",o="unmute",r="volume",c="muted";break;case"captions":a=!0,l="enableCaptions",o="disableCaptions",r="captions-off",c="captions-on";break;case"fullscreen":a=!0,l="enterFullscreen",o="exitFullscreen",r="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",l="play",r="play";break;default:l=s,r=e}return a?(i.appendChild(T.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(T.createIcon.call(this,r,{class:"icon--not-pressed"})),i.appendChild(T.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(T.createLabel.call(this,l,{class:"label--not-pressed"})),n["aria-pressed"]=!1):(i.appendChild(T.createIcon.call(this,r)),i.appendChild(T.createLabel.call(this,l))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},v(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,T.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=v("played",this.config);break;case"buffer":n=v("buffered",this.config)}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.getAttributesFromSelector(this.config.selectors.display[e]),i=u.createElement("div",u.extend(t,{class:"plyr__time "+t.class,"aria-label":v(e,this.config)}),"00:00");return this.elements.display[e]=i,i},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],l=u.createElement("li"),r=u.createElement("label",{class:this.config.classNames.control}),o=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),c=u.createElement("span",{hidden:""});r.appendChild(o),r.appendChild(c),r.insertAdjacentHTML("beforeend",n),u.is.element(s)&&r.appendChild(s),l.appendChild(r),t.appendChild(l)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.inputs.seek.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),k.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},toggleTab:function(e,t){u.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var n=!u.is.empty(this.options.quality)&&this.options.quality.length>1;if(T.toggleTab.call(this,"quality",n),T.checkMenu.call(this),n){u.emptyElement(i);this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){var n=T.getLabel.call(t,"quality",e);T.createMenuItem.call(t,e,i,"quality",n,function(e){var i="";switch(e){case 2160:i="4K";break;case 1440:case 1080:case 720:i="HD";break;case 576:i="SD"}return i.length?T.createBadge.call(t,i):null}(e))}),T.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?v("normal",this.config):t+"&times;";case"quality":return u.is.number(t)?t+"p":u.toTitleCase(t);case"captions":return b.getLabel.call(this);default:return null}},updateSetting:function(e,t,i){var n=this.elements.settings.panes[e],s=null,a=t;switch(e){case"captions":s=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(s=u.is.empty(i)?this[e]:i,u.is.empty(s)&&(s=this.config[e].default),!u.is.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(u.is.element(a)||(a=n&&n.querySelector("ul")),u.is.element(a)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=T.getLabel.call(this,e,s);var l=a&&a.querySelector('input[value="'+s+'"]');u.is.element(l)&&(l.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=b.getTracks.call(this).length;if(T.toggleTab.call(this,"captions",i),u.emptyElement(t),T.checkMenu.call(this),i){var n=b.getTracks.call(this).map(function(t){return{language:u.is.empty(t.language)?"enabled":t.language,label:b.getLabel.call(e,t)}});n.unshift({language:"",label:v("disabled",this.config)}),n.forEach(function(i){T.createMenuItem.call(e,i.language,t,"language",i.label,"enabled"!==i.language?T.createBadge.call(e,i.language.toUpperCase()):null,i.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=n.map(function(e){return e.language}),T.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&u.is.element(this.elements.settings.panes.speed)){u.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!u.is.empty(this.options.speed)&&this.options.speed.length>1;if(T.toggleTab.call(this,"speed",i),T.checkMenu.call(this),i){var n=this.elements.settings.panes.speed.querySelector("ul");u.emptyElement(n),this.options.speed.forEach(function(e){var i=T.getLabel.call(t,"speed",e);T.createMenuItem.call(t,e,n,"speed",i)}),T.updateSetting.call(this,"speed",n)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!u.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});u.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&t.hasAttribute("hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(u.toggleHidden(t,!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(e){var t=this.elements.settings.menu,i=e.target,n="false"===i.getAttribute("aria-expanded"),s=document.getElementById(i.getAttribute("aria-controls"));if(u.is.element(s)&&"tabpanel"===s.getAttribute("role")){var a=t.querySelector('[role="tabpanel"]:not([hidden])'),l=a.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+a.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){l.style.width=a.scrollWidth+"px",l.style.height=a.scrollHeight+"px";var r=T.getTabSize.call(this,s);u.on(l,u.transitionEndEvent,function e(t){t.target===l&&["width","height"].includes(t.propertyName)&&(l.style.width="",l.style.height="",u.off(l,u.transitionEndEvent,e))}),l.style.width=r.width+"px",l.style.height=r.height+"px"}u.toggleHidden(a,!0),a.setAttribute("tabindex",-1),u.toggleHidden(s,!n),i.setAttribute("aria-expanded",n),s.removeAttribute("tabindex"),s.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(T.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(T.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(T.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(T.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=T.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(T.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(T.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(T.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(T.createButton.call(this,"mute")),this.config.controls.includes("volume")){var l=u.createElement("div",{class:"plyr__volume"}),r={max:1,step:.05,value:this.config.volume},o=T.createRange.call(this,"volume",u.extend(r,{id:"plyr-volume-"+e.id}));l.appendChild(o.label),l.appendChild(o.input),this.elements.volume=l,i.appendChild(l)}if(this.config.controls.includes("captions")&&i.appendChild(T.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(T.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),h=u.createElement("div"),m=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),v(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),g.appendChild(n),t.elements.settings.tabs[i]=n}),m.appendChild(g),h.appendChild(m),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},v(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),h.appendChild(n),t.elements.settings.panes[i]=n}),p.appendChild(h),c.appendChild(p),i.appendChild(c),this.elements.settings.form=p,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(T.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(T.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(T.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(T.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&T.setQualityMenu.call(this,w.getQualityOptions.call(this)),T.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=T.getIconUrl.call(this);t.absolute&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;u.is.string(this.config.controls)||u.is.element(this.config.controls)?i=this.config.controls:u.is.function(this.config.controls)?i=this.config.controls.call(this,n):(i=T.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:b.getLabel.call(this)}),s=!1);var a=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=c(e,2),n=i[0],s=i[1];t=u.replaceAll(t,"{"+n+"}",s)}),t};s&&(u.is.string(this.config.controls)?i=a(i):u.is.element(i)&&(i.innerHTML=a(i.innerHTML)));var l=void 0;if(u.is.string(this.config.selectors.controls.container)&&(l=document.querySelector(this.config.selectors.controls.container)),u.is.element(l)||(l=this.elements.container),u.is.element(i)?l.appendChild(i):i&&l.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||u.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(l),this.config.tooltips.controls){var r=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(r).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},A=u.getBrowser(),C=function(){function e(t){l(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return r(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){T.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&u.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking",function(t){return k.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return k.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.showPosterOnEnd&&(e.player.restart(),e.player.media.load())}),u.on(this.player.media,"progress playing",function(t){return k.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return k.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied",function(t){return k.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return k.checkLoading.call(e.player,t)}),u.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){T.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),u.on(this.player.media,"qualitychange",function(t){T.updateSetting.call(e.player,"quality",null,t.detail.quality)}),u.on(this.player.media,"languagechange",function(){T.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){T.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=A.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;u.is.function(s)&&(a=s.call(e.player,t)),a&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var l=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=e.player.config.listeners[a],o=u.is.function(r);u.on(t,n,function(e){return i(e,s,a)},l&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){T.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation(),u.matches(t.target,e.player.config.selectors.inputs.language)?i(t,function(){e.player.language=t.target.value},"language"):u.matches(t.target,e.player.config.selectors.inputs.quality)?i(t,function(){e.player.quality=t.target.value},"quality"):u.matches(t.target,e.player.config.selectors.inputs.speed)?i(t,function(){e.player.speed=parseFloat(t.target.value)},"speed"):T.showTab.call(e.player,t)}),n(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,k.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),A.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){T.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return T.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),S=function(){function e(t){l(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return r(e,[{key:"get",value:function(t){if(!e.supported)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),N=function(){function e(t){var i=this;l(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&u.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return r(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(this.player.config.urls.googleIMA.api).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=u.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=v("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),u.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(u.is.element(i)){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;u.is.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}();function x(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}var P={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),P.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?P.ready.call(this):(u.loadScript(this.config.urls.youtube.api).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){P.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void k.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+n+"&fields=items(snippet(title))&part=snippet";u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,k.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;P.getTitle.call(e,n),e.media.play=function(){i.playVideo()},e.media.pause=function(){i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){var n=e.media.paused;e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t),n&&e.pause()}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return x(i.getPlaybackQuality())},set:function(t){var n=t;i.setPlaybackQuality(x(n)),u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:n})}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return k.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&u.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&u.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),T.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),u.is.empty(i)?i:u.dedupe(i.map(function(e){return x(e)}))));break;case 2:e.media.paused=!0,u.dispatchEvent.call(e,e.media,"pause")}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},L={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),L.setAspectRatio.call(this),u.is.object(window.Vimeo)?L.ready.call(this):u.loadScript(this.config.urls.vimeo.api).then(function(){L.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var n=(240-i)/4.8;this.media.style.transform="translateY(-"+n+"%)"}},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(this.config.attributes.embed.id));var a=u.parseVimeoId(s),l=u.createElement("iframe"),r="https://player.vimeo.com/video/"+a+"?"+n;l.setAttribute("src",r),l.setAttribute("allowfullscreen",""),l.setAttribute("allowtransparency",""),l.setAttribute("allow","autoplay");var o=u.createElement("div");o.appendChild(l),t.media=u.replaceElement(o,t.media),t.embed=new window.Vimeo.Player(l),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var i=t.media.paused;t.media.seeking=!0,u.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e).catch(function(){}),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,u.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&T.setSpeedMenu.call(t,[])})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);L.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,k.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,b.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=u.stripHTML(e.cues[0].text)),b.setText.call(t,i)}),t.embed.on("loaded",function(){u.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&u.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked"),u.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return k.build.call(t)},0)}},M=u.getBrowser(),I={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),u.toggleClass(this.elements.container,this.config.classNames.isIos,M.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch)),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":P.setup.call(this);break;case"vimeo":L.setup.call(this)}else this.isHTML5&&(k.setTitle.call(this),w.extend.call(this));else this.debug.warn("No media element found!")}},q={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(t){var i=this;u.is.object(t)&&"sources"in t&&t.sources.length?(w.cancelRequests.call(this),this.destroy.call(this,function(){switch(i.options.quality=[],u.removeElement(i.media),i.media=null,u.is.element(i.elements.container)&&i.elements.container.removeAttribute("class"),i.type=t.type,i.provider=u.is.empty(t.sources[0].provider)?e.html5:t.sources[0].provider,i.supported=d.check(i.type,i.provider,i.config.playsinline),i.provider+":"+i.type){case"html5:video":i.media=u.createElement("video");break;case"html5:audio":i.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":i.media=u.createElement("div",{src:t.sources[0].src})}i.elements.container.appendChild(i.media),u.is.boolean(t.autoplay)&&(i.config.autoplay=t.autoplay),i.isHTML5&&(i.config.crossorigin&&i.media.setAttribute("crossorigin",""),i.config.autoplay&&i.media.setAttribute("autoplay",""),"poster"in t&&i.media.setAttribute("poster",t.poster),i.config.loop.active&&i.media.setAttribute("loop",""),i.config.muted&&i.media.setAttribute("muted",""),i.config.playsinline&&i.media.setAttribute("playsinline","")),k.addStyleHook.call(i),i.isHTML5&&q.insertElements.call(i,"source",t.sources),i.config.title=t.title,I.setup.call(i),i.isHTML5&&("tracks"in t&&q.insertElements.call(i,"track",t.tracks),i.media.load()),(i.isHTML5||i.isEmbed&&!i.supported.ui)&&k.build.call(i),i.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function n(s,a){var r=this;if(l(this,n),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=s,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},i,a||{},function(){try{return JSON.parse(r.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new h(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){setTimeout(function(){var e=r.media.cloneNode(!0);e.getAttribute("autoplay")&&e.pause(),r.elements.original=e},0);var o=this.media.tagName.toLowerCase(),c=null,p=null,m=null;switch(o){case"div":if(c=this.media.querySelector("iframe"),u.is.element(c)){if(p=c.getAttribute("src"),this.provider=u.getProviderByUrl(p),this.elements.container=this.media,this.media=c,this.elements.container.className="",m=u.getUrlParams(p),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=g.includes(m.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(e).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=t.video;break;case"video":case"audio":this.type=o,this.provider=e.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=d.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new C(this),this.storage=new S(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),k.addStyleHook.call(this),I.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){r.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&k.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new y(this),this.ads=new N(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return r(n,[{key:"play",value:function(){return u.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():u.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=u.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,u.toggleState(this.elements.buttons.captions,this.captions.active),u.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(u.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(!u.is.boolean(e))if(u.is.event(e)){s="enterfullscreen"===e.type;n=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(i=2e3),this.touch||"focusin"!==e.type||(i=3e3,u.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else n=u.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),n||this.paused||this.loading){if(u.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&u.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=setTimeout(function(){u.is.element(t.elements.controls)&&((!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(u.hasClass(t.elements.container,t.config.classNames.hideControls)||u.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),u.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(u.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!u.is.empty(t.config.settings)&&T.toggleMenu.call(t,!1))))},i))}}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),k.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===e.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===e.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===e.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===t.video)}},{key:"isAudio",get:function(){return Boolean(this.type===t.audio)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2))}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;u.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!u.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(u.is.empty(e)||(t=Number(e)),u.is.number(t)&&0!==t||(t=this.storage.get("quality")),u.is.number(t)||(t=this.config.quality.selected),u.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var i=u.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+i+" instead"),t=i}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){q.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?u.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(u.is.string(e))if(u.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,b.setText.call(this,null),b.setLanguage.call(this),u.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}}]),n}()});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var e,t,i=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function l(t,i,n,s){var a,r,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,p=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(r=o.createElement("link")).rel="stylesheet",r.href=p):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(r=o.createElement("img")).src=p:((r=o.createElement("script")).src=t,r.async=void 0===c||c),r.onload=r.onerror=r.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in r)try{r.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return l(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,r)&&o.head.appendChild(r)}function r(e,i,n){var r,o;if(i&&i.trim&&(r=i),o=(r?n:i)||{},r){if(r in t)throw"LoadJS";t[r]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,r=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<r;s++)l(e[s],n,i)}(e,function(e){a(o,e),s(r,e)},o)}return r.ready=function(e,t){return function(e,t){var s,a,l,r=[],o=(e=e.push?e:[e]).length,c=o;for(s=function(e,i){i.length&&r.push(e),--c||t(r)};o--;)a=e[o],(l=i[a])?s(a,l):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),r},r.done=function(e){s(e,[])},r.reset=function(){t={},i={},n={}},r.isDefined=function(e){return e in t},r},e.exports=i()}(e={exports:{}},e.exports),e.exports),n={html5:"html5",youtube:"youtube",vimeo:"vimeo"},s={audio:"audio",video:"video"},a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},l=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),r=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},o=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var l,r=e[Symbol.iterator]();!(n=(l=r.next()).done)&&(i.push(l.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&r.return&&r.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),c={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e){return new Promise(function(t,n){i(e,{success:t,error:n})})},loadSprite:function(e,t){if(c.is.string(e)){var i=c.is.string(t),n=function(){return document.querySelectorAll("#"+t).length};if(!i||!n()){var s=document.createElement("div");if(c.toggleHidden(s,!0),i&&s.setAttribute("id",t),u.storage){var a=window.localStorage.getItem("cache-"+t);if(null!==a){var l=JSON.parse(a);return void r.call(s,l.content)}}c.fetch(e).then(function(e){c.is.empty(e)||(u.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),r.call(s,e))}).catch(function(){})}}function r(e){i&&n()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return c.is.object(t)&&c.setAttributes(n,t),c.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(c.createElement(e,i,n))},removeElement:function(e){c.is.nodeList(e)||c.is.array(e)?Array.from(e).forEach(c.removeElement):c.is.element(e)&&c.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return c.is.element(t)&&c.is.element(t.parentNode)&&c.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){c.is.element(e)&&!c.is.empty(t)&&Object.entries(t).forEach(function(t){var i=o(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!c.is.string(e)||c.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),l=a[0],r=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":c.is.object(n)&&c.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[l]=r}}),i},toggleHidden:function(e,t){if(c.is.element(e)){var i=t;c.is.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,i){if(c.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return c.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(c.is.element(e)){var i=c.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=c.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?c.on(this.elements.container,"keydown",a,!1):c.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!c.is.empty(e)&&!c.is.empty(t)&&c.is.function(i))if(c.is.nodeList(e)||c.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&c.toggleListener.call(null,e,t,i,n,s,a)});else{var l=t.split(" "),r=a;u.passiveListeners&&(r={passive:s,capture:a}),l.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,r)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];c.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];c.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(c.is.element(e)&&!c.is.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:c.is.plyr(this)?this:null})});e.dispatchEvent(s)}},toggleState:function(e,t){if(c.is.array(e)||c.is.nodeList(e))Array.from(e).forEach(function(e){return c.toggleState(e,t)});else if(c.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=c.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},format:function(e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return c.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return c.is.string(i[t])?i[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!c.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),l=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(l)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=c.replaceAll(e,"-"," "),e=c.replaceAll(e,"_"," "),e=c.toTitleCase(e),c.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=c.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return c.is.object(s)?(Object.keys(s).forEach(function(t){c.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,r({},t,{})),c.extend(e[t],s[t])):Object.assign(e,r({},t,s[t]))}),c.extend.apply(c,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},dedupe:function(e){return c.is.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e},closest:function(e,t){return c.is.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?n.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?n.vimeo:null},parseYouTubeId:function(e){if(c.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(c.is.empty(e))return null;if(c.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=o(i,2),s=n[0],a=n[1];return Object.assign(e,r({},s,decodeURIComponent(a)))},{})},buildUrlParams:function(e){return c.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!c.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){c.toggleHidden(e,!0),e.offsetHeight,c.toggleHidden(e,!1)},0)}},u={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=c.getBrowser(),l=a.isIPhone&&i&&u.playsinline;switch(t+":"+e){case"html5:video":s=(n=u.video)&&u.rangeInput&&(!a.isIPhone||l);break;case"html5:audio":s=(n=u.audio)&&u.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=u.rangeInput&&(!a.isIPhone||l);break;default:s=(n=u.audio&&u.video)&&u.rangeInput}return{api:n,ui:s}},pip:!c.getBrowser().isIPhone&&c.is.function(c.createElement("video").webkitSetPresentationMode),airplay:c.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!c.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(t=document.createElement("input"),t.type="range","range"===t.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==c.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},d={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=d.getSources.call(this);if(c.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!c.is.empty(e.getAttribute("size"))});return c.is.empty(t)?null:c.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=d.getSources.call(e);if(c.is.empty(t))return null;var i=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return c.is.empty(i)?null:Number(i[0].getAttribute("size"))},set:function(t){var i=d.getSources.call(e);if(!c.is.empty(i)){var n=Array.from(i).filter(function(e){return Number(e.getAttribute("size"))===t});if(!c.is.empty(n)){var s=n.filter(function(t){return u.mime.call(e,t.getAttribute("type"))});if(!c.is.empty(s)){c.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var a=e.currentTime,l=e.playing;e.media.src=s[0].getAttribute("src"),e.media.load(),l&&e.play(),e.currentTime=a,c.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(c.removeElement(d.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},p=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(c.is.empty(e)||c.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var i=t.i18n[e],n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=o(e,2),n=t[0],s=t[1];i=c.replaceAll(i,n,s)}),i},h=c.getBrowser(),m={addStyleHook:function(){c.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),c.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void m.toggleNativeControls.call(this,!0);c.is.element(this.elements.controls)||(f.inject.call(this),this.listeners.controls()),m.toggleNativeControls.call(this),y.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,m.updateVolume.call(this),m.timeUpdate.call(this),m.checkPlaying.call(this),c.toggleClass(this.elements.container,this.config.classNames.pip.supported,u.pip&&this.isHTML5&&this.isVideo),c.toggleClass(this.elements.container,this.config.classNames.airplay.supported,u.airplay&&this.isHTML5),c.toggleClass(this.elements.container,this.config.classNames.isIos,h.isIos),c.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){c.dispatchEvent.call(e,e.media,"ready")},0),m.setTitle.call(this),m.setPoster.call(this)},setTitle:function(){var e=p("play",this.config);if(c.is.string(this.config.title)&&!c.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),c.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=c.getElement.call(this,"iframe");if(!c.is.element(t))return;var i=c.is.empty(this.config.title)?"video":this.config.title,n=p("frameTitle",this.config);t.setAttribute("title",n.replace("{title}",i))}},setPoster:function(){if(c.is.element(this.elements.poster)&&!c.is.empty(this.poster)){var e=this.poster.split(",");this.elements.poster.style.backgroundImage=e.map(function(e){return"url('"+e+"')"}).join(",")}},checkPlaying:function(){c.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),c.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),c.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),c.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){c.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(c.toggleClass(this.elements.container,this.config.classNames.loading,!1),c.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){c.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(c.is.element(this.elements.inputs.volume)&&m.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),c.is.element(this.elements.buttons.mute)&&c.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;c.is.element(e)&&(e.value=t,f.updateRangeFill.call(this,e))},setProgress:function(e,t){var i=c.is.number(t)?t:0,n=c.is.element(e)?e:this.elements.display.buffer;if(c.is.element(n)){n.value=i;var s=n.getElementsByTagName("span")[0];c.is.element(s)&&(s.childNodes[0].nodeValue=i)}},updateProgress:function(e){if(this.supported.ui&&c.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=c.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&m.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":m.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(c.is.element(e)&&c.is.number(t)){var n=c.getHours(this.duration)>0;e.textContent=c.formatTime(t,n,i)}},timeUpdate:function(e){var t=!c.is.element(this.elements.display.duration)&&this.config.invertTime;m.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||m.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=c.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&m.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&m.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),f.updateSeekTooltip.call(this)}}},g=c.getBrowser(),f={updateRangeFill:function(e){var t=c.is.event(e)?e.target:e;c.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),g.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||g.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=c.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:c.getElements.call(this,this.config.selectors.buttons.play),pause:c.getElement.call(this,this.config.selectors.buttons.pause),restart:c.getElement.call(this,this.config.selectors.buttons.restart),rewind:c.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:c.getElement.call(this,this.config.selectors.buttons.fastForward),mute:c.getElement.call(this,this.config.selectors.buttons.mute),pip:c.getElement.call(this,this.config.selectors.buttons.pip),airplay:c.getElement.call(this,this.config.selectors.buttons.airplay),settings:c.getElement.call(this,this.config.selectors.buttons.settings),captions:c.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:c.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=c.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:c.getElement.call(this,this.config.selectors.inputs.seek),volume:c.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:c.getElement.call(this,this.config.selectors.display.buffer),currentTime:c.getElement.call(this,this.config.selectors.display.currentTime),duration:c.getElement.call(this,this.config.selectors.display.duration)},c.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var i=f.getIconUrl.call(this),n=(i.cors?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");c.setAttributes(s,c.extend(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),l=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",l):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l),s.appendChild(a),s},createLabel:function(e,t){var i=p(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,c.createElement("span",n,i)},createBadge:function(e){if(c.is.empty(e))return null;var t=c.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(c.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=c.createElement("button"),n=Object.assign({},t),s=c.toCamelCase(e),a=!1,l=void 0,r=void 0,o=void 0,u=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,l="play",o="pause",r="play",u="pause";break;case"mute":a=!0,l="mute",o="unmute",r="volume",u="muted";break;case"captions":a=!0,l="enableCaptions",o="disableCaptions",r="captions-off",u="captions-on";break;case"fullscreen":a=!0,l="enterFullscreen",o="exitFullscreen",r="enter-fullscreen",u="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",l="play",r="play";break;default:l=s,r=e}return a?(i.appendChild(f.createIcon.call(this,u,{class:"icon--pressed"})),i.appendChild(f.createIcon.call(this,r,{class:"icon--not-pressed"})),i.appendChild(f.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(f.createLabel.call(this,l,{class:"label--not-pressed"})),n["aria-pressed"]=!1):(i.appendChild(f.createIcon.call(this,r)),i.appendChild(f.createLabel.call(this,l))),c.extend(n,c.getAttributesFromSelector(this.config.selectors.buttons[s],n)),c.setAttributes(i,n),"play"===s?(c.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=c.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},p(e,this.config)),n=c.createElement("input",c.extend(c.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,f.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=c.createElement("progress",c.extend(c.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(c.createElement("span",null,"0"));var n="";switch(e){case"played":n=p("played",this.config);break;case"buffer":n=p("buffered",this.config)}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=c.getAttributesFromSelector(this.config.selectors.display[e]),i=c.createElement("div",c.extend(t,{class:"plyr__time "+t.class,"aria-label":p(e,this.config)}),"00:00");return this.elements.display[e]=i,i},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],l=c.createElement("li"),r=c.createElement("label",{class:this.config.classNames.control}),o=c.createElement("input",c.extend(c.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),u=c.createElement("span",{hidden:""});r.appendChild(o),r.appendChild(u),r.insertAdjacentHTML("beforeend",n),c.is.element(s)&&r.appendChild(s),l.appendChild(r),t.appendChild(l)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&c.is.element(this.elements.inputs.seek)&&c.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.inputs.seek.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){c.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(c.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!c.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),m.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",c.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},toggleTab:function(e,t){c.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(c.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");c.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var n=!c.is.empty(this.options.quality)&&this.options.quality.length>1;if(f.toggleTab.call(this,"quality",n),f.checkMenu.call(this),n){c.emptyElement(i);this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){var n=f.getLabel.call(t,"quality",e);f.createMenuItem.call(t,e,i,"quality",n,function(e){var i="";switch(e){case 2160:i="4K";break;case 1440:case 1080:case 720:i="HD";break;case 576:i="SD"}return i.length?f.createBadge.call(t,i):null}(e))}),f.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?p("normal",this.config):t+"&times;";case"quality":return c.is.number(t)?t+"p":c.toTitleCase(t);case"captions":return y.getLabel.call(this);default:return null}},updateSetting:function(e,t,i){var n=this.elements.settings.panes[e],s=null,a=t;switch(e){case"captions":s=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(s=c.is.empty(i)?this[e]:i,c.is.empty(s)&&(s=this.config[e].default),!c.is.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(c.is.element(a)||(a=n&&n.querySelector("ul")),c.is.element(a)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=f.getLabel.call(this,e,s);var l=a&&a.querySelector('input[value="'+s+'"]');c.is.element(l)&&(l.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=y.getTracks.call(this).length;if(f.toggleTab.call(this,"captions",i),c.emptyElement(t),f.checkMenu.call(this),i){var n=y.getTracks.call(this).map(function(t){return{language:c.is.empty(t.language)?"enabled":t.language,label:y.getLabel.call(e,t)}});n.unshift({language:"",label:p("disabled",this.config)}),n.forEach(function(i){f.createMenuItem.call(e,i.language,t,"language",i.label,"enabled"!==i.language?f.createBadge.call(e,i.language.toUpperCase()):null,i.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=n.map(function(e){return e.language}),f.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&c.is.element(this.elements.settings.panes.speed)){c.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!c.is.empty(this.options.speed)&&this.options.speed.length>1;if(f.toggleTab.call(this,"speed",i),f.checkMenu.call(this),i){var n=this.elements.settings.panes.speed.querySelector("ul");c.emptyElement(n),this.options.speed.forEach(function(e){var i=f.getLabel.call(t,"speed",e);f.createMenuItem.call(t,e,n,"speed",i)}),f.updateSetting.call(this,"speed",n)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!c.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});c.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(c.is.element(t)&&c.is.element(i)){var n=c.is.boolean(e)?e:c.is.element(t)&&t.hasAttribute("hidden");if(c.is.event(e)){var s=c.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}c.is.element(i)&&i.setAttribute("aria-expanded",n),c.is.element(t)&&(c.toggleHidden(t,!n),c.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return c.removeElement(t),{width:i,height:n}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,i=document.getElementById(e);if(c.is.element(i)&&"tabpanel"===i.getAttribute("role")){var n=t.querySelector('[role="tabpanel"]:not([hidden])'),s=n.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+n.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),u.transitions&&!u.reducedMotion){s.style.width=n.scrollWidth+"px",s.style.height=n.scrollHeight+"px";var a=f.getTabSize.call(this,i);c.on(s,c.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",c.off(s,c.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}c.toggleHidden(n,!0),n.setAttribute("tabindex",-1),c.toggleHidden(i,!1);var l=c.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(l).forEach(function(e){e.setAttribute("aria-expanded",!0)}),i.removeAttribute("tabindex"),i.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(c.is.empty(this.config.controls))return null;var i=c.createElement("div",c.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(f.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(f.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(f.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(f.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=c.createElement("div",c.getAttributesFromSelector(this.config.selectors.progress)),s=f.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(f.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=c.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(f.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(f.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(f.createButton.call(this,"mute")),this.config.controls.includes("volume")){var l=c.createElement("div",{class:"plyr__volume"}),r={max:1,step:.05,value:this.config.volume},o=f.createRange.call(this,"volume",c.extend(r,{id:"plyr-volume-"+e.id}));l.appendChild(o.label),l.appendChild(o.input),this.elements.volume=l,i.appendChild(l)}if(this.config.controls.includes("captions")&&i.appendChild(f.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!c.is.empty(this.config.settings)){var h=c.createElement("div",{class:"plyr__menu",hidden:""});h.appendChild(f.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var m=c.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),g=c.createElement("div"),y=c.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),v=c.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=c.createElement("li",{role:"tab",hidden:""}),s=c.createElement("button",c.extend(c.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),p(i,t.config)),a=c.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),v.appendChild(n),t.elements.settings.tabs[i]=n}),y.appendChild(v),g.appendChild(y),this.config.settings.forEach(function(i){var n=c.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1}),s=c.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},p(i,t.config));n.appendChild(s);var a=c.createElement("ul");n.appendChild(a),g.appendChild(n),t.elements.settings.panes[i]=n}),m.appendChild(g),h.appendChild(m),i.appendChild(h),this.elements.settings.form=m,this.elements.settings.menu=h}return this.config.controls.includes("pip")&&u.pip&&i.appendChild(f.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&u.airplay&&i.appendChild(f.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(f.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(f.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&f.setQualityMenu.call(this,d.getQualityOptions.call(this)),f.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=f.getIconUrl.call(this);t.cors&&c.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},s=!0;c.is.string(this.config.controls)||c.is.element(this.config.controls)?i=this.config.controls:c.is.function(this.config.controls)?i=this.config.controls.call(this,n):(i=f.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:y.getLabel.call(this)}),s=!1);var a=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=o(e,2),n=i[0],s=i[1];t=c.replaceAll(t,"{"+n+"}",s)}),t};s&&(c.is.string(this.config.controls)?i=a(i):c.is.element(i)&&(i.innerHTML=a(i.innerHTML)));var l=void 0;if(c.is.string(this.config.selectors.controls.container)&&(l=document.querySelector(this.config.selectors.controls.container)),c.is.element(l)||(l=this.elements.container),c.is.element(i)?l.appendChild(i):i&&l.insertAdjacentHTML("beforeend",i),c.is.element(this.elements.controls)||f.findElements.call(this),window.navigator.userAgent.includes("Edge")&&c.repaint(l),this.config.tooltips.controls){var r=c.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(r).forEach(function(t){c.toggleClass(t,e.config.classNames.hidden,!1),c.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},y={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(c.is.empty(e)||(this.captions.language=e),c.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!c.is.boolean(this.captions.active)){var t=this.storage.get("captions");c.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!u.textTracks)c.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&f.setCaptionsMenu.call(this);else{c.is.element(this.elements.captions)||(this.elements.captions=c.createElement("div",c.getAttributesFromSelector(this.config.selectors.captions)),c.insertAfter(this.elements.captions,this.elements.wrapper)),c.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!c.is.empty(y.getTracks.call(this)));var i=y.getTracks.call(this);if(!c.is.empty(i)){if(c.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=c.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&c.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){c.removeElement(e)})})}y.setLanguage.call(this),y.show.call(this),c.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&f.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){y.getTracks.call(this).forEach(function(t){c.on(t,"cuechange",function(t){return y.setCue.call(e,t)}),t.mode="hidden"});var t=y.getCurrentTrack.call(this);c.is.track(t)&&Array.from(t.activeCues||[]).length&&y.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return c.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=y.getTracks.call(this);if(!t.length)return null;var i=t.find(function(t){return t.language.toLowerCase()===e.language});(i||(i=c.getElement.call(this,"track[default]")),i)||(i=o(t,1)[0]);return i},getLabel:function(e){var t=e;return!c.is.track(t)&&u.textTracks&&this.captions.active&&(t=y.getCurrentTrack.call(this)),c.is.track(t)?c.is.empty(t.label)?c.is.empty(t.language)?p("enabled",this.config):e.language.toUpperCase():t.label:p("disabled",this.config)},setCue:function(e){var t=c.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===y.getCurrentTrack.call(this)&&(c.is.cue(n)?y.setText.call(this,n.getCueAsHTML()):y.setText.call(this,null),c.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(c.is.element(this.elements.captions)){var t=c.createElement("span");c.emptyElement(this.elements.captions);var i=c.is.nullOrUndefined(e)?"":e;c.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");c.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(c.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),c.toggleState(this.elements.buttons.captions,!0))}},v=function(){},b=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];a(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return l(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):v}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):v}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):v}}]),e}(),k={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.0/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet",poster:"https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",poster:"plyr__poster",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},w=c.getBrowser();function E(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;c.is.element(e)&&c.toggleState(e,this.active),c.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),w.isIos||c.trapFocus.call(this.player,this.target,this.active)}}function T(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",c.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),E.call(this)}var A=function(){function e(t){var i=this;a(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},c.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){E.call(i)}),c.on(this.player.elements.container,"dblclick",function(e){c.is.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return l(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),c.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(w.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?c.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():T.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(w.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!c.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else T.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:c.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return w.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(c.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!c.is.function(document[t+"ExitFullscreen"])&&!c.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),C=c.getBrowser(),S=function(){function e(t){a(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return l(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&c.is.number(i)){if(n){var a=c.getFocusElement();if(c.is.element(a)&&c.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){f.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,c.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),c.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&c.toggleListener(window,"keydown keyup",this.handleKey,e,!1),c.toggleListener(document.body,"click",this.toggleMenu,e),c.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&c.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),c.on(this.player.elements.container,"focusout",function(t){c.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),c.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){c.toggleClass(c.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&c.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(c.on(this.player.media,"timeupdate seeking",function(t){return m.timeUpdate.call(e.player,t)}),c.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return m.durationUpdate.call(e.player,t)}),c.on(this.player.media,"loadeddata",function(){c.toggleHidden(e.player.elements.volume,!e.player.hasAudio),c.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),c.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),c.on(this.player.media,"progress playing",function(t){return m.updateProgress.call(e.player,t)}),c.on(this.player.media,"volumechange",function(t){return m.updateVolume.call(e.player,t)}),c.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return m.checkPlaying.call(e.player,t)}),c.on(this.player.media,"waiting canplay seeked playing",function(t){return m.checkLoading.call(e.player,t)}),c.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=c.getElement.call(this.player,"."+this.player.config.classNames.video);if(!c.is.element(t))return;c.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&c.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),c.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),c.on(this.player.media,"ratechange",function(){f.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),c.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),c.on(this.player.media,"qualitychange",function(t){f.updateSetting.call(e.player,"quality",null,t.detail.quality)}),c.on(this.player.media,"languagechange",function(){f.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),c.on(this.player.media,"captionsenabled captionsdisabled",function(){f.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),c.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.player.media.error),c.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=C.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;c.is.function(s)&&(a=s.call(e.player,t)),a&&c.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var l=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=e.player.config.listeners[a],o=c.is.function(r);c.on(t,n,function(e){return i(e,s,a)},l&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){f.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var n=function(){var t="plyr-settings-"+e.player.id+"-home";f.showTab.call(e.player,t)};if(c.matches(t.target,e.player.config.selectors.inputs.language))i(t,function(){e.player.language=t.target.value,n()},"language");else if(c.matches(t.target,e.player.config.selectors.inputs.quality))i(t,function(){e.player.quality=t.target.value,n()},"quality");else if(c.matches(t.target,e.player.config.selectors.inputs.speed))i(t,function(){e.player.speed=parseFloat(t.target.value),n()},"speed");else{var s=t.target;f.showTab.call(e.player,s.getAttribute("aria-controls"))}}),n(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!c.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,m.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),C.isWebkit&&n(c.getElements.call(this.player,'input[type="range"]'),"input",function(t){f.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return f.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),N={setup:function(){var e=this;c.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),N.setAspectRatio.call(this),c.is.object(window.Vimeo)?N.ready.call(this):c.loadScript(this.config.urls.vimeo.sdk).then(function(){N.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=c.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var n=(240-i)/4.8;this.media.style.transform="translateY(-"+n+"%)"}},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},n=c.buildUrlParams(i),s=t.media.getAttribute("src");c.is.empty(s)&&(s=t.media.getAttribute(t.config.attributes.embed.id));var a=c.parseVimeoId(s),l=c.createElement("iframe"),r=c.format(t.config.urls.vimeo.iframe,a,n);l.setAttribute("src",r),l.setAttribute("allowfullscreen",""),l.setAttribute("allowtransparency",""),l.setAttribute("allow","autoplay");var o=c.createElement("div");o.appendChild(l),t.media=c.replaceElement(o,t.media),c.fetch(c.format(t.config.urls.vimeo.api,a),"json").then(function(e){if(!c.is.empty(e)){var i=new URL(e[0].thumbnail_large);i.pathname=i.pathname.split("_")[0]+".jpg",t.media.setAttribute("poster",i.href),m.setPoster.call(t)}}),t.embed=new window.Vimeo.Player(l),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var u=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return u},set:function(e){var i=t.media.paused;t.media.seeking=!0,c.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e).catch(function(){}),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,c.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&f.setSpeedMenu.call(t,[])})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,c.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!c.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,c.dispatchEvent.call(t,t.media,"volumechange")})}});var g=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return g},set:function(e){var i=c.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){g=i})}});var v=void 0;t.embed.getVideoUrl().then(function(e){v=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return v}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=c.getAspectRatio(t[0],t[1]);N.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,m.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){u=e,c.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,c.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,y.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=c.stripHTML(e.cues[0].text)),y.setText.call(t,i)}),t.embed.on("loaded",function(){c.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&c.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,c.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,c.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,u=e.seconds,c.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,c.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&c.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,c.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,c.dispatchEvent.call(t,t.media,"seeked"),c.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,c.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,c.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return m.build.call(t)},0)}};function P(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}var x={setup:function(){var e=this;c.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),x.setAspectRatio.call(this),c.is.object(window.YT)&&c.is.function(window.YT.Player)?x.ready.call(this):(c.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){x.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(c.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(c.is.empty(i))return this.config.title=i,void m.setTitle.call(this)}var n=this.config.keys.google;if(c.is.string(n)&&!c.is.empty(n)){var s=c.format(this.config.urls.youtube.api,e,n);c.fetch(s).then(function(e){c.is.object(e)&&(t.config.title=e.items[0].snippet.title,m.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(c.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");c.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=c.parseYouTubeId(i),s=c.generateId(e.provider),a=c.createElement("div",{id:s});e.media=c.replaceElement(a,e.media),e.media.setAttribute("poster",c.format(e.config.urls.youtube.poster,n)),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!c.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,c.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){c.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),c.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;x.getTitle.call(e,n),e.media.play=function(){i.playVideo()},e.media.pause=function(){i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){var n=e.media.paused;e.media.seeking=!0,c.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t),n&&e.pause()}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return P(i.getPlaybackQuality())},set:function(t){var n=t;i.setPlaybackQuality(P(n)),c.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:n})}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),c.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=c.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),c.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),c.dispatchEvent.call(e,e.media,"timeupdate"),c.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&c.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),c.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return m.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:c.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),c.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):c.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&c.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&c.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,c.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){c.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),c.dispatchEvent.call(e,e.media,"durationchange")),f.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),c.is.empty(i)?i:c.dedupe(i.map(function(e){return P(e)}))));break;case 2:e.media.paused=!0,c.dispatchEvent.call(e,e.media,"pause")}c.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},L={setup:function(){if(this.media)if(c.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),c.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&c.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=c.createElement("div",{class:this.config.classNames.video}),c.wrap(this.media,this.elements.wrapper),this.elements.poster=c.createElement("span",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":x.setup.call(this);break;case"vimeo":N.setup.call(this)}else this.isHTML5&&d.extend.call(this);else this.debug.warn("No media element found!")}},M=function(){function e(t){var i=this;a(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&c.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return l(e,[{key:"load",value:function(){var e=this;this.enabled&&(c.is.object(window.google)&&c.is.object(window.google.ima)?this.ready():c.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=c.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,i.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=c.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=p("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),c.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(c.is.element(i)){var n=100/t.player.duration*e,s=c.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();c.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;c.is.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];c.is.array(a)&&a.forEach(function(e){c.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return c.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){c.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+c.buildUrlParams(e)}}]),e}(),I={insertElements:function(e,t){var i=this;c.is.string(t)?c.insertElement(e,this.media,{src:t}):c.is.array(t)&&t.forEach(function(t){c.insertElement(e,i.media,t)})},change:function(e){var t=this;c.is.object(e)&&"sources"in e&&e.sources.length?(d.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],c.removeElement(t.media),t.media=null,c.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=c.is.empty(e.sources[0].provider)?n.html5:e.sources[0].provider,t.supported=u.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=c.createElement("video");break;case"html5:audio":t.media=c.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=c.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),c.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),m.addStyleHook.call(t),t.isHTML5&&I.insertElements.call(t,"source",e.sources),t.config.title=e.title,L.setup.call(t),t.isHTML5&&("tracks"in e&&I.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&m.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},q=function(){function e(t){a(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return l(e,[{key:"get",value:function(t){if(!e.supported)return null;var i=window.localStorage.getItem(this.key);if(c.is.empty(i))return null;var n=JSON.parse(i);return c.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&c.is.object(t)){var i=this.get();c.is.empty(i)&&(i={}),c.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}();return function(){function e(t,i){var l=this;if(a(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=u.touch,this.media=t,c.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||c.is.nodeList(this.media)||c.is.array(this.media))&&(this.media=this.media[0]),this.config=c.extend({},k,i||{},function(){try{return JSON.parse(l.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new b(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",u),!c.is.nullOrUndefined(this.media)&&c.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(u.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var o=this.media.tagName.toLowerCase(),d=null,p=null,h=null;switch(o){case"div":if(d=this.media.querySelector("iframe"),c.is.element(d)){if(p=d.getAttribute("src"),this.provider=c.getProviderByUrl(p),this.elements.container=this.media,this.media=d,this.elements.container.className="",h=c.getUrlParams(p),!c.is.empty(h)){var g=["1","true"];g.includes(h.autoplay)&&(this.config.autoplay=!0),g.includes(h.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=g.includes(h.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(c.is.empty(this.provider)||!Object.keys(n).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=s.video;break;case"video":case"audio":this.type=o,this.provider=n.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=u.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new S(this),this.storage=new q(this),this.media.plyr=this,c.is.element(this.elements.container)||(this.elements.container=c.createElement("div"),c.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),m.addStyleHook.call(this),L.setup.call(this),this.config.debug&&c.on(this.elements.container,this.config.events.join(" "),function(e){l.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&m.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new A(this),this.ads=new M(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return l(e,[{key:"play",value:function(){return c.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&c.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(c.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():c.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(c.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(c.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(c.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(c.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=c.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,c.toggleState(this.elements.buttons.captions,this.captions.active),c.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),c.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){u.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(c.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(!c.is.boolean(e))if(c.is.event(e)){s="enterfullscreen"===e.type;n=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(i=2e3),this.touch||"focusin"!==e.type||(i=3e3,c.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else n=c.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),n||this.paused||this.loading){if(c.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&c.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=setTimeout(function(){c.is.element(t.elements.controls)&&((!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(c.hasClass(t.elements.container,t.config.classNames.hideControls)||c.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),c.toggleClass(t.elements.container,t.config.classNames.hideControls,t.config.hideControls)&&(c.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!c.is.empty(t.config.settings)&&f.toggleMenu.call(t,!1))))},i))}}},{key:"on",value:function(e,t){c.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){c.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(c.removeElement(t.elements.buttons.play),c.removeElement(t.elements.captions),c.removeElement(t.elements.controls),c.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),c.is.function(e)&&e()):(t.listeners.clear(),c.replaceElement(t.elements.original,t.elements.container),c.dispatchEvent.call(t,t.elements.original,"destroyed",!0),c.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),m.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&c.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return u.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===n.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===n.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===n.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===s.video)}},{key:"isAudio",get:function(){return Boolean(this.type===s.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;c.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return c.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;c.is.string(t)&&(t=Number(t)),c.is.number(t)||(t=this.storage.get("volume")),c.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!c.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;c.is.boolean(t)||(t=this.storage.get("muted")),c.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;c.is.number(e)&&(t=e),c.is.number(t)||(t=this.storage.get("speed")),c.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(c.is.empty(e)||(t=Number(e)),c.is.number(t)&&0!==t||(t=this.storage.get("quality")),c.is.number(t)||(t=this.config.quality.selected),c.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var i=c.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+i+" instead"),t=i}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=c.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){I.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?c.is.string(e)&&(this.media.setAttribute("poster",e),m.setPoster.call(this)):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=c.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(c.is.string(e))if(c.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,y.setText.call(this,null),y.setLanguage.call(this),c.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(u.pip){var n=c.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return u.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return u.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return c.loadSprite(e,t)}}]),e}()});
//# sourceMappingURL=plyr.min.js.map
diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map
index b22208e6..14c507e4 100644
--- a/dist/plyr.min.js.map
+++ b/dist/plyr.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["types.js","defaults.js","support.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js"],"names":["providers","types","defaults","navigator","language","userLanguage","split","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","replace","test","createElement","rel","href","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","utils","input","this","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","array","nodeList","object","keys","constructor","documentMode","documentElement","style","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","response","Error","statusText","open","send","id","is","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","data","content","fetch","then","empty","setItem","stringify","catch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","_ref","key","_ref2","value","sel","existingAttributes","existing","s","selector","className","parts","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","toggle","contains","classList","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","currentTime","duration","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toString","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len","_key","source","shift","defineProperty","extend","apply","concat","toConsumableArray","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","match","$2","parser","search","startsWith","parseUrl","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","toggleClass","fallback","Fullscreen","property","_this","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","exit","enter","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","some","pre","i18n","seekTime","title","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","blob","createObjectURL","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","_this2","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","setTitle","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","_this3","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","forceHours","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","suffix","list","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","touch","pageX","left","parseFloat","setting","tabs","panes","toggleTab","checkMenu","sort","a","b","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","lang","default","unshift","_this4","values","tab","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","create","findElements","repaint","labels","_this6","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setInterval","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","handler","_this11","Date","now","base","buildUrlParams","mapQualityUnit","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","levels","getAvailableQualityLevels","level","Vimeo","padding","offset","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","wrap","insertElement","attribute","cancelRequests","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","clear","unload","readyState","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline"],"mappings":"uLAIA,IAAaA,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SCRLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,gDAGG,wDAIC,aAEL,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,YACGC,UAAUC,UAAYD,UAAUE,cAAcC,MAAM,KAAK,yBAK3D,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,oBACM,+BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BA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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.4/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.4\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["support.js","../../node_modules/loadjs/dist/loadjs.umd.js","types.js","utils.js","html5.js","i18n.js","ui.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","storage.js","plyr.js"],"names":["range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","replace","test","createElement","rel","href","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","providers","types","utils","input","this","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","array","nodeList","object","keys","constructor","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","response","Error","statusText","open","send","id","is","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","data","content","fetch","then","empty","setItem","stringify","catch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","_ref","key","_ref2","value","sel","existingAttributes","existing","split","s","selector","className","parts","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","toggle","contains","classList","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","querySelector","focused","activeElement","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","_len","_key","toString","match","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","source","shift","defineProperty","extend","apply","concat","toConsumableArray","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","$2","parser","search","startsWith","parseUrl","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","player","mime","currentTime","playing","load","play","config","blankVideo","debug","log","i18n","seekTime","title","toggleClass","selectors","classNames","uiSupported","listeners","warn","toggleNativeControls","controls","inject","setup","volume","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","pip","airplay","isIos","isTouch","touch","_this","setTitle","setPoster","label","buttons","button","isEmbed","iframe","getElement","poster","posters","backgroundImage","p","paused","stopped","toggleControls","loading","timers","setTimeout","_this2","failed","networkState","_this3","inputs","setRange","mute","updateRangeFill","progress","display","buffer","getElementsByTagName","nodeValue","getPercentage","duration","seek","setProgress","buffered","forceHours","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","cors","URL","iconUrl","location","host","isIE","svg4everybody","pause","restart","rewind","fastForward","settings","captions","fullscreen","seekTooltip","tooltip","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","list","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","pageX","left","hasClass","parseFloat","setting","tabs","panes","toggleTab","checkMenu","emptyElement","sort","a","b","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","isVimeo","_this4","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","create","findElements","repaint","labels","_this6","stored","get","isYouTube","textTracks","setCaptionsMenu","insertAfter","enabled","hostname","protocol","blob","createObjectURL","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","bind","defaults","userLanguage","onChange","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","replaceElement","thumbnail_large","pathname","Player","disableTextTrack","stop","setCurrentTime","selected","setPlaybackRate","setVolume","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","seekTo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","handler","_this11","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Storage","store","json","removeItem","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","clear","unload","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => utils.is.string(args[i]) ? args[i] : '');\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Set the poster image\n ui.setPoster.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Set the poster image\n setPoster() {\n if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {\n return;\n }\n\n // Set the inline style\n const posters = this.poster.split(',');\n this.elements.poster.style.backgroundImage = posters.map(p => `url('${p}')`).join(',');\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n poster: 'plyr__poster',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set attribute\n player.media.setAttribute('poster', url.href);\n\n // Update\n ui.setPoster.call(player);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('span', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n ui.setPoster.call(this);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Set hideControls class\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, this.config.hideControls);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.js b/dist/plyr.polyfilled.js
index 1a143ecc..46887b4f 100644
--- a/dist/plyr.polyfilled.js
+++ b/dist/plyr.polyfilled.js
@@ -19,48 +19,21 @@ var global = module.exports = typeof window != 'undefined' && window.Math == Mat
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
});
-
-var _global$1 = Object.freeze({
- default: _global,
- __moduleExports: _global
-});
-
var _core = createCommonjsModule(function (module) {
var core = module.exports = { version: '2.5.3' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
});
var _core_1 = _core.version;
-
-var _core$1 = Object.freeze({
- default: _core,
- __moduleExports: _core,
- version: _core_1
-});
-
var _isObject = function (it) {
return typeof it === 'object' ? it !== null : typeof it === 'function';
};
-
-var _isObject$1 = Object.freeze({
- default: _isObject,
- __moduleExports: _isObject
-});
-
-var isObject = ( _isObject$1 && _isObject ) || _isObject$1;
-
var _anObject = function (it) {
- if (!isObject(it)) throw TypeError(it + ' is not an object!');
+ if (!_isObject(it)) throw TypeError(it + ' is not an object!');
return it;
};
-
-var _anObject$1 = Object.freeze({
- default: _anObject,
- __moduleExports: _anObject
-});
-
var _fails = function (exec) {
try {
return !!exec();
@@ -69,52 +42,20 @@ var _fails = function (exec) {
}
};
-
-var _fails$1 = Object.freeze({
- default: _fails,
- __moduleExports: _fails
-});
-
-var require$$0 = ( _fails$1 && _fails ) || _fails$1;
-
// Thank's IE8 for his funny defineProperty
-var _descriptors = !require$$0(function () {
+var _descriptors = !_fails(function () {
return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});
-
-var _descriptors$1 = Object.freeze({
- default: _descriptors,
- __moduleExports: _descriptors
-});
-
-var global$1 = ( _global$1 && _global ) || _global$1;
-
-var document$1 = global$1.document;
+var document$1 = _global.document;
// typeof document.createElement is 'object' in old IE
-var is = isObject(document$1) && isObject(document$1.createElement);
+var is = _isObject(document$1) && _isObject(document$1.createElement);
var _domCreate = function (it) {
return is ? document$1.createElement(it) : {};
};
-
-var _domCreate$1 = Object.freeze({
- default: _domCreate,
- __moduleExports: _domCreate
-});
-
-var require$$0$1 = ( _descriptors$1 && _descriptors ) || _descriptors$1;
-
-var cel = ( _domCreate$1 && _domCreate ) || _domCreate$1;
-
-var _ie8DomDefine = !require$$0$1 && !require$$0(function () {
- return Object.defineProperty(cel('div'), 'a', { get: function () { return 7; } }).a != 7;
-});
-
-
-var _ie8DomDefine$1 = Object.freeze({
- default: _ie8DomDefine,
- __moduleExports: _ie8DomDefine
+var _ie8DomDefine = !_descriptors && !_fails(function () {
+ return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;
});
// 7.1.1 ToPrimitive(input [, PreferredType])
@@ -122,33 +63,21 @@ var _ie8DomDefine$1 = Object.freeze({
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
var _toPrimitive = function (it, S) {
- if (!isObject(it)) return it;
+ if (!_isObject(it)) return it;
var fn, val;
- if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
- if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
- if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
+ if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;
+ if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
throw TypeError("Can't convert object to primitive value");
};
-
-var _toPrimitive$1 = Object.freeze({
- default: _toPrimitive,
- __moduleExports: _toPrimitive
-});
-
-var anObject = ( _anObject$1 && _anObject ) || _anObject$1;
-
-var IE8_DOM_DEFINE = ( _ie8DomDefine$1 && _ie8DomDefine ) || _ie8DomDefine$1;
-
-var toPrimitive = ( _toPrimitive$1 && _toPrimitive ) || _toPrimitive$1;
-
var dP = Object.defineProperty;
-var f = require$$0$1 ? Object.defineProperty : function defineProperty(O, P, Attributes) {
- anObject(O);
- P = toPrimitive(P, true);
- anObject(Attributes);
- if (IE8_DOM_DEFINE) try {
+var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+ _anObject(O);
+ P = _toPrimitive(P, true);
+ _anObject(Attributes);
+ if (_ie8DomDefine) try {
return dP(O, P, Attributes);
} catch (e) { /* empty */ }
if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
@@ -160,13 +89,6 @@ var _objectDp = {
f: f
};
-
-var _objectDp$1 = Object.freeze({
- default: _objectDp,
- __moduleExports: _objectDp,
- f: f
-});
-
var _propertyDesc = function (bitmap, value) {
return {
enumerable: !(bitmap & 1),
@@ -176,84 +98,48 @@ var _propertyDesc = function (bitmap, value) {
};
};
-
-var _propertyDesc$1 = Object.freeze({
- default: _propertyDesc,
- __moduleExports: _propertyDesc
-});
-
-var $defineProperty = ( _objectDp$1 && _objectDp ) || _objectDp$1;
-
-var createDesc = ( _propertyDesc$1 && _propertyDesc ) || _propertyDesc$1;
-
-var _hide = require$$0$1 ? function (object, key, value) {
- return $defineProperty.f(object, key, createDesc(1, value));
+var _hide = _descriptors ? function (object, key, value) {
+ return _objectDp.f(object, key, _propertyDesc(1, value));
} : function (object, key, value) {
object[key] = value;
return object;
};
-
-var _hide$1 = Object.freeze({
- default: _hide,
- __moduleExports: _hide
-});
-
var hasOwnProperty = {}.hasOwnProperty;
var _has = function (it, key) {
return hasOwnProperty.call(it, key);
};
-
-var _has$1 = Object.freeze({
- default: _has,
- __moduleExports: _has
-});
-
var id = 0;
var px = Math.random();
var _uid = function (key) {
return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};
-
-var _uid$1 = Object.freeze({
- default: _uid,
- __moduleExports: _uid
-});
-
-var hide = ( _hide$1 && _hide ) || _hide$1;
-
-var has = ( _has$1 && _has ) || _has$1;
-
-var uid = ( _uid$1 && _uid ) || _uid$1;
-
-var core = ( _core$1 && _core ) || _core$1;
-
var _redefine = createCommonjsModule(function (module) {
-var SRC = uid('src');
+var SRC = _uid('src');
var TO_STRING = 'toString';
var $toString = Function[TO_STRING];
var TPL = ('' + $toString).split(TO_STRING);
-core.inspectSource = function (it) {
+_core.inspectSource = function (it) {
return $toString.call(it);
};
(module.exports = function (O, key, val, safe) {
var isFunction = typeof val == 'function';
- if (isFunction) has(val, 'name') || hide(val, 'name', key);
+ if (isFunction) _has(val, 'name') || _hide(val, 'name', key);
if (O[key] === val) return;
- if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
- if (O === global$1) {
+ if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
+ if (O === _global) {
O[key] = val;
} else if (!safe) {
delete O[key];
- hide(O, key, val);
+ _hide(O, key, val);
} else if (O[key]) {
O[key] = val;
} else {
- hide(O, key, val);
+ _hide(O, key, val);
}
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, TO_STRING, function toString() {
@@ -261,29 +147,15 @@ core.inspectSource = function (it) {
});
});
-
-var _redefine$1 = Object.freeze({
- default: _redefine,
- __moduleExports: _redefine
-});
-
var _aFunction = function (it) {
if (typeof it != 'function') throw TypeError(it + ' is not a function!');
return it;
};
-
-var _aFunction$1 = Object.freeze({
- default: _aFunction,
- __moduleExports: _aFunction
-});
-
-var aFunction = ( _aFunction$1 && _aFunction ) || _aFunction$1;
-
// optional / simple context binding
var _ctx = function (fn, that, length) {
- aFunction(fn);
+ _aFunction(fn);
if (that === undefined) return fn;
switch (length) {
case 1: return function (a) {
@@ -301,16 +173,6 @@ var _ctx = function (fn, that, length) {
};
};
-
-var _ctx$1 = Object.freeze({
- default: _ctx,
- __moduleExports: _ctx
-});
-
-var redefine = ( _redefine$1 && _redefine ) || _redefine$1;
-
-var ctx = ( _ctx$1 && _ctx ) || _ctx$1;
-
var PROTOTYPE = 'prototype';
var $export = function (type, name, source) {
@@ -319,8 +181,8 @@ var $export = function (type, name, source) {
var IS_STATIC = type & $export.S;
var IS_PROTO = type & $export.P;
var IS_BIND = type & $export.B;
- var target = IS_GLOBAL ? global$1 : IS_STATIC ? global$1[name] || (global$1[name] = {}) : (global$1[name] || {})[PROTOTYPE];
- var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
+ var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];
+ var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});
var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
var key, own, out, exp;
if (IS_GLOBAL) source = name;
@@ -330,15 +192,15 @@ var $export = function (type, name, source) {
// export native or passed
out = (own ? target : source)[key];
// bind timers to global for call from export context
- exp = IS_BIND && own ? ctx(out, global$1) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+ exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;
// extend global
- if (target) redefine(target, key, out, type & $export.U);
+ if (target) _redefine(target, key, out, type & $export.U);
// export
- if (exports[key] != out) hide(exports, key, exp);
+ if (exports[key] != out) _hide(exports, key, exp);
if (IS_PROTO && expProto[key] != out) expProto[key] = out;
}
};
-global$1.core = core;
+_global.core = _core;
// type bitmap
$export.F = 1; // forced
$export.G = 2; // global
@@ -350,15 +212,9 @@ $export.U = 64; // safe
$export.R = 128; // real proto method for `library`
var _export = $export;
-
-var _export$1 = Object.freeze({
- default: _export,
- __moduleExports: _export
-});
-
-var TYPED = uid('typed_array');
-var VIEW = uid('view');
-var ABV = !!(global$1.ArrayBuffer && global$1.DataView);
+var TYPED = _uid('typed_array');
+var VIEW = _uid('view');
+var ABV = !!(_global.ArrayBuffer && _global.DataView);
var CONSTR = ABV;
var i = 0;
var l = 9;
@@ -369,9 +225,9 @@ var TypedArrayConstructors = (
).split(',');
while (i < l) {
- if (Typed = global$1[TypedArrayConstructors[i++]]) {
- hide(Typed.prototype, TYPED, true);
- hide(Typed.prototype, VIEW, true);
+ if (Typed = _global[TypedArrayConstructors[i++]]) {
+ _hide(Typed.prototype, TYPED, true);
+ _hide(Typed.prototype, VIEW, true);
} else CONSTR = false;
}
@@ -381,52 +237,20 @@ var _typed = {
TYPED: TYPED,
VIEW: VIEW
};
-var _typed_1 = _typed.ABV;
-var _typed_2 = _typed.CONSTR;
-var _typed_3 = _typed.TYPED;
-var _typed_4 = _typed.VIEW;
-
-
-var _typed$1 = Object.freeze({
- default: _typed,
- __moduleExports: _typed,
- ABV: _typed_1,
- CONSTR: _typed_2,
- TYPED: _typed_3,
- VIEW: _typed_4
-});
var _library = false;
-
-var _library$1 = Object.freeze({
- default: _library,
- __moduleExports: _library
-});
-
var _redefineAll = function (target, src, safe) {
- for (var key in src) redefine(target, key, src[key], safe);
+ for (var key in src) _redefine(target, key, src[key], safe);
return target;
};
-
-var _redefineAll$1 = Object.freeze({
- default: _redefineAll,
- __moduleExports: _redefineAll
-});
-
var _anInstance = function (it, Constructor, name, forbiddenField) {
if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
throw TypeError(name + ': incorrect invocation!');
} return it;
};
-
-var _anInstance$1 = Object.freeze({
- default: _anInstance,
- __moduleExports: _anInstance
-});
-
// 7.1.4 ToInteger
var ceil = Math.ceil;
var floor = Math.floor;
@@ -434,119 +258,57 @@ var _toInteger = function (it) {
return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};
-
-var _toInteger$1 = Object.freeze({
- default: _toInteger,
- __moduleExports: _toInteger
-});
-
-var toInteger = ( _toInteger$1 && _toInteger ) || _toInteger$1;
-
// 7.1.15 ToLength
var min = Math.min;
var _toLength = function (it) {
- return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+ return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};
-
-var _toLength$1 = Object.freeze({
- default: _toLength,
- __moduleExports: _toLength
-});
-
-var toLength = ( _toLength$1 && _toLength ) || _toLength$1;
-
// https://tc39.github.io/ecma262/#sec-toindex
var _toIndex = function (it) {
if (it === undefined) return 0;
- var number = toInteger(it);
- var length = toLength(number);
+ var number = _toInteger(it);
+ var length = _toLength(number);
if (number !== length) throw RangeError('Wrong length!');
return length;
};
-
-var _toIndex$1 = Object.freeze({
- default: _toIndex,
- __moduleExports: _toIndex
-});
-
var toString = {}.toString;
var _cof = function (it) {
return toString.call(it).slice(8, -1);
};
-
-var _cof$1 = Object.freeze({
- default: _cof,
- __moduleExports: _cof
-});
-
-var cof = ( _cof$1 && _cof ) || _cof$1;
-
// fallback for non-array-like ES3 and non-enumerable old V8 strings
// eslint-disable-next-line no-prototype-builtins
var _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
- return cof(it) == 'String' ? it.split('') : Object(it);
+ return _cof(it) == 'String' ? it.split('') : Object(it);
};
-
-var _iobject$1 = Object.freeze({
- default: _iobject,
- __moduleExports: _iobject
-});
-
// 7.2.1 RequireObjectCoercible(argument)
var _defined = function (it) {
if (it == undefined) throw TypeError("Can't call method on " + it);
return it;
};
-
-var _defined$1 = Object.freeze({
- default: _defined,
- __moduleExports: _defined
-});
-
-var IObject = ( _iobject$1 && _iobject ) || _iobject$1;
-
-var defined = ( _defined$1 && _defined ) || _defined$1;
-
// to indexed object, toObject with fallback for non-array-like ES3 strings
var _toIobject = function (it) {
- return IObject(defined(it));
+ return _iobject(_defined(it));
};
-
-var _toIobject$1 = Object.freeze({
- default: _toIobject,
- __moduleExports: _toIobject
-});
-
var max = Math.max;
var min$1 = Math.min;
var _toAbsoluteIndex = function (index, length) {
- index = toInteger(index);
+ index = _toInteger(index);
return index < 0 ? max(index + length, 0) : min$1(index, length);
};
-
-var _toAbsoluteIndex$1 = Object.freeze({
- default: _toAbsoluteIndex,
- __moduleExports: _toAbsoluteIndex
-});
-
-var toIObject = ( _toIobject$1 && _toIobject ) || _toIobject$1;
-
-var toAbsoluteIndex = ( _toAbsoluteIndex$1 && _toAbsoluteIndex ) || _toAbsoluteIndex$1;
-
// false -> Array#indexOf
// true -> Array#includes
@@ -554,9 +316,9 @@ var toAbsoluteIndex = ( _toAbsoluteIndex$1 && _toAbsoluteIndex ) || _toAbsoluteI
var _arrayIncludes = function (IS_INCLUDES) {
return function ($this, el, fromIndex) {
- var O = toIObject($this);
- var length = toLength(O.length);
- var index = toAbsoluteIndex(fromIndex, length);
+ var O = _toIobject($this);
+ var length = _toLength(O.length);
+ var index = _toAbsoluteIndex(fromIndex, length);
var value;
// Array#includes uses SameValueZero equality algorithm
// eslint-disable-next-line no-self-compare
@@ -571,181 +333,90 @@ var _arrayIncludes = function (IS_INCLUDES) {
};
};
-
-var _arrayIncludes$1 = Object.freeze({
- default: _arrayIncludes,
- __moduleExports: _arrayIncludes
-});
-
var SHARED = '__core-js_shared__';
-var store = global$1[SHARED] || (global$1[SHARED] = {});
+var store = _global[SHARED] || (_global[SHARED] = {});
var _shared = function (key) {
return store[key] || (store[key] = {});
};
-
-var _shared$1 = Object.freeze({
- default: _shared,
- __moduleExports: _shared
-});
-
-var shared = ( _shared$1 && _shared ) || _shared$1;
-
-var shared$1 = shared('keys');
+var shared = _shared('keys');
var _sharedKey = function (key) {
- return shared$1[key] || (shared$1[key] = uid(key));
+ return shared[key] || (shared[key] = _uid(key));
};
-
-var _sharedKey$1 = Object.freeze({
- default: _sharedKey,
- __moduleExports: _sharedKey
-});
-
-var require$$0$2 = ( _arrayIncludes$1 && _arrayIncludes ) || _arrayIncludes$1;
-
-var require$$0$3 = ( _sharedKey$1 && _sharedKey ) || _sharedKey$1;
-
-var arrayIndexOf = require$$0$2(false);
-var IE_PROTO = require$$0$3('IE_PROTO');
+var arrayIndexOf = _arrayIncludes(false);
+var IE_PROTO = _sharedKey('IE_PROTO');
var _objectKeysInternal = function (object, names) {
- var O = toIObject(object);
+ var O = _toIobject(object);
var i = 0;
var result = [];
var key;
- for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
+ for (key in O) if (key != IE_PROTO) _has(O, key) && result.push(key);
// Don't enum bug & hidden keys
- while (names.length > i) if (has(O, key = names[i++])) {
+ while (names.length > i) if (_has(O, key = names[i++])) {
~arrayIndexOf(result, key) || result.push(key);
}
return result;
};
-
-var _objectKeysInternal$1 = Object.freeze({
- default: _objectKeysInternal,
- __moduleExports: _objectKeysInternal
-});
-
// IE 8- don't enum bug keys
var _enumBugKeys = (
'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');
-
-var _enumBugKeys$1 = Object.freeze({
- default: _enumBugKeys,
- __moduleExports: _enumBugKeys
-});
-
-var $keys = ( _objectKeysInternal$1 && _objectKeysInternal ) || _objectKeysInternal$1;
-
-var enumBugKeys = ( _enumBugKeys$1 && _enumBugKeys ) || _enumBugKeys$1;
-
// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
-var hiddenKeys = enumBugKeys.concat('length', 'prototype');
+var hiddenKeys = _enumBugKeys.concat('length', 'prototype');
var f$1 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
- return $keys(O, hiddenKeys);
+ return _objectKeysInternal(O, hiddenKeys);
};
var _objectGopn = {
f: f$1
};
-
-var _objectGopn$1 = Object.freeze({
- default: _objectGopn,
- __moduleExports: _objectGopn,
- f: f$1
-});
-
// 7.1.13 ToObject(argument)
var _toObject = function (it) {
- return Object(defined(it));
+ return Object(_defined(it));
};
-
-var _toObject$1 = Object.freeze({
- default: _toObject,
- __moduleExports: _toObject
-});
-
-var toObject = ( _toObject$1 && _toObject ) || _toObject$1;
-
var _arrayFill = function fill(value /* , start = 0, end = @length */) {
- var O = toObject(this);
- var length = toLength(O.length);
+ var O = _toObject(this);
+ var length = _toLength(O.length);
var aLen = arguments.length;
- var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);
+ var index = _toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);
var end = aLen > 2 ? arguments[2] : undefined;
- var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
+ var endPos = end === undefined ? length : _toAbsoluteIndex(end, length);
while (endPos > index) O[index++] = value;
return O;
};
-
-var _arrayFill$1 = Object.freeze({
- default: _arrayFill,
- __moduleExports: _arrayFill
-});
-
var _wks = createCommonjsModule(function (module) {
-var store = shared('wks');
+var store = _shared('wks');
-var Symbol = global$1.Symbol;
+var Symbol = _global.Symbol;
var USE_SYMBOL = typeof Symbol == 'function';
var $exports = module.exports = function (name) {
return store[name] || (store[name] =
- USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+ USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));
};
$exports.store = store;
});
+var def = _objectDp.f;
-var _wks$1 = Object.freeze({
- default: _wks,
- __moduleExports: _wks
-});
-
-var wks = ( _wks$1 && _wks ) || _wks$1;
-
-var def = $defineProperty.f;
-
-var TAG = wks('toStringTag');
+var TAG = _wks('toStringTag');
var _setToStringTag = function (it, tag, stat) {
- if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
+ if (it && !_has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
};
-
-var _setToStringTag$1 = Object.freeze({
- default: _setToStringTag,
- __moduleExports: _setToStringTag
-});
-
-var LIBRARY = ( _library$1 && _library ) || _library$1;
-
-var require$$5 = ( _typed$1 && _typed ) || _typed$1;
-
-var require$$3 = ( _redefineAll$1 && _redefineAll ) || _redefineAll$1;
-
-var anInstance = ( _anInstance$1 && _anInstance ) || _anInstance$1;
-
-var require$$14 = ( _toIndex$1 && _toIndex ) || _toIndex$1;
-
-var require$$0$4 = ( _objectGopn$1 && _objectGopn ) || _objectGopn$1;
-
-var require$$0$5 = ( _arrayFill$1 && _arrayFill ) || _arrayFill$1;
-
-var setToStringTag = ( _setToStringTag$1 && _setToStringTag ) || _setToStringTag$1;
-
var _typedBuffer = createCommonjsModule(function (module, exports) {
@@ -758,8 +429,8 @@ var _typedBuffer = createCommonjsModule(function (module, exports) {
-var gOPN = require$$0$4.f;
-var dP = $defineProperty.f;
+var gOPN = _objectGopn.f;
+var dP = _objectDp.f;
var ARRAY_BUFFER = 'ArrayBuffer';
@@ -767,12 +438,12 @@ var DATA_VIEW = 'DataView';
var PROTOTYPE = 'prototype';
var WRONG_LENGTH = 'Wrong length!';
var WRONG_INDEX = 'Wrong index!';
-var $ArrayBuffer = global$1[ARRAY_BUFFER];
-var $DataView = global$1[DATA_VIEW];
-var Math = global$1.Math;
-var RangeError = global$1.RangeError;
+var $ArrayBuffer = _global[ARRAY_BUFFER];
+var $DataView = _global[DATA_VIEW];
+var Math = _global.Math;
+var RangeError = _global.RangeError;
// eslint-disable-next-line no-shadow-restricted-names
-var Infinity = global$1.Infinity;
+var Infinity = _global.Infinity;
var BaseBuffer = $ArrayBuffer;
var abs = Math.abs;
var pow = Math.pow;
@@ -782,9 +453,9 @@ var LN2 = Math.LN2;
var BUFFER = 'buffer';
var BYTE_LENGTH = 'byteLength';
var BYTE_OFFSET = 'byteOffset';
-var $BUFFER = require$$0$1 ? '_b' : BUFFER;
-var $LENGTH = require$$0$1 ? '_l' : BYTE_LENGTH;
-var $OFFSET = require$$0$1 ? '_o' : BYTE_OFFSET;
+var $BUFFER = _descriptors ? '_b' : BUFFER;
+var $LENGTH = _descriptors ? '_l' : BYTE_LENGTH;
+var $OFFSET = _descriptors ? '_o' : BYTE_OFFSET;
// IEEE754 conversions based on https://github.com/feross/ieee754
function packIEEE754(value, mLen, nBytes) {
@@ -885,7 +556,7 @@ function addGetter(C, key, internal) {
function get(view, bytes, index, isLittleEndian) {
var numIndex = +index;
- var intIndex = require$$14(numIndex);
+ var intIndex = _toIndex(numIndex);
if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
var store = view[$BUFFER]._b;
var start = intIndex + view[$OFFSET];
@@ -894,7 +565,7 @@ function get(view, bytes, index, isLittleEndian) {
}
function set(view, bytes, index, conversion, value, isLittleEndian) {
var numIndex = +index;
- var intIndex = require$$14(numIndex);
+ var intIndex = _toIndex(numIndex);
if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
var store = view[$BUFFER]._b;
var start = intIndex + view[$OFFSET];
@@ -902,35 +573,35 @@ function set(view, bytes, index, conversion, value, isLittleEndian) {
for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
}
-if (!require$$5.ABV) {
+if (!_typed.ABV) {
$ArrayBuffer = function ArrayBuffer(length) {
- anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
- var byteLength = require$$14(length);
- this._b = require$$0$5.call(new Array(byteLength), 0);
+ _anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
+ var byteLength = _toIndex(length);
+ this._b = _arrayFill.call(new Array(byteLength), 0);
this[$LENGTH] = byteLength;
};
$DataView = function DataView(buffer, byteOffset, byteLength) {
- anInstance(this, $DataView, DATA_VIEW);
- anInstance(buffer, $ArrayBuffer, DATA_VIEW);
+ _anInstance(this, $DataView, DATA_VIEW);
+ _anInstance(buffer, $ArrayBuffer, DATA_VIEW);
var bufferLength = buffer[$LENGTH];
- var offset = toInteger(byteOffset);
+ var offset = _toInteger(byteOffset);
if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');
- byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
+ byteLength = byteLength === undefined ? bufferLength - offset : _toLength(byteLength);
if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
this[$BUFFER] = buffer;
this[$OFFSET] = offset;
this[$LENGTH] = byteLength;
};
- if (require$$0$1) {
+ if (_descriptors) {
addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
addGetter($DataView, BUFFER, '_b');
addGetter($DataView, BYTE_LENGTH, '_l');
addGetter($DataView, BYTE_OFFSET, '_o');
}
- require$$3($DataView[PROTOTYPE], {
+ _redefineAll($DataView[PROTOTYPE], {
getInt8: function getInt8(byteOffset) {
return get(this, 1, byteOffset)[0] << 24 >> 24;
},
@@ -983,32 +654,32 @@ if (!require$$5.ABV) {
}
});
} else {
- if (!require$$0(function () {
+ if (!_fails(function () {
$ArrayBuffer(1);
- }) || !require$$0(function () {
+ }) || !_fails(function () {
new $ArrayBuffer(-1); // eslint-disable-line no-new
- }) || require$$0(function () {
+ }) || _fails(function () {
new $ArrayBuffer(); // eslint-disable-line no-new
new $ArrayBuffer(1.5); // eslint-disable-line no-new
new $ArrayBuffer(NaN); // eslint-disable-line no-new
return $ArrayBuffer.name != ARRAY_BUFFER;
})) {
$ArrayBuffer = function ArrayBuffer(length) {
- anInstance(this, $ArrayBuffer);
- return new BaseBuffer(require$$14(length));
+ _anInstance(this, $ArrayBuffer);
+ return new BaseBuffer(_toIndex(length));
};
var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {
- if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);
+ if (!((key = keys[j++]) in $ArrayBuffer)) _hide($ArrayBuffer, key, BaseBuffer[key]);
}
- if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;
+ if (!_library) ArrayBufferProto.constructor = $ArrayBuffer;
}
// iOS Safari 7.x bug
var view = new $DataView(new $ArrayBuffer(2));
var $setInt8 = $DataView[PROTOTYPE].setInt8;
view.setInt8(0, 2147483648);
view.setInt8(1, 2147483649);
- if (view.getInt8(0) || !view.getInt8(1)) require$$3($DataView[PROTOTYPE], {
+ if (view.getInt8(0) || !view.getInt8(1)) _redefineAll($DataView[PROTOTYPE], {
setInt8: function setInt8(byteOffset, value) {
$setInt8.call(this, byteOffset, value << 24 >> 24);
},
@@ -1017,87 +688,61 @@ if (!require$$5.ABV) {
}
}, true);
}
-setToStringTag($ArrayBuffer, ARRAY_BUFFER);
-setToStringTag($DataView, DATA_VIEW);
-hide($DataView[PROTOTYPE], require$$5.VIEW, true);
+_setToStringTag($ArrayBuffer, ARRAY_BUFFER);
+_setToStringTag($DataView, DATA_VIEW);
+_hide($DataView[PROTOTYPE], _typed.VIEW, true);
exports[ARRAY_BUFFER] = $ArrayBuffer;
exports[DATA_VIEW] = $DataView;
});
-
-var _typedBuffer$1 = Object.freeze({
- default: _typedBuffer,
- __moduleExports: _typedBuffer
-});
-
// 7.3.20 SpeciesConstructor(O, defaultConstructor)
-var SPECIES = wks('species');
+var SPECIES = _wks('species');
var _speciesConstructor = function (O, D) {
- var C = anObject(O).constructor;
+ var C = _anObject(O).constructor;
var S;
- return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
+ return C === undefined || (S = _anObject(C)[SPECIES]) == undefined ? D : _aFunction(S);
};
-
-var _speciesConstructor$1 = Object.freeze({
- default: _speciesConstructor,
- __moduleExports: _speciesConstructor
-});
-
-var SPECIES$1 = wks('species');
+var SPECIES$1 = _wks('species');
var _setSpecies = function (KEY) {
- var C = global$1[KEY];
- if (require$$0$1 && C && !C[SPECIES$1]) $defineProperty.f(C, SPECIES$1, {
+ var C = _global[KEY];
+ if (_descriptors && C && !C[SPECIES$1]) _objectDp.f(C, SPECIES$1, {
configurable: true,
get: function () { return this; }
});
};
+var ArrayBuffer = _global.ArrayBuffer;
-var _setSpecies$1 = Object.freeze({
- default: _setSpecies,
- __moduleExports: _setSpecies
-});
-
-var $export$1 = ( _export$1 && _export ) || _export$1;
-
-var require$$6 = ( _typedBuffer$1 && _typedBuffer ) || _typedBuffer$1;
-
-var speciesConstructor = ( _speciesConstructor$1 && _speciesConstructor ) || _speciesConstructor$1;
-
-var require$$5$1 = ( _setSpecies$1 && _setSpecies ) || _setSpecies$1;
-
-var ArrayBuffer = global$1.ArrayBuffer;
-
-var $ArrayBuffer = require$$6.ArrayBuffer;
-var $DataView = require$$6.DataView;
-var $isView = require$$5.ABV && ArrayBuffer.isView;
+var $ArrayBuffer = _typedBuffer.ArrayBuffer;
+var $DataView = _typedBuffer.DataView;
+var $isView = _typed.ABV && ArrayBuffer.isView;
var $slice = $ArrayBuffer.prototype.slice;
-var VIEW$1 = require$$5.VIEW;
+var VIEW$1 = _typed.VIEW;
var ARRAY_BUFFER = 'ArrayBuffer';
-$export$1($export$1.G + $export$1.W + $export$1.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });
+_export(_export.G + _export.W + _export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });
-$export$1($export$1.S + $export$1.F * !require$$5.CONSTR, ARRAY_BUFFER, {
+_export(_export.S + _export.F * !_typed.CONSTR, ARRAY_BUFFER, {
// 24.1.3.1 ArrayBuffer.isView(arg)
isView: function isView(it) {
- return $isView && $isView(it) || isObject(it) && VIEW$1 in it;
+ return $isView && $isView(it) || _isObject(it) && VIEW$1 in it;
}
});
-$export$1($export$1.P + $export$1.U + $export$1.F * require$$0(function () {
+_export(_export.P + _export.U + _export.F * _fails(function () {
return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
}), ARRAY_BUFFER, {
// 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
slice: function slice(start, end) {
- if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix
- var len = anObject(this).byteLength;
- var first = toAbsoluteIndex(start, len);
- var final = toAbsoluteIndex(end === undefined ? len : end, len);
- var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));
+ if ($slice !== undefined && end === undefined) return $slice.call(_anObject(this), start); // FF fix
+ var len = _anObject(this).byteLength;
+ var first = _toAbsoluteIndex(start, len);
+ var final = _toAbsoluteIndex(end === undefined ? len : end, len);
+ var result = new (_speciesConstructor(this, $ArrayBuffer))(_toLength(final - first));
var viewS = new $DataView(this);
var viewT = new $DataView(result);
var index = 0;
@@ -1107,13 +752,13 @@ $export$1($export$1.P + $export$1.U + $export$1.F * require$$0(function () {
}
});
-require$$5$1(ARRAY_BUFFER);
+_setSpecies(ARRAY_BUFFER);
// getting tag from 19.1.3.6 Object.prototype.toString()
-var TAG$1 = wks('toStringTag');
+var TAG$1 = _wks('toStringTag');
// ES3 wrong here
-var ARG = cof(function () { return arguments; }()) == 'Arguments';
+var ARG = _cof(function () { return arguments; }()) == 'Arguments';
// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
@@ -1128,105 +773,61 @@ var _classof = function (it) {
// @@toStringTag case
: typeof (T = tryGet(O = Object(it), TAG$1)) == 'string' ? T
// builtinTag case
- : ARG ? cof(O)
+ : ARG ? _cof(O)
// ES3 arguments fallback
- : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
+ : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};
-
-var _classof$1 = Object.freeze({
- default: _classof,
- __moduleExports: _classof
-});
-
var _iterators = {};
-
-var _iterators$1 = Object.freeze({
- default: _iterators,
- __moduleExports: _iterators
-});
-
-var Iterators = ( _iterators$1 && _iterators ) || _iterators$1;
-
// check on default Array iterator
-var ITERATOR = wks('iterator');
+var ITERATOR = _wks('iterator');
var ArrayProto = Array.prototype;
var _isArrayIter = function (it) {
- return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
+ return it !== undefined && (_iterators.Array === it || ArrayProto[ITERATOR] === it);
};
-
-var _isArrayIter$1 = Object.freeze({
- default: _isArrayIter,
- __moduleExports: _isArrayIter
-});
-
// 19.1.2.14 / 15.2.3.14 Object.keys(O)
var _objectKeys = Object.keys || function keys(O) {
- return $keys(O, enumBugKeys);
+ return _objectKeysInternal(O, _enumBugKeys);
};
-
-var _objectKeys$1 = Object.freeze({
- default: _objectKeys,
- __moduleExports: _objectKeys
-});
-
-var getKeys = ( _objectKeys$1 && _objectKeys ) || _objectKeys$1;
-
-var _objectDps = require$$0$1 ? Object.defineProperties : function defineProperties(O, Properties) {
- anObject(O);
- var keys = getKeys(Properties);
+var _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {
+ _anObject(O);
+ var keys = _objectKeys(Properties);
var length = keys.length;
var i = 0;
var P;
- while (length > i) $defineProperty.f(O, P = keys[i++], Properties[P]);
+ while (length > i) _objectDp.f(O, P = keys[i++], Properties[P]);
return O;
};
-
-var _objectDps$1 = Object.freeze({
- default: _objectDps,
- __moduleExports: _objectDps
-});
-
-var document$2 = global$1.document;
+var document$2 = _global.document;
var _html = document$2 && document$2.documentElement;
-
-var _html$1 = Object.freeze({
- default: _html,
- __moduleExports: _html
-});
-
-var dPs = ( _objectDps$1 && _objectDps ) || _objectDps$1;
-
-var html = ( _html$1 && _html ) || _html$1;
-
// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
-var IE_PROTO$1 = require$$0$3('IE_PROTO');
+var IE_PROTO$1 = _sharedKey('IE_PROTO');
var Empty = function () { /* empty */ };
var PROTOTYPE$1 = 'prototype';
// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function () {
// Thrash, waste and sodomy: IE GC bug
- var iframe = cel('iframe');
- var i = enumBugKeys.length;
+ var iframe = _domCreate('iframe');
+ var i = _enumBugKeys.length;
var lt = '<';
var gt = '>';
var iframeDocument;
iframe.style.display = 'none';
- html.appendChild(iframe);
+ _html.appendChild(iframe);
iframe.src = 'javascript:'; // eslint-disable-line no-script-url
// createDict = iframe.contentWindow.Object;
// html.removeChild(iframe);
@@ -1235,116 +836,72 @@ var createDict = function () {
iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
iframeDocument.close();
createDict = iframeDocument.F;
- while (i--) delete createDict[PROTOTYPE$1][enumBugKeys[i]];
+ while (i--) delete createDict[PROTOTYPE$1][_enumBugKeys[i]];
return createDict();
};
var _objectCreate = Object.create || function create(O, Properties) {
var result;
if (O !== null) {
- Empty[PROTOTYPE$1] = anObject(O);
+ Empty[PROTOTYPE$1] = _anObject(O);
result = new Empty();
Empty[PROTOTYPE$1] = null;
// add "__proto__" for Object.getPrototypeOf polyfill
result[IE_PROTO$1] = O;
} else result = createDict();
- return Properties === undefined ? result : dPs(result, Properties);
+ return Properties === undefined ? result : _objectDps(result, Properties);
};
-
-var _objectCreate$1 = Object.freeze({
- default: _objectCreate,
- __moduleExports: _objectCreate
-});
-
// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
-var IE_PROTO$2 = require$$0$3('IE_PROTO');
+var IE_PROTO$2 = _sharedKey('IE_PROTO');
var ObjectProto = Object.prototype;
var _objectGpo = Object.getPrototypeOf || function (O) {
- O = toObject(O);
- if (has(O, IE_PROTO$2)) return O[IE_PROTO$2];
+ O = _toObject(O);
+ if (_has(O, IE_PROTO$2)) return O[IE_PROTO$2];
if (typeof O.constructor == 'function' && O instanceof O.constructor) {
return O.constructor.prototype;
} return O instanceof Object ? ObjectProto : null;
};
+var ITERATOR$1 = _wks('iterator');
-var _objectGpo$1 = Object.freeze({
- default: _objectGpo,
- __moduleExports: _objectGpo
-});
-
-var classof = ( _classof$1 && _classof ) || _classof$1;
-
-var ITERATOR$1 = wks('iterator');
-
-var core_getIteratorMethod = core.getIteratorMethod = function (it) {
+var core_getIteratorMethod = _core.getIteratorMethod = function (it) {
if (it != undefined) return it[ITERATOR$1]
|| it['@@iterator']
- || Iterators[classof(it)];
+ || _iterators[_classof(it)];
};
-
-var core_getIteratorMethod$1 = Object.freeze({
- default: core_getIteratorMethod,
- __moduleExports: core_getIteratorMethod
-});
-
// 7.2.2 IsArray(argument)
var _isArray = Array.isArray || function isArray(arg) {
- return cof(arg) == 'Array';
+ return _cof(arg) == 'Array';
};
-
-var _isArray$1 = Object.freeze({
- default: _isArray,
- __moduleExports: _isArray
-});
-
-var isArray = ( _isArray$1 && _isArray ) || _isArray$1;
-
-var SPECIES$2 = wks('species');
+var SPECIES$2 = _wks('species');
var _arraySpeciesConstructor = function (original) {
var C;
- if (isArray(original)) {
+ if (_isArray(original)) {
C = original.constructor;
// cross-realm fallback
- if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
- if (isObject(C)) {
+ if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;
+ if (_isObject(C)) {
C = C[SPECIES$2];
if (C === null) C = undefined;
}
} return C === undefined ? Array : C;
};
-
-var _arraySpeciesConstructor$1 = Object.freeze({
- default: _arraySpeciesConstructor,
- __moduleExports: _arraySpeciesConstructor
-});
-
-var speciesConstructor$1 = ( _arraySpeciesConstructor$1 && _arraySpeciesConstructor ) || _arraySpeciesConstructor$1;
-
// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
var _arraySpeciesCreate = function (original, length) {
- return new (speciesConstructor$1(original))(length);
+ return new (_arraySpeciesConstructor(original))(length);
};
-
-var _arraySpeciesCreate$1 = Object.freeze({
- default: _arraySpeciesCreate,
- __moduleExports: _arraySpeciesCreate
-});
-
-var asc = ( _arraySpeciesCreate$1 && _arraySpeciesCreate ) || _arraySpeciesCreate$1;
-
// 0 -> Array#forEach
// 1 -> Array#map
// 2 -> Array#filter
@@ -1364,12 +921,12 @@ var _arrayMethods = function (TYPE, $create) {
var IS_EVERY = TYPE == 4;
var IS_FIND_INDEX = TYPE == 6;
var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
- var create = $create || asc;
+ var create = $create || _arraySpeciesCreate;
return function ($this, callbackfn, that) {
- var O = toObject($this);
- var self = IObject(O);
- var f = ctx(callbackfn, that, 3);
- var length = toLength(self.length);
+ var O = _toObject($this);
+ var self = _iobject(O);
+ var f = _ctx(callbackfn, that, 3);
+ var length = _toLength(self.length);
var index = 0;
var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
var val, res;
@@ -1390,59 +947,29 @@ var _arrayMethods = function (TYPE, $create) {
};
};
-
-var _arrayMethods$1 = Object.freeze({
- default: _arrayMethods,
- __moduleExports: _arrayMethods
-});
-
// 22.1.3.31 Array.prototype[@@unscopables]
-var UNSCOPABLES = wks('unscopables');
+var UNSCOPABLES = _wks('unscopables');
var ArrayProto$1 = Array.prototype;
-if (ArrayProto$1[UNSCOPABLES] == undefined) hide(ArrayProto$1, UNSCOPABLES, {});
+if (ArrayProto$1[UNSCOPABLES] == undefined) _hide(ArrayProto$1, UNSCOPABLES, {});
var _addToUnscopables = function (key) {
ArrayProto$1[UNSCOPABLES][key] = true;
};
-
-var _addToUnscopables$1 = Object.freeze({
- default: _addToUnscopables,
- __moduleExports: _addToUnscopables
-});
-
var _iterStep = function (done, value) {
return { value: value, done: !!done };
};
-
-var _iterStep$1 = Object.freeze({
- default: _iterStep,
- __moduleExports: _iterStep
-});
-
-var _create = ( _objectCreate$1 && _objectCreate ) || _objectCreate$1;
-
var IteratorPrototype = {};
// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
-hide(IteratorPrototype, wks('iterator'), function () { return this; });
+_hide(IteratorPrototype, _wks('iterator'), function () { return this; });
var _iterCreate = function (Constructor, NAME, next) {
- Constructor.prototype = _create(IteratorPrototype, { next: createDesc(1, next) });
- setToStringTag(Constructor, NAME + ' Iterator');
+ Constructor.prototype = _objectCreate(IteratorPrototype, { next: _propertyDesc(1, next) });
+ _setToStringTag(Constructor, NAME + ' Iterator');
};
-
-var _iterCreate$1 = Object.freeze({
- default: _iterCreate,
- __moduleExports: _iterCreate
-});
-
-var $iterCreate = ( _iterCreate$1 && _iterCreate ) || _iterCreate$1;
-
-var $getPrototypeOf = ( _objectGpo$1 && _objectGpo ) || _objectGpo$1;
-
-var ITERATOR$2 = wks('iterator');
+var ITERATOR$2 = _wks('iterator');
var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
var FF_ITERATOR = '@@iterator';
var KEYS = 'keys';
@@ -1451,7 +978,7 @@ var VALUES = 'values';
var returnThis = function () { return this; };
var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
- $iterCreate(Constructor, NAME, next);
+ _iterCreate(Constructor, NAME, next);
var getMethod = function (kind) {
if (!BUGGY && kind in proto) return proto[kind];
switch (kind) {
@@ -1470,12 +997,12 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
var methods, key, IteratorPrototype;
// Fix native
if ($anyNative) {
- IteratorPrototype = $getPrototypeOf($anyNative.call(new Base()));
+ IteratorPrototype = _objectGpo($anyNative.call(new Base()));
if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
// Set @@toStringTag to native iterators
- setToStringTag(IteratorPrototype, TAG, true);
+ _setToStringTag(IteratorPrototype, TAG, true);
// fix for some old engines
- if (!LIBRARY && !has(IteratorPrototype, ITERATOR$2)) hide(IteratorPrototype, ITERATOR$2, returnThis);
+ if (!_library && !_has(IteratorPrototype, ITERATOR$2)) _hide(IteratorPrototype, ITERATOR$2, returnThis);
}
}
// fix Array#{values, @@iterator}.name in V8 / FF
@@ -1484,12 +1011,12 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
$default = function values() { return $native.call(this); };
}
// Define iterator
- if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR$2])) {
- hide(proto, ITERATOR$2, $default);
+ if ((!_library || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR$2])) {
+ _hide(proto, ITERATOR$2, $default);
}
// Plug for library
- Iterators[NAME] = $default;
- Iterators[TAG] = returnThis;
+ _iterators[NAME] = $default;
+ _iterators[TAG] = returnThis;
if (DEFAULT) {
methods = {
values: DEF_VALUES ? $default : getMethod(VALUES),
@@ -1497,30 +1024,18 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
entries: $entries
};
if (FORCED) for (key in methods) {
- if (!(key in proto)) redefine(proto, key, methods[key]);
- } else $export$1($export$1.P + $export$1.F * (BUGGY || VALUES_BUG), NAME, methods);
+ if (!(key in proto)) _redefine(proto, key, methods[key]);
+ } else _export(_export.P + _export.F * (BUGGY || VALUES_BUG), NAME, methods);
}
return methods;
};
-
-var _iterDefine$1 = Object.freeze({
- default: _iterDefine,
- __moduleExports: _iterDefine
-});
-
-var require$$1 = ( _addToUnscopables$1 && _addToUnscopables ) || _addToUnscopables$1;
-
-var step = ( _iterStep$1 && _iterStep ) || _iterStep$1;
-
-var $iterDefine = ( _iterDefine$1 && _iterDefine ) || _iterDefine$1;
-
// 22.1.3.4 Array.prototype.entries()
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
-var es6_array_iterator = $iterDefine(Array, 'Array', function (iterated, kind) {
- this._t = toIObject(iterated); // target
+var es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) {
+ this._t = _toIobject(iterated); // target
this._i = 0; // next index
this._k = kind; // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
@@ -1530,27 +1045,21 @@ var es6_array_iterator = $iterDefine(Array, 'Array', function (iterated, kind) {
var index = this._i++;
if (!O || index >= O.length) {
this._t = undefined;
- return step(1);
+ return _iterStep(1);
}
- if (kind == 'keys') return step(0, index);
- if (kind == 'values') return step(0, O[index]);
- return step(0, [index, O[index]]);
+ if (kind == 'keys') return _iterStep(0, index);
+ if (kind == 'values') return _iterStep(0, O[index]);
+ return _iterStep(0, [index, O[index]]);
}, 'values');
// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
-Iterators.Arguments = Iterators.Array;
-
-require$$1('keys');
-require$$1('values');
-require$$1('entries');
-
+_iterators.Arguments = _iterators.Array;
-var es6_array_iterator$1 = Object.freeze({
- default: es6_array_iterator,
- __moduleExports: es6_array_iterator
-});
+_addToUnscopables('keys');
+_addToUnscopables('values');
+_addToUnscopables('entries');
-var ITERATOR$3 = wks('iterator');
+var ITERATOR$3 = _wks('iterator');
var SAFE_CLOSING = false;
try {
@@ -1571,19 +1080,13 @@ var _iterDetect = function (exec, skipClosing) {
return safe;
};
-
-var _iterDetect$1 = Object.freeze({
- default: _iterDetect,
- __moduleExports: _iterDetect
-});
-
var _arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
- var O = toObject(this);
- var len = toLength(O.length);
- var to = toAbsoluteIndex(target, len);
- var from = toAbsoluteIndex(start, len);
+ var O = _toObject(this);
+ var len = _toLength(O.length);
+ var to = _toAbsoluteIndex(target, len);
+ var from = _toAbsoluteIndex(start, len);
var end = arguments.length > 2 ? arguments[2] : undefined;
- var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);
+ var count = Math.min((end === undefined ? len : _toAbsoluteIndex(end, len)) - from, len - to);
var inc = 1;
if (from < to && to < from + count) {
inc = -1;
@@ -1598,103 +1101,67 @@ var _arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, st
} return O;
};
-
-var _arrayCopyWithin$1 = Object.freeze({
- default: _arrayCopyWithin,
- __moduleExports: _arrayCopyWithin
-});
-
var f$2 = {}.propertyIsEnumerable;
var _objectPie = {
f: f$2
};
-
-var _objectPie$1 = Object.freeze({
- default: _objectPie,
- __moduleExports: _objectPie,
- f: f$2
-});
-
-var require$$0$6 = ( _objectPie$1 && _objectPie ) || _objectPie$1;
-
var gOPD = Object.getOwnPropertyDescriptor;
-var f$3 = require$$0$1 ? gOPD : function getOwnPropertyDescriptor(O, P) {
- O = toIObject(O);
- P = toPrimitive(P, true);
- if (IE8_DOM_DEFINE) try {
+var f$3 = _descriptors ? gOPD : function getOwnPropertyDescriptor(O, P) {
+ O = _toIobject(O);
+ P = _toPrimitive(P, true);
+ if (_ie8DomDefine) try {
return gOPD(O, P);
} catch (e) { /* empty */ }
- if (has(O, P)) return createDesc(!require$$0$6.f.call(O, P), O[P]);
+ if (_has(O, P)) return _propertyDesc(!_objectPie.f.call(O, P), O[P]);
};
var _objectGopd = {
f: f$3
};
-
-var _objectGopd$1 = Object.freeze({
- default: _objectGopd,
- __moduleExports: _objectGopd,
- f: f$3
-});
-
-var isArrayIter = ( _isArrayIter$1 && _isArrayIter ) || _isArrayIter$1;
-
-var getIterFn = ( core_getIteratorMethod$1 && core_getIteratorMethod ) || core_getIteratorMethod$1;
-
-var require$$0$7 = ( _arrayMethods$1 && _arrayMethods ) || _arrayMethods$1;
-
-var $iterators = ( es6_array_iterator$1 && es6_array_iterator ) || es6_array_iterator$1;
-
-var require$$0$8 = ( _iterDetect$1 && _iterDetect ) || _iterDetect$1;
-
-var require$$0$9 = ( _arrayCopyWithin$1 && _arrayCopyWithin ) || _arrayCopyWithin$1;
-
-var gOPD$1 = ( _objectGopd$1 && _objectGopd ) || _objectGopd$1;
-
var _typedArray = createCommonjsModule(function (module) {
-if (require$$0$1) {
- var LIBRARY$$1 = LIBRARY;
- var global = global$1;
- var fails = require$$0;
- var $export = $export$1;
- var $typed = require$$5;
- var $buffer = require$$6;
- var ctx$$1 = ctx;
- var anInstance$$1 = anInstance;
- var propertyDesc = createDesc;
- var hide$$1 = hide;
- var redefineAll = require$$3;
- var toInteger$$1 = toInteger;
- var toLength$$1 = toLength;
- var toIndex = require$$14;
- var toAbsoluteIndex$$1 = toAbsoluteIndex;
- var toPrimitive$$1 = toPrimitive;
- var has$$1 = has;
- var classof$$1 = classof;
- var isObject$$1 = isObject;
- var toObject$$1 = toObject;
- var isArrayIter$$1 = isArrayIter;
- var create = _create;
- var getPrototypeOf = $getPrototypeOf;
- var gOPN = require$$0$4.f;
- var getIterFn$$1 = getIterFn;
- var uid$$1 = uid;
- var wks$$1 = wks;
- var createArrayMethod = require$$0$7;
- var createArrayIncludes = require$$0$2;
- var speciesConstructor$$1 = speciesConstructor;
- var ArrayIterators = $iterators;
- var Iterators$$1 = Iterators;
- var $iterDetect = require$$0$8;
- var setSpecies = require$$5$1;
- var arrayFill = require$$0$5;
- var arrayCopyWithin = require$$0$9;
- var $DP = $defineProperty;
- var $GOPD = gOPD$1;
+if (_descriptors) {
+ var LIBRARY = _library;
+ var global = _global;
+ var fails = _fails;
+ var $export = _export;
+ var $typed = _typed;
+ var $buffer = _typedBuffer;
+ var ctx = _ctx;
+ var anInstance = _anInstance;
+ var propertyDesc = _propertyDesc;
+ var hide = _hide;
+ var redefineAll = _redefineAll;
+ var toInteger = _toInteger;
+ var toLength = _toLength;
+ var toIndex = _toIndex;
+ var toAbsoluteIndex = _toAbsoluteIndex;
+ var toPrimitive = _toPrimitive;
+ var has = _has;
+ var classof = _classof;
+ var isObject = _isObject;
+ var toObject = _toObject;
+ var isArrayIter = _isArrayIter;
+ var create = _objectCreate;
+ var getPrototypeOf = _objectGpo;
+ var gOPN = _objectGopn.f;
+ var getIterFn = core_getIteratorMethod;
+ var uid = _uid;
+ var wks = _wks;
+ var createArrayMethod = _arrayMethods;
+ var createArrayIncludes = _arrayIncludes;
+ var speciesConstructor = _speciesConstructor;
+ var ArrayIterators = es6_array_iterator;
+ var Iterators = _iterators;
+ var $iterDetect = _iterDetect;
+ var setSpecies = _setSpecies;
+ var arrayFill = _arrayFill;
+ var arrayCopyWithin = _arrayCopyWithin;
+ var $DP = _objectDp;
+ var $GOPD = _objectGopd;
var dP = $DP.f;
var gOPD = $GOPD.f;
var RangeError = global.RangeError;
@@ -1726,17 +1193,17 @@ if (require$$0$1) {
var arraySlice = ArrayProto.slice;
var arrayToString = ArrayProto.toString;
var arrayToLocaleString = ArrayProto.toLocaleString;
- var ITERATOR = wks$$1('iterator');
- var TAG = wks$$1('toStringTag');
- var TYPED_CONSTRUCTOR = uid$$1('typed_constructor');
- var DEF_CONSTRUCTOR = uid$$1('def_constructor');
+ var ITERATOR = wks('iterator');
+ var TAG = wks('toStringTag');
+ var TYPED_CONSTRUCTOR = uid('typed_constructor');
+ var DEF_CONSTRUCTOR = uid('def_constructor');
var ALL_CONSTRUCTORS = $typed.CONSTR;
var TYPED_ARRAY = $typed.TYPED;
var VIEW = $typed.VIEW;
var WRONG_LENGTH = 'Wrong length!';
var $map = createArrayMethod(1, function (O, length) {
- return allocate(speciesConstructor$$1(O, O[DEF_CONSTRUCTOR]), length);
+ return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
});
var LITTLE_ENDIAN = fails(function () {
@@ -1749,24 +1216,24 @@ if (require$$0$1) {
});
var toOffset = function (it, BYTES) {
- var offset = toInteger$$1(it);
+ var offset = toInteger(it);
if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');
return offset;
};
var validate = function (it) {
- if (isObject$$1(it) && TYPED_ARRAY in it) return it;
+ if (isObject(it) && TYPED_ARRAY in it) return it;
throw TypeError(it + ' is not a typed array!');
};
var allocate = function (C, length) {
- if (!(isObject$$1(C) && TYPED_CONSTRUCTOR in C)) {
+ if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {
throw TypeError('It is not a typed array constructor!');
} return new C(length);
};
var speciesFromList = function (O, list) {
- return fromList(speciesConstructor$$1(O, O[DEF_CONSTRUCTOR]), list);
+ return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
};
var fromList = function (C, list) {
@@ -1782,19 +1249,19 @@ if (require$$0$1) {
};
var $from = function from(source /* , mapfn, thisArg */) {
- var O = toObject$$1(source);
+ var O = toObject(source);
var aLen = arguments.length;
var mapfn = aLen > 1 ? arguments[1] : undefined;
var mapping = mapfn !== undefined;
- var iterFn = getIterFn$$1(O);
+ var iterFn = getIterFn(O);
var i, length, values, result, step, iterator;
- if (iterFn != undefined && !isArrayIter$$1(iterFn)) {
+ if (iterFn != undefined && !isArrayIter(iterFn)) {
for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {
values.push(step.value);
} O = values;
}
- if (mapping && aLen > 2) mapfn = ctx$$1(mapfn, arguments[2], 2);
- for (i = 0, length = toLength$$1(O.length), result = allocate(this, length); length > i; i++) {
+ if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);
+ for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {
result[i] = mapping ? mapfn(O[i], i) : O[i];
}
return result;
@@ -1880,11 +1347,11 @@ if (require$$0$1) {
subarray: function subarray(begin, end) {
var O = validate(this);
var length = O.length;
- var $begin = toAbsoluteIndex$$1(begin, length);
- return new (speciesConstructor$$1(O, O[DEF_CONSTRUCTOR]))(
+ var $begin = toAbsoluteIndex(begin, length);
+ return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
O.buffer,
O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
- toLength$$1((end === undefined ? length : toAbsoluteIndex$$1(end, length)) - $begin)
+ toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)
);
}
};
@@ -1897,14 +1364,14 @@ if (require$$0$1) {
validate(this);
var offset = toOffset(arguments[1], 1);
var length = this.length;
- var src = toObject$$1(arrayLike);
- var len = toLength$$1(src.length);
+ var src = toObject(arrayLike);
+ var len = toLength(src.length);
var index = 0;
if (len + offset > length) throw RangeError(WRONG_LENGTH);
while (index < len) this[offset + index] = src[index++];
};
- var $iterators$$1 = {
+ var $iterators = {
entries: function entries() {
return arrayEntries.call(validate(this));
},
@@ -1917,27 +1384,27 @@ if (require$$0$1) {
};
var isTAIndex = function (target, key) {
- return isObject$$1(target)
+ return isObject(target)
&& target[TYPED_ARRAY]
&& typeof key != 'symbol'
&& key in target
&& String(+key) == String(key);
};
var $getDesc = function getOwnPropertyDescriptor(target, key) {
- return isTAIndex(target, key = toPrimitive$$1(key, true))
+ return isTAIndex(target, key = toPrimitive(key, true))
? propertyDesc(2, target[key])
: gOPD(target, key);
};
var $setDesc = function defineProperty(target, key, desc) {
- if (isTAIndex(target, key = toPrimitive$$1(key, true))
- && isObject$$1(desc)
- && has$$1(desc, 'value')
- && !has$$1(desc, 'get')
- && !has$$1(desc, 'set')
+ if (isTAIndex(target, key = toPrimitive(key, true))
+ && isObject(desc)
+ && has(desc, 'value')
+ && !has(desc, 'get')
+ && !has(desc, 'set')
// TODO: add validation descriptor w/o calling accessors
&& !desc.configurable
- && (!has$$1(desc, 'writable') || desc.writable)
- && (!has$$1(desc, 'enumerable') || desc.enumerable)
+ && (!has(desc, 'writable') || desc.writable)
+ && (!has(desc, 'enumerable') || desc.enumerable)
) {
target[key] = desc.value;
return target;
@@ -1961,8 +1428,8 @@ if (require$$0$1) {
}
var $TypedArrayPrototype$ = redefineAll({}, proto);
- redefineAll($TypedArrayPrototype$, $iterators$$1);
- hide$$1($TypedArrayPrototype$, ITERATOR, $iterators$$1.values);
+ redefineAll($TypedArrayPrototype$, $iterators);
+ hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
redefineAll($TypedArrayPrototype$, {
slice: $slice,
set: $set,
@@ -2012,15 +1479,15 @@ if (require$$0$1) {
};
if (FORCED) {
TypedArray = wrapper(function (that, data, $offset, $length) {
- anInstance$$1(that, TypedArray, NAME, '_d');
+ anInstance(that, TypedArray, NAME, '_d');
var index = 0;
var offset = 0;
var buffer, byteLength, length, klass;
- if (!isObject$$1(data)) {
+ if (!isObject(data)) {
length = toIndex(data);
byteLength = length * BYTES;
buffer = new $ArrayBuffer(byteLength);
- } else if (data instanceof $ArrayBuffer || (klass = classof$$1(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
+ } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
buffer = data;
offset = toOffset($offset, BYTES);
var $len = data.byteLength;
@@ -2029,7 +1496,7 @@ if (require$$0$1) {
byteLength = $len - offset;
if (byteLength < 0) throw RangeError(WRONG_LENGTH);
} else {
- byteLength = toLength$$1($length) * BYTES;
+ byteLength = toLength($length) * BYTES;
if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);
}
length = byteLength / BYTES;
@@ -2038,7 +1505,7 @@ if (require$$0$1) {
} else {
return $from.call(TypedArray, data);
}
- hide$$1(that, '_d', {
+ hide(that, '_d', {
b: buffer,
o: offset,
l: byteLength,
@@ -2048,7 +1515,7 @@ if (require$$0$1) {
while (index < length) addElement(that, index++);
});
TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
- hide$$1(TypedArrayPrototype, 'constructor', TypedArray);
+ hide(TypedArrayPrototype, 'constructor', TypedArray);
} else if (!fails(function () {
TypedArray(1);
}) || !fails(function () {
@@ -2060,12 +1527,12 @@ if (require$$0$1) {
new TypedArray(iter); // eslint-disable-line no-new
}, true)) {
TypedArray = wrapper(function (that, data, $offset, $length) {
- anInstance$$1(that, TypedArray, NAME);
+ anInstance(that, TypedArray, NAME);
var klass;
// `ws` module bug, temporarily remove validation length for Uint8Array
// https://github.com/websockets/ws/pull/645
- if (!isObject$$1(data)) return new Base(toIndex(data));
- if (data instanceof $ArrayBuffer || (klass = classof$$1(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
+ if (!isObject(data)) return new Base(toIndex(data));
+ if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
return $length !== undefined
? new Base(data, toOffset($offset, BYTES), $length)
: $offset !== undefined
@@ -2076,19 +1543,19 @@ if (require$$0$1) {
return $from.call(TypedArray, data);
});
arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {
- if (!(key in TypedArray)) hide$$1(TypedArray, key, Base[key]);
+ if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);
});
TypedArray[PROTOTYPE] = TypedArrayPrototype;
- if (!LIBRARY$$1) TypedArrayPrototype.constructor = TypedArray;
+ if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;
}
var $nativeIterator = TypedArrayPrototype[ITERATOR];
var CORRECT_ITER_NAME = !!$nativeIterator
&& ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);
- var $iterator = $iterators$$1.values;
- hide$$1(TypedArray, TYPED_CONSTRUCTOR, true);
- hide$$1(TypedArrayPrototype, TYPED_ARRAY, NAME);
- hide$$1(TypedArrayPrototype, VIEW, true);
- hide$$1(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
+ var $iterator = $iterators.values;
+ hide(TypedArray, TYPED_CONSTRUCTOR, true);
+ hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
+ hide(TypedArrayPrototype, VIEW, true);
+ hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {
dP(TypedArrayPrototype, TAG, {
@@ -2109,7 +1576,7 @@ if (require$$0$1) {
of: $of
});
- if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide$$1(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
+ if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
$export($export.P, NAME, proto);
@@ -2117,9 +1584,9 @@ if (require$$0$1) {
$export($export.P + $export.F * FORCED_SET, NAME, { set: $set });
- $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators$$1);
+ $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
- if (!LIBRARY$$1 && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
+ if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
$export($export.P + $export.F * fails(function () {
new TypedArray(1).slice();
@@ -2131,69 +1598,61 @@ if (require$$0$1) {
TypedArrayPrototype.toLocaleString.call([1, 2]);
})), NAME, { toLocaleString: $toLocaleString });
- Iterators$$1[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
- if (!LIBRARY$$1 && !CORRECT_ITER_NAME) hide$$1(TypedArrayPrototype, ITERATOR, $iterator);
+ Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
+ if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);
};
} else module.exports = function () { /* empty */ };
});
-
-var _typedArray$1 = Object.freeze({
- default: _typedArray,
- __moduleExports: _typedArray
-});
-
-var require$$0$10 = ( _typedArray$1 && _typedArray ) || _typedArray$1;
-
-require$$0$10('Int8', 1, function (init) {
+_typedArray('Int8', 1, function (init) {
return function Int8Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-require$$0$10('Uint8', 1, function (init) {
+_typedArray('Uint8', 1, function (init) {
return function Uint8Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-require$$0$10('Uint8', 1, function (init) {
+_typedArray('Uint8', 1, function (init) {
return function Uint8ClampedArray(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
}, true);
-require$$0$10('Int16', 2, function (init) {
+_typedArray('Int16', 2, function (init) {
return function Int16Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-require$$0$10('Uint16', 2, function (init) {
+_typedArray('Uint16', 2, function (init) {
return function Uint16Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-require$$0$10('Int32', 4, function (init) {
+_typedArray('Int32', 4, function (init) {
return function Int32Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-require$$0$10('Uint32', 4, function (init) {
+_typedArray('Uint32', 4, function (init) {
return function Uint32Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-require$$0$10('Float32', 4, function (init) {
+_typedArray('Float32', 4, function (init) {
return function Float32Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-require$$0$10('Float64', 8, function (init) {
+_typedArray('Float64', 8, function (init) {
return function Float64Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
@@ -2203,38 +1662,30 @@ require$$0$10('Float64', 8, function (init) {
var _iterCall = function (iterator, fn, value, entries) {
try {
- return entries ? fn(anObject(value)[0], value[1]) : fn(value);
+ return entries ? fn(_anObject(value)[0], value[1]) : fn(value);
// 7.4.6 IteratorClose(iterator, completion)
} catch (e) {
var ret = iterator['return'];
- if (ret !== undefined) anObject(ret.call(iterator));
+ if (ret !== undefined) _anObject(ret.call(iterator));
throw e;
}
};
-
-var _iterCall$1 = Object.freeze({
- default: _iterCall,
- __moduleExports: _iterCall
-});
-
-var call = ( _iterCall$1 && _iterCall ) || _iterCall$1;
-
var _forOf = createCommonjsModule(function (module) {
var BREAK = {};
var RETURN = {};
var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
- var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
- var f = ctx(fn, that, entries ? 2 : 1);
+ var iterFn = ITERATOR ? function () { return iterable; } : core_getIteratorMethod(iterable);
+ var f = _ctx(fn, that, entries ? 2 : 1);
var index = 0;
var length, step, iterator, result;
if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
// fast case for arrays with default iterator
- if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
- result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
+ if (_isArrayIter(iterFn)) for (length = _toLength(iterable.length); length > index; index++) {
+ result = entries ? f(_anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
if (result === BREAK || result === RETURN) return result;
} else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
- result = call(iterator, f, step.value, entries);
+ result = _iterCall(iterator, f, step.value, entries);
if (result === BREAK || result === RETURN) return result;
}
};
@@ -2242,22 +1693,16 @@ exports.BREAK = BREAK;
exports.RETURN = RETURN;
});
-
-var _forOf$1 = Object.freeze({
- default: _forOf,
- __moduleExports: _forOf
-});
-
var _meta = createCommonjsModule(function (module) {
-var META = uid('meta');
+var META = _uid('meta');
-var setDesc = $defineProperty.f;
+var setDesc = _objectDp.f;
var id = 0;
var isExtensible = Object.isExtensible || function () {
return true;
};
-var FREEZE = !require$$0(function () {
+var FREEZE = !_fails(function () {
return isExtensible(Object.preventExtensions({}));
});
var setMeta = function (it) {
@@ -2268,8 +1713,8 @@ var setMeta = function (it) {
};
var fastKey = function (it, create) {
// return primitive with prefix
- if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
- if (!has(it, META)) {
+ if (!_isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if (!_has(it, META)) {
// can't set metadata to uncaught frozen object
if (!isExtensible(it)) return 'F';
// not necessary to add metadata
@@ -2280,7 +1725,7 @@ var fastKey = function (it, create) {
} return it[META].i;
};
var getWeak = function (it, create) {
- if (!has(it, META)) {
+ if (!_has(it, META)) {
// can't set metadata to uncaught frozen object
if (!isExtensible(it)) return true;
// not necessary to add metadata
@@ -2292,7 +1737,7 @@ var getWeak = function (it, create) {
};
// add metadata on freeze-family methods calling
var onFreeze = function (it) {
- if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
+ if (FREEZE && meta.NEED && isExtensible(it) && !_has(it, META)) setMeta(it);
return it;
};
var meta = module.exports = {
@@ -2309,35 +1754,12 @@ var _meta_3 = _meta.fastKey;
var _meta_4 = _meta.getWeak;
var _meta_5 = _meta.onFreeze;
-
-var _meta$1 = Object.freeze({
- default: _meta,
- __moduleExports: _meta,
- KEY: _meta_1,
- NEED: _meta_2,
- fastKey: _meta_3,
- getWeak: _meta_4,
- onFreeze: _meta_5
-});
-
var _validateCollection = function (it, TYPE) {
- if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
+ if (!_isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
return it;
};
-
-var _validateCollection$1 = Object.freeze({
- default: _validateCollection,
- __moduleExports: _validateCollection
-});
-
-var forOf = ( _forOf$1 && _forOf ) || _forOf$1;
-
-var require$$0$11 = ( _meta$1 && _meta ) || _meta$1;
-
-var validate = ( _validateCollection$1 && _validateCollection ) || _validateCollection$1;
-
-var dP$1 = $defineProperty.f;
+var dP$1 = _objectDp.f;
@@ -2347,9 +1769,9 @@ var dP$1 = $defineProperty.f;
-var fastKey = require$$0$11.fastKey;
+var fastKey = _meta.fastKey;
-var SIZE = require$$0$1 ? '_s' : 'size';
+var SIZE = _descriptors ? '_s' : 'size';
var getEntry = function (that, key) {
// fast case
@@ -2365,19 +1787,19 @@ var getEntry = function (that, key) {
var _collectionStrong = {
getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
var C = wrapper(function (that, iterable) {
- anInstance(that, C, NAME, '_i');
+ _anInstance(that, C, NAME, '_i');
that._t = NAME; // collection type
- that._i = _create(null); // index
+ that._i = _objectCreate(null); // index
that._f = undefined; // first entry
that._l = undefined; // last entry
that[SIZE] = 0; // size
- if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
+ if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
});
- require$$3(C.prototype, {
+ _redefineAll(C.prototype, {
// 23.1.3.1 Map.prototype.clear()
// 23.2.3.2 Set.prototype.clear()
clear: function clear() {
- for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
+ for (var that = _validateCollection(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
entry.r = true;
if (entry.p) entry.p = entry.p.n = undefined;
delete data[entry.i];
@@ -2388,7 +1810,7 @@ var _collectionStrong = {
// 23.1.3.3 Map.prototype.delete(key)
// 23.2.3.4 Set.prototype.delete(value)
'delete': function (key) {
- var that = validate(this, NAME);
+ var that = _validateCollection(this, NAME);
var entry = getEntry(that, key);
if (entry) {
var next = entry.n;
@@ -2405,8 +1827,8 @@ var _collectionStrong = {
// 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
// 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
forEach: function forEach(callbackfn /* , that = undefined */) {
- validate(this, NAME);
- var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
+ _validateCollection(this, NAME);
+ var f = _ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
var entry;
while (entry = entry ? entry.n : this._f) {
f(entry.v, entry.k, this);
@@ -2417,12 +1839,12 @@ var _collectionStrong = {
// 23.1.3.7 Map.prototype.has(key)
// 23.2.3.7 Set.prototype.has(value)
has: function has(key) {
- return !!getEntry(validate(this, NAME), key);
+ return !!getEntry(_validateCollection(this, NAME), key);
}
});
- if (require$$0$1) dP$1(C.prototype, 'size', {
+ if (_descriptors) dP$1(C.prototype, 'size', {
get: function () {
- return validate(this, NAME)[SIZE];
+ return _validateCollection(this, NAME)[SIZE];
}
});
return C;
@@ -2454,8 +1876,8 @@ var _collectionStrong = {
setStrong: function (C, NAME, IS_MAP) {
// add .keys, .values, .entries, [@@iterator]
// 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
- $iterDefine(C, NAME, function (iterated, kind) {
- this._t = validate(iterated, NAME); // target
+ _iterDefine(C, NAME, function (iterated, kind) {
+ this._t = _validateCollection(iterated, NAME); // target
this._k = kind; // kind
this._l = undefined; // previous
}, function () {
@@ -2468,46 +1890,32 @@ var _collectionStrong = {
if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {
// or finish the iteration
that._t = undefined;
- return step(1);
+ return _iterStep(1);
}
// return step by kind
- if (kind == 'keys') return step(0, entry.k);
- if (kind == 'values') return step(0, entry.v);
- return step(0, [entry.k, entry.v]);
+ if (kind == 'keys') return _iterStep(0, entry.k);
+ if (kind == 'values') return _iterStep(0, entry.v);
+ return _iterStep(0, [entry.k, entry.v]);
}, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
// add [@@species], 23.1.2.2, 23.2.2.2
- require$$5$1(NAME);
+ _setSpecies(NAME);
}
};
-var _collectionStrong_1 = _collectionStrong.getConstructor;
-var _collectionStrong_2 = _collectionStrong.def;
-var _collectionStrong_3 = _collectionStrong.getEntry;
-var _collectionStrong_4 = _collectionStrong.setStrong;
-
-
-var _collectionStrong$1 = Object.freeze({
- default: _collectionStrong,
- __moduleExports: _collectionStrong,
- getConstructor: _collectionStrong_1,
- def: _collectionStrong_2,
- getEntry: _collectionStrong_3,
- setStrong: _collectionStrong_4
-});
// Works with __proto__ only. Old v8 can't work with null proto objects.
/* eslint-disable no-proto */
var check = function (O, proto) {
- anObject(O);
- if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
+ _anObject(O);
+ if (!_isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
};
var _setProto = {
set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
function (test, buggy, set) {
try {
- set = ctx(Function.call, gOPD$1.f(Object.prototype, '__proto__').set, 2);
+ set = _ctx(Function.call, _objectGopd.f(Object.prototype, '__proto__').set, 2);
set(test, []);
buggy = !(test instanceof Array);
} catch (e) { buggy = true; }
@@ -2520,72 +1928,52 @@ var _setProto = {
}({}, false) : undefined),
check: check
};
-var _setProto_1 = _setProto.set;
-var _setProto_2 = _setProto.check;
-
-var _setProto$1 = Object.freeze({
- default: _setProto,
- __moduleExports: _setProto,
- set: _setProto_1,
- check: _setProto_2
-});
-
-var setProto = ( _setProto$1 && _setProto ) || _setProto$1;
-
-var setPrototypeOf = setProto.set;
+var setPrototypeOf = _setProto.set;
var _inheritIfRequired = function (that, target, C) {
var S = target.constructor;
var P;
- if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {
+ if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && _isObject(P) && setPrototypeOf) {
setPrototypeOf(that, P);
} return that;
};
-
-var _inheritIfRequired$1 = Object.freeze({
- default: _inheritIfRequired,
- __moduleExports: _inheritIfRequired
-});
-
-var inheritIfRequired = ( _inheritIfRequired$1 && _inheritIfRequired ) || _inheritIfRequired$1;
-
var _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
- var Base = global$1[NAME];
+ var Base = _global[NAME];
var C = Base;
var ADDER = IS_MAP ? 'set' : 'add';
var proto = C && C.prototype;
var O = {};
var fixMethod = function (KEY) {
var fn = proto[KEY];
- redefine(proto, KEY,
+ _redefine(proto, KEY,
KEY == 'delete' ? function (a) {
- return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+ return IS_WEAK && !_isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
} : KEY == 'has' ? function has(a) {
- return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+ return IS_WEAK && !_isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
} : KEY == 'get' ? function get(a) {
- return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
+ return IS_WEAK && !_isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
} : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }
: function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }
);
};
- if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !require$$0(function () {
+ if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !_fails(function () {
new C().entries().next();
}))) {
// create collection constructor
C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
- require$$3(C.prototype, methods);
- require$$0$11.NEED = true;
+ _redefineAll(C.prototype, methods);
+ _meta.NEED = true;
} else {
var instance = new C();
// early implementations not supports chaining
var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
// V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
- var THROWS_ON_PRIMITIVES = require$$0(function () { instance.has(1); });
+ var THROWS_ON_PRIMITIVES = _fails(function () { instance.has(1); });
// most early implementations doesn't supports iterables, most modern - not close it correctly
- var ACCEPT_ITERABLES = require$$0$8(function (iter) { new C(iter); }); // eslint-disable-line no-new
+ var ACCEPT_ITERABLES = _iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new
// for early implementations -0 and +0 not the same
- var BUGGY_ZERO = !IS_WEAK && require$$0(function () {
+ var BUGGY_ZERO = !IS_WEAK && _fails(function () {
// V8 ~ Chromium 42- fails only with 5+ elements
var $instance = new C();
var index = 5;
@@ -2594,9 +1982,9 @@ var _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
});
if (!ACCEPT_ITERABLES) {
C = wrapper(function (target, iterable) {
- anInstance(target, C, NAME);
- var that = inheritIfRequired(new Base(), target, C);
- if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
+ _anInstance(target, C, NAME);
+ var that = _inheritIfRequired(new Base(), target, C);
+ if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
return that;
});
C.prototype = proto;
@@ -2612,54 +2000,44 @@ var _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
if (IS_WEAK && proto.clear) delete proto.clear;
}
- setToStringTag(C, NAME);
+ _setToStringTag(C, NAME);
O[NAME] = C;
- $export$1($export$1.G + $export$1.W + $export$1.F * (C != Base), O);
+ _export(_export.G + _export.W + _export.F * (C != Base), O);
if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
return C;
};
-
-var _collection$1 = Object.freeze({
- default: _collection,
- __moduleExports: _collection
-});
-
-var strong = ( _collectionStrong$1 && _collectionStrong ) || _collectionStrong$1;
-
-var require$$0$12 = ( _collection$1 && _collection ) || _collection$1;
-
var MAP = 'Map';
// 23.1 Map Objects
-var es6_map = require$$0$12(MAP, function (get) {
+var es6_map = _collection(MAP, function (get) {
return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
// 23.1.3.6 Map.prototype.get(key)
get: function get(key) {
- var entry = strong.getEntry(validate(this, MAP), key);
+ var entry = _collectionStrong.getEntry(_validateCollection(this, MAP), key);
return entry && entry.v;
},
// 23.1.3.9 Map.prototype.set(key, value)
set: function set(key, value) {
- return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);
+ return _collectionStrong.def(_validateCollection(this, MAP), key === 0 ? 0 : key, value);
}
-}, strong, true);
+}, _collectionStrong, true);
var SET = 'Set';
// 23.2 Set Objects
-var es6_set = require$$0$12(SET, function (get) {
+var es6_set = _collection(SET, function (get) {
return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
// 23.2.3.1 Set.prototype.add(value)
add: function add(value) {
- return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);
+ return _collectionStrong.def(_validateCollection(this, SET), value = value === 0 ? 0 : value, value);
}
-}, strong);
+}, _collectionStrong);
var f$4 = Object.getOwnPropertySymbols;
@@ -2667,15 +2045,6 @@ var _objectGops = {
f: f$4
};
-
-var _objectGops$1 = Object.freeze({
- default: _objectGops,
- __moduleExports: _objectGops,
- f: f$4
-});
-
-var gOPS = ( _objectGops$1 && _objectGops ) || _objectGops$1;
-
// 19.1.2.1 Object.assign(target, source, ...)
@@ -2685,7 +2054,7 @@ var gOPS = ( _objectGops$1 && _objectGops ) || _objectGops$1;
var $assign = Object.assign;
// should work with symbols and should have deterministic property order (V8 bug)
-var _objectAssign = !$assign || require$$0(function () {
+var _objectAssign = !$assign || _fails(function () {
var A = {};
var B = {};
// eslint-disable-next-line no-undef
@@ -2695,14 +2064,14 @@ var _objectAssign = !$assign || require$$0(function () {
K.split('').forEach(function (k) { B[k] = k; });
return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
- var T = toObject(target);
+ var T = _toObject(target);
var aLen = arguments.length;
var index = 1;
- var getSymbols = gOPS.f;
- var isEnum = require$$0$6.f;
+ var getSymbols = _objectGops.f;
+ var isEnum = _objectPie.f;
while (aLen > index) {
- var S = IObject(arguments[index++]);
- var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
+ var S = _iobject(arguments[index++]);
+ var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : _objectKeys(S);
var length = keys.length;
var j = 0;
var key;
@@ -2710,22 +2079,16 @@ var _objectAssign = !$assign || require$$0(function () {
} return T;
} : $assign;
+var getWeak = _meta.getWeak;
-var _objectAssign$1 = Object.freeze({
- default: _objectAssign,
- __moduleExports: _objectAssign
-});
-var getWeak = require$$0$11.getWeak;
-
-
-var arrayFind = require$$0$7(5);
-var arrayFindIndex = require$$0$7(6);
+var arrayFind = _arrayMethods(5);
+var arrayFindIndex = _arrayMethods(6);
var id$1 = 0;
// fallback for uncaught frozen keys
@@ -2765,59 +2128,43 @@ UncaughtFrozenStore.prototype = {
var _collectionWeak = {
getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
var C = wrapper(function (that, iterable) {
- anInstance(that, C, NAME, '_i');
+ _anInstance(that, C, NAME, '_i');
that._t = NAME; // collection type
that._i = id$1++; // collection id
that._l = undefined; // leak store for uncaught frozen objects
- if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
+ if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
});
- require$$3(C.prototype, {
+ _redefineAll(C.prototype, {
// 23.3.3.2 WeakMap.prototype.delete(key)
// 23.4.3.3 WeakSet.prototype.delete(value)
'delete': function (key) {
- if (!isObject(key)) return false;
+ if (!_isObject(key)) return false;
var data = getWeak(key);
- if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);
- return data && has(data, this._i) && delete data[this._i];
+ if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME))['delete'](key);
+ return data && _has(data, this._i) && delete data[this._i];
},
// 23.3.3.4 WeakMap.prototype.has(key)
// 23.4.3.4 WeakSet.prototype.has(value)
- has: function has$$1(key) {
- if (!isObject(key)) return false;
+ has: function has(key) {
+ if (!_isObject(key)) return false;
var data = getWeak(key);
- if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);
- return data && has(data, this._i);
+ if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME)).has(key);
+ return data && _has(data, this._i);
}
});
return C;
},
def: function (that, key, value) {
- var data = getWeak(anObject(key), true);
+ var data = getWeak(_anObject(key), true);
if (data === true) uncaughtFrozenStore(that).set(key, value);
else data[that._i] = value;
return that;
},
ufstore: uncaughtFrozenStore
};
-var _collectionWeak_1 = _collectionWeak.getConstructor;
-var _collectionWeak_2 = _collectionWeak.def;
-var _collectionWeak_3 = _collectionWeak.ufstore;
-
-
-var _collectionWeak$1 = Object.freeze({
- default: _collectionWeak,
- __moduleExports: _collectionWeak,
- getConstructor: _collectionWeak_1,
- def: _collectionWeak_2,
- ufstore: _collectionWeak_3
-});
-
-var require$$0$13 = ( _objectAssign$1 && _objectAssign ) || _objectAssign$1;
-
-var weak = ( _collectionWeak$1 && _collectionWeak ) || _collectionWeak$1;
var es6_weakMap = createCommonjsModule(function (module) {
-var each = require$$0$7(0);
+var each = _arrayMethods(0);
@@ -2826,9 +2173,9 @@ var each = require$$0$7(0);
var WEAK_MAP = 'WeakMap';
-var getWeak = require$$0$11.getWeak;
+var getWeak = _meta.getWeak;
var isExtensible = Object.isExtensible;
-var uncaughtFrozenStore = weak.ufstore;
+var uncaughtFrozenStore = _collectionWeak.ufstore;
var tmp = {};
var InternalMap;
@@ -2841,32 +2188,32 @@ var wrapper = function (get) {
var methods = {
// 23.3.3.3 WeakMap.prototype.get(key)
get: function get(key) {
- if (isObject(key)) {
+ if (_isObject(key)) {
var data = getWeak(key);
- if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);
+ if (data === true) return uncaughtFrozenStore(_validateCollection(this, WEAK_MAP)).get(key);
return data ? data[this._i] : undefined;
}
},
// 23.3.3.5 WeakMap.prototype.set(key, value)
set: function set(key, value) {
- return weak.def(validate(this, WEAK_MAP), key, value);
+ return _collectionWeak.def(_validateCollection(this, WEAK_MAP), key, value);
}
};
// 23.3 WeakMap Objects
-var $WeakMap = module.exports = require$$0$12(WEAK_MAP, wrapper, methods, weak, true, true);
+var $WeakMap = module.exports = _collection(WEAK_MAP, wrapper, methods, _collectionWeak, true, true);
// IE11 WeakMap frozen keys fix
-if (require$$0(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {
- InternalMap = weak.getConstructor(wrapper, WEAK_MAP);
- require$$0$13(InternalMap.prototype, methods);
- require$$0$11.NEED = true;
+if (_fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {
+ InternalMap = _collectionWeak.getConstructor(wrapper, WEAK_MAP);
+ _objectAssign(InternalMap.prototype, methods);
+ _meta.NEED = true;
each(['delete', 'has', 'get', 'set'], function (key) {
var proto = $WeakMap.prototype;
var method = proto[key];
- redefine(proto, key, function (a, b) {
+ _redefine(proto, key, function (a, b) {
// store frozen objects on internal weakmap shim
- if (isObject(a) && !isExtensible(a)) {
+ if (_isObject(a) && !isExtensible(a)) {
if (!this._f) this._f = new InternalMap();
var result = this._f[key](a, b);
return key == 'set' ? this : result;
@@ -2880,28 +2227,28 @@ if (require$$0(function () { return new $WeakMap().set((Object.freeze || Object)
var WEAK_SET = 'WeakSet';
// 23.4 WeakSet Objects
-require$$0$12(WEAK_SET, function (get) {
+_collection(WEAK_SET, function (get) {
return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
// 23.4.3.1 WeakSet.prototype.add(value)
add: function add(value) {
- return weak.def(validate(this, WEAK_SET), value, true);
+ return _collectionWeak.def(_validateCollection(this, WEAK_SET), value, true);
}
-}, weak, false, true);
+}, _collectionWeak, false, true);
// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
-var rApply = (global$1.Reflect || {}).apply;
+var rApply = (_global.Reflect || {}).apply;
var fApply = Function.apply;
// MS Edge argumentsList argument is optional
-$export$1($export$1.S + $export$1.F * !require$$0(function () {
+_export(_export.S + _export.F * !_fails(function () {
rApply(function () { /* empty */ });
}), 'Reflect', {
apply: function apply(target, thisArgument, argumentsList) {
- var T = aFunction(target);
- var L = anObject(argumentsList);
+ var T = _aFunction(target);
+ var L = _anObject(argumentsList);
return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);
}
});
@@ -2923,14 +2270,6 @@ var _invoke = function (fn, args, that) {
} return fn.apply(that, args);
};
-
-var _invoke$1 = Object.freeze({
- default: _invoke,
- __moduleExports: _invoke
-});
-
-var invoke = ( _invoke$1 && _invoke ) || _invoke$1;
-
var arraySlice = [].slice;
var factories = {};
@@ -2943,24 +2282,16 @@ var construct = function (F, len, args) {
};
var _bind = Function.bind || function bind(that /* , ...args */) {
- var fn = aFunction(this);
+ var fn = _aFunction(this);
var partArgs = arraySlice.call(arguments, 1);
var bound = function (/* args... */) {
var args = partArgs.concat(arraySlice.call(arguments));
- return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
+ return this instanceof bound ? construct(fn, args.length, args) : _invoke(fn, args, that);
};
- if (isObject(fn.prototype)) bound.prototype = fn.prototype;
+ if (_isObject(fn.prototype)) bound.prototype = fn.prototype;
return bound;
};
-
-var _bind$1 = Object.freeze({
- default: _bind,
- __moduleExports: _bind
-});
-
-var bind = ( _bind$1 && _bind ) || _bind$1;
-
// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
@@ -2969,23 +2300,23 @@ var bind = ( _bind$1 && _bind ) || _bind$1;
-var rConstruct = (global$1.Reflect || {}).construct;
+var rConstruct = (_global.Reflect || {}).construct;
// MS Edge supports only 2 arguments and argumentsList argument is optional
// FF Nightly sets third argument as `new.target`, but does not create `this` from it
-var NEW_TARGET_BUG = require$$0(function () {
+var NEW_TARGET_BUG = _fails(function () {
function F() { /* empty */ }
return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);
});
-var ARGS_BUG = !require$$0(function () {
+var ARGS_BUG = !_fails(function () {
rConstruct(function () { /* empty */ });
});
-$export$1($export$1.S + $export$1.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
+_export(_export.S + _export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
construct: function construct(Target, args /* , newTarget */) {
- aFunction(Target);
- anObject(args);
- var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
+ _aFunction(Target);
+ _anObject(args);
+ var newTarget = arguments.length < 3 ? Target : _aFunction(arguments[2]);
if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);
if (Target == newTarget) {
// w/o altered newTarget, optimization for 0-4 arguments
@@ -2999,13 +2330,13 @@ $export$1($export$1.S + $export$1.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
// w/o altered newTarget, lot of arguments case
var $args = [null];
$args.push.apply($args, args);
- return new (bind.apply(Target, $args))();
+ return new (_bind.apply(Target, $args))();
}
// with altered newTarget, not support built-in constructors
var proto = newTarget.prototype;
- var instance = _create(isObject(proto) ? proto : Object.prototype);
+ var instance = _objectCreate(_isObject(proto) ? proto : Object.prototype);
var result = Function.apply.call(Target, instance, args);
- return isObject(result) ? result : instance;
+ return _isObject(result) ? result : instance;
}
});
@@ -3016,16 +2347,16 @@ $export$1($export$1.S + $export$1.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
// MS Edge has broken Reflect.defineProperty - throwing instead of returning false
-$export$1($export$1.S + $export$1.F * require$$0(function () {
+_export(_export.S + _export.F * _fails(function () {
// eslint-disable-next-line no-undef
- Reflect.defineProperty($defineProperty.f({}, 1, { value: 1 }), 1, { value: 2 });
+ Reflect.defineProperty(_objectDp.f({}, 1, { value: 1 }), 1, { value: 2 });
}), 'Reflect', {
defineProperty: function defineProperty(target, propertyKey, attributes) {
- anObject(target);
- propertyKey = toPrimitive(propertyKey, true);
- anObject(attributes);
+ _anObject(target);
+ propertyKey = _toPrimitive(propertyKey, true);
+ _anObject(attributes);
try {
- $defineProperty.f(target, propertyKey, attributes);
+ _objectDp.f(target, propertyKey, attributes);
return true;
} catch (e) {
return false;
@@ -3035,12 +2366,12 @@ $export$1($export$1.S + $export$1.F * require$$0(function () {
// 26.1.4 Reflect.deleteProperty(target, propertyKey)
-var gOPD$2 = gOPD$1.f;
+var gOPD$1 = _objectGopd.f;
-$export$1($export$1.S, 'Reflect', {
+_export(_export.S, 'Reflect', {
deleteProperty: function deleteProperty(target, propertyKey) {
- var desc = gOPD$2(anObject(target), propertyKey);
+ var desc = gOPD$1(_anObject(target), propertyKey);
return desc && !desc.configurable ? false : delete target[propertyKey];
}
});
@@ -3056,25 +2387,25 @@ $export$1($export$1.S, 'Reflect', {
function get(target, propertyKey /* , receiver */) {
var receiver = arguments.length < 3 ? target : arguments[2];
var desc, proto;
- if (anObject(target) === receiver) return target[propertyKey];
- if (desc = gOPD$1.f(target, propertyKey)) return has(desc, 'value')
+ if (_anObject(target) === receiver) return target[propertyKey];
+ if (desc = _objectGopd.f(target, propertyKey)) return _has(desc, 'value')
? desc.value
: desc.get !== undefined
? desc.get.call(receiver)
: undefined;
- if (isObject(proto = $getPrototypeOf(target))) return get(proto, propertyKey, receiver);
+ if (_isObject(proto = _objectGpo(target))) return get(proto, propertyKey, receiver);
}
-$export$1($export$1.S, 'Reflect', { get: get });
+_export(_export.S, 'Reflect', { get: get });
// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
-$export$1($export$1.S, 'Reflect', {
+_export(_export.S, 'Reflect', {
getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {
- return gOPD$1.f(anObject(target), propertyKey);
+ return _objectGopd.f(_anObject(target), propertyKey);
}
});
@@ -3083,16 +2414,16 @@ $export$1($export$1.S, 'Reflect', {
-$export$1($export$1.S, 'Reflect', {
+_export(_export.S, 'Reflect', {
getPrototypeOf: function getPrototypeOf(target) {
- return $getPrototypeOf(anObject(target));
+ return _objectGpo(_anObject(target));
}
});
// 26.1.9 Reflect.has(target, propertyKey)
-$export$1($export$1.S, 'Reflect', {
+_export(_export.S, 'Reflect', {
has: function has(target, propertyKey) {
return propertyKey in target;
}
@@ -3103,9 +2434,9 @@ $export$1($export$1.S, 'Reflect', {
var $isExtensible = Object.isExtensible;
-$export$1($export$1.S, 'Reflect', {
+_export(_export.S, 'Reflect', {
isExtensible: function isExtensible(target) {
- anObject(target);
+ _anObject(target);
return $isExtensible ? $isExtensible(target) : true;
}
});
@@ -3114,34 +2445,26 @@ $export$1($export$1.S, 'Reflect', {
-var Reflect$1 = global$1.Reflect;
+var Reflect$1 = _global.Reflect;
var _ownKeys = Reflect$1 && Reflect$1.ownKeys || function ownKeys(it) {
- var keys = require$$0$4.f(anObject(it));
- var getSymbols = gOPS.f;
+ var keys = _objectGopn.f(_anObject(it));
+ var getSymbols = _objectGops.f;
return getSymbols ? keys.concat(getSymbols(it)) : keys;
};
-
-var _ownKeys$1 = Object.freeze({
- default: _ownKeys,
- __moduleExports: _ownKeys
-});
-
-var ownKeys = ( _ownKeys$1 && _ownKeys ) || _ownKeys$1;
-
// 26.1.11 Reflect.ownKeys(target)
-$export$1($export$1.S, 'Reflect', { ownKeys: ownKeys });
+_export(_export.S, 'Reflect', { ownKeys: _ownKeys });
// 26.1.12 Reflect.preventExtensions(target)
var $preventExtensions = Object.preventExtensions;
-$export$1($export$1.S, 'Reflect', {
+_export(_export.S, 'Reflect', {
preventExtensions: function preventExtensions(target) {
- anObject(target);
+ _anObject(target);
try {
if ($preventExtensions) $preventExtensions(target);
return true;
@@ -3163,35 +2486,35 @@ $export$1($export$1.S, 'Reflect', {
function set(target, propertyKey, V /* , receiver */) {
var receiver = arguments.length < 4 ? target : arguments[3];
- var ownDesc = gOPD$1.f(anObject(target), propertyKey);
+ var ownDesc = _objectGopd.f(_anObject(target), propertyKey);
var existingDescriptor, proto;
if (!ownDesc) {
- if (isObject(proto = $getPrototypeOf(target))) {
+ if (_isObject(proto = _objectGpo(target))) {
return set(proto, propertyKey, V, receiver);
}
- ownDesc = createDesc(0);
+ ownDesc = _propertyDesc(0);
}
- if (has(ownDesc, 'value')) {
- if (ownDesc.writable === false || !isObject(receiver)) return false;
- existingDescriptor = gOPD$1.f(receiver, propertyKey) || createDesc(0);
+ if (_has(ownDesc, 'value')) {
+ if (ownDesc.writable === false || !_isObject(receiver)) return false;
+ existingDescriptor = _objectGopd.f(receiver, propertyKey) || _propertyDesc(0);
existingDescriptor.value = V;
- $defineProperty.f(receiver, propertyKey, existingDescriptor);
+ _objectDp.f(receiver, propertyKey, existingDescriptor);
return true;
}
return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
}
-$export$1($export$1.S, 'Reflect', { set: set });
+_export(_export.S, 'Reflect', { set: set });
// 26.1.14 Reflect.setPrototypeOf(target, proto)
-if (setProto) $export$1($export$1.S, 'Reflect', {
+if (_setProto) _export(_export.S, 'Reflect', {
setPrototypeOf: function setPrototypeOf(target, proto) {
- setProto.check(target, proto);
+ _setProto.check(target, proto);
try {
- setProto.set(target, proto);
+ _setProto.set(target, proto);
return true;
} catch (e) {
return false;
@@ -3199,11 +2522,11 @@ if (setProto) $export$1($export$1.S, 'Reflect', {
}
});
-var process = global$1.process;
-var setTask = global$1.setImmediate;
-var clearTask = global$1.clearImmediate;
-var MessageChannel = global$1.MessageChannel;
-var Dispatch = global$1.Dispatch;
+var process = _global.process;
+var setTask = _global.setImmediate;
+var clearTask = _global.clearImmediate;
+var MessageChannel = _global.MessageChannel;
+var Dispatch = _global.Dispatch;
var counter = 0;
var queue = {};
var ONREADYSTATECHANGE = 'onreadystatechange';
@@ -3228,7 +2551,7 @@ if (!setTask || !clearTask) {
while (arguments.length > i) args.push(arguments[i++]);
queue[++counter] = function () {
// eslint-disable-next-line no-new-func
- invoke(typeof fn == 'function' ? fn : Function(fn), args);
+ _invoke(typeof fn == 'function' ? fn : Function(fn), args);
};
defer(counter);
return counter;
@@ -3237,40 +2560,40 @@ if (!setTask || !clearTask) {
delete queue[id];
};
// Node.js 0.8-
- if (cof(process) == 'process') {
+ if (_cof(process) == 'process') {
defer = function (id) {
- process.nextTick(ctx(run, id, 1));
+ process.nextTick(_ctx(run, id, 1));
};
// Sphere (JS game engine) Dispatch API
} else if (Dispatch && Dispatch.now) {
defer = function (id) {
- Dispatch.now(ctx(run, id, 1));
+ Dispatch.now(_ctx(run, id, 1));
};
// Browsers with MessageChannel, includes WebWorkers
} else if (MessageChannel) {
channel = new MessageChannel();
port = channel.port2;
channel.port1.onmessage = listener;
- defer = ctx(port.postMessage, port, 1);
+ defer = _ctx(port.postMessage, port, 1);
// Browsers with postMessage, skip WebWorkers
// IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
- } else if (global$1.addEventListener && typeof postMessage == 'function' && !global$1.importScripts) {
+ } else if (_global.addEventListener && typeof postMessage == 'function' && !_global.importScripts) {
defer = function (id) {
- global$1.postMessage(id + '', '*');
+ _global.postMessage(id + '', '*');
};
- global$1.addEventListener('message', listener, false);
+ _global.addEventListener('message', listener, false);
// IE8-
- } else if (ONREADYSTATECHANGE in cel('script')) {
+ } else if (ONREADYSTATECHANGE in _domCreate('script')) {
defer = function (id) {
- html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
- html.removeChild(this);
+ _html.appendChild(_domCreate('script'))[ONREADYSTATECHANGE] = function () {
+ _html.removeChild(this);
run.call(id);
};
};
// Rest old browsers
} else {
defer = function (id) {
- setTimeout(ctx(run, id, 1), 0);
+ setTimeout(_ctx(run, id, 1), 0);
};
}
}
@@ -3278,24 +2601,12 @@ var _task = {
set: setTask,
clear: clearTask
};
-var _task_1 = _task.set;
-var _task_2 = _task.clear;
-
-var _task$1 = Object.freeze({
- default: _task,
- __moduleExports: _task,
- set: _task_1,
- clear: _task_2
-});
-
-var $task = ( _task$1 && _task ) || _task$1;
-
-var macrotask = $task.set;
-var Observer = global$1.MutationObserver || global$1.WebKitMutationObserver;
-var process$1 = global$1.process;
-var Promise$1 = global$1.Promise;
-var isNode = cof(process$1) == 'process';
+var macrotask = _task.set;
+var Observer = _global.MutationObserver || _global.WebKitMutationObserver;
+var process$1 = _global.process;
+var Promise$1 = _global.Promise;
+var isNode = _cof(process$1) == 'process';
var _microtask = function () {
var head, last, notify;
@@ -3323,7 +2634,7 @@ var _microtask = function () {
process$1.nextTick(flush);
};
// browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
- } else if (Observer && !(global$1.navigator && global$1.navigator.standalone)) {
+ } else if (Observer && !(_global.navigator && _global.navigator.standalone)) {
var toggle = true;
var node = document.createTextNode('');
new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new
@@ -3345,7 +2656,7 @@ var _microtask = function () {
} else {
notify = function () {
// strange IE + webpack dev server bug - use .call(global)
- macrotask.call(global$1, flush);
+ macrotask.call(_global, flush);
};
}
@@ -3359,12 +2670,6 @@ var _microtask = function () {
};
};
-
-var _microtask$1 = Object.freeze({
- default: _microtask,
- __moduleExports: _microtask
-});
-
// 25.4.1.5 NewPromiseCapability(C)
@@ -3375,8 +2680,8 @@ function PromiseCapability(C) {
resolve = $$resolve;
reject = $$reject;
});
- this.resolve = aFunction(resolve);
- this.reject = aFunction(reject);
+ this.resolve = _aFunction(resolve);
+ this.reject = _aFunction(reject);
}
var f$5 = function (C) {
@@ -3387,13 +2692,6 @@ var _newPromiseCapability = {
f: f$5
};
-
-var _newPromiseCapability$1 = Object.freeze({
- default: _newPromiseCapability,
- __moduleExports: _newPromiseCapability,
- f: f$5
-});
-
var _perform = function (exec) {
try {
return { e: false, v: exec() };
@@ -3402,54 +2700,34 @@ var _perform = function (exec) {
}
};
-
-var _perform$1 = Object.freeze({
- default: _perform,
- __moduleExports: _perform
-});
-
-var newPromiseCapability = ( _newPromiseCapability$1 && _newPromiseCapability ) || _newPromiseCapability$1;
-
var _promiseResolve = function (C, x) {
- anObject(C);
- if (isObject(x) && x.constructor === C) return x;
- var promiseCapability = newPromiseCapability.f(C);
+ _anObject(C);
+ if (_isObject(x) && x.constructor === C) return x;
+ var promiseCapability = _newPromiseCapability.f(C);
var resolve = promiseCapability.resolve;
resolve(x);
return promiseCapability.promise;
};
-
-var _promiseResolve$1 = Object.freeze({
- default: _promiseResolve,
- __moduleExports: _promiseResolve
-});
-
-var require$$1$1 = ( _microtask$1 && _microtask ) || _microtask$1;
-
-var perform = ( _perform$1 && _perform ) || _perform$1;
-
-var promiseResolve = ( _promiseResolve$1 && _promiseResolve ) || _promiseResolve$1;
-
-var task = $task.set;
-var microtask = require$$1$1();
+var task = _task.set;
+var microtask = _microtask();
var PROMISE = 'Promise';
-var TypeError$1 = global$1.TypeError;
-var process$2 = global$1.process;
-var $Promise = global$1[PROMISE];
-var isNode$1 = classof(process$2) == 'process';
+var TypeError$1 = _global.TypeError;
+var process$2 = _global.process;
+var $Promise = _global[PROMISE];
+var isNode$1 = _classof(process$2) == 'process';
var empty = function () { /* empty */ };
var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;
-var newPromiseCapability$1 = newGenericPromiseCapability = newPromiseCapability.f;
+var newPromiseCapability = newGenericPromiseCapability = _newPromiseCapability.f;
var USE_NATIVE = !!function () {
try {
// correct subclassing with @@species support
var promise = $Promise.resolve(1);
- var FakePromise = (promise.constructor = {})[wks('species')] = function (exec) {
+ var FakePromise = (promise.constructor = {})[_wks('species')] = function (exec) {
exec(empty, empty);
};
// unhandled rejections tracking support, NodeJS Promise without it fails @@species test
@@ -3460,7 +2738,7 @@ var USE_NATIVE = !!function () {
// helpers
var isThenable = function (it) {
var then;
- return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
+ return _isObject(it) && typeof (then = it.then) == 'function' ? then : false;
};
var notify = function (promise, isReject) {
if (promise._n) return;
@@ -3505,17 +2783,17 @@ var notify = function (promise, isReject) {
});
};
var onUnhandled = function (promise) {
- task.call(global$1, function () {
+ task.call(_global, function () {
var value = promise._v;
var unhandled = isUnhandled(promise);
var result, handler, console;
if (unhandled) {
- result = perform(function () {
+ result = _perform(function () {
if (isNode$1) {
process$2.emit('unhandledRejection', value, promise);
- } else if (handler = global$1.onunhandledrejection) {
+ } else if (handler = _global.onunhandledrejection) {
handler({ promise: promise, reason: value });
- } else if ((console = global$1.console) && console.error) {
+ } else if ((console = _global.console) && console.error) {
console.error('Unhandled promise rejection', value);
}
});
@@ -3529,11 +2807,11 @@ var isUnhandled = function (promise) {
return promise._h !== 1 && (promise._a || promise._c).length === 0;
};
var onHandleUnhandled = function (promise) {
- task.call(global$1, function () {
+ task.call(_global, function () {
var handler;
if (isNode$1) {
process$2.emit('rejectionHandled', promise);
- } else if (handler = global$1.onrejectionhandled) {
+ } else if (handler = _global.onrejectionhandled) {
handler({ promise: promise, reason: promise._v });
}
});
@@ -3560,7 +2838,7 @@ var $resolve = function (value) {
microtask(function () {
var wrapper = { _w: promise, _d: false }; // wrap
try {
- then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
+ then.call(value, _ctx($resolve, wrapper, 1), _ctx($reject, wrapper, 1));
} catch (e) {
$reject.call(wrapper, e);
}
@@ -3579,11 +2857,11 @@ var $resolve = function (value) {
if (!USE_NATIVE) {
// 25.4.3.1 Promise(executor)
$Promise = function Promise(executor) {
- anInstance(this, $Promise, PROMISE, '_h');
- aFunction(executor);
+ _anInstance(this, $Promise, PROMISE, '_h');
+ _aFunction(executor);
Internal.call(this);
try {
- executor(ctx($resolve, this, 1), ctx($reject, this, 1));
+ executor(_ctx($resolve, this, 1), _ctx($reject, this, 1));
} catch (err) {
$reject.call(this, err);
}
@@ -3598,10 +2876,10 @@ if (!USE_NATIVE) {
this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
this._n = false; // <- notify
};
- Internal.prototype = require$$3($Promise.prototype, {
+ Internal.prototype = _redefineAll($Promise.prototype, {
// 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
then: function then(onFulfilled, onRejected) {
- var reaction = newPromiseCapability$1(speciesConstructor(this, $Promise));
+ var reaction = newPromiseCapability(_speciesConstructor(this, $Promise));
reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
reaction.fail = typeof onRejected == 'function' && onRejected;
reaction.domain = isNode$1 ? process$2.domain : undefined;
@@ -3618,51 +2896,51 @@ if (!USE_NATIVE) {
OwnPromiseCapability = function () {
var promise = new Internal();
this.promise = promise;
- this.resolve = ctx($resolve, promise, 1);
- this.reject = ctx($reject, promise, 1);
+ this.resolve = _ctx($resolve, promise, 1);
+ this.reject = _ctx($reject, promise, 1);
};
- newPromiseCapability.f = newPromiseCapability$1 = function (C) {
+ _newPromiseCapability.f = newPromiseCapability = function (C) {
return C === $Promise || C === Wrapper
? new OwnPromiseCapability(C)
: newGenericPromiseCapability(C);
};
}
-$export$1($export$1.G + $export$1.W + $export$1.F * !USE_NATIVE, { Promise: $Promise });
-setToStringTag($Promise, PROMISE);
-require$$5$1(PROMISE);
-Wrapper = core[PROMISE];
+_export(_export.G + _export.W + _export.F * !USE_NATIVE, { Promise: $Promise });
+_setToStringTag($Promise, PROMISE);
+_setSpecies(PROMISE);
+Wrapper = _core[PROMISE];
// statics
-$export$1($export$1.S + $export$1.F * !USE_NATIVE, PROMISE, {
+_export(_export.S + _export.F * !USE_NATIVE, PROMISE, {
// 25.4.4.5 Promise.reject(r)
reject: function reject(r) {
- var capability = newPromiseCapability$1(this);
+ var capability = newPromiseCapability(this);
var $$reject = capability.reject;
$$reject(r);
return capability.promise;
}
});
-$export$1($export$1.S + $export$1.F * (LIBRARY || !USE_NATIVE), PROMISE, {
+_export(_export.S + _export.F * (_library || !USE_NATIVE), PROMISE, {
// 25.4.4.6 Promise.resolve(x)
resolve: function resolve(x) {
- return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
+ return _promiseResolve(_library && this === Wrapper ? $Promise : this, x);
}
});
-$export$1($export$1.S + $export$1.F * !(USE_NATIVE && require$$0$8(function (iter) {
+_export(_export.S + _export.F * !(USE_NATIVE && _iterDetect(function (iter) {
$Promise.all(iter)['catch'](empty);
})), PROMISE, {
// 25.4.4.1 Promise.all(iterable)
all: function all(iterable) {
var C = this;
- var capability = newPromiseCapability$1(C);
+ var capability = newPromiseCapability(C);
var resolve = capability.resolve;
var reject = capability.reject;
- var result = perform(function () {
+ var result = _perform(function () {
var values = [];
var index = 0;
var remaining = 1;
- forOf(iterable, false, function (promise) {
+ _forOf(iterable, false, function (promise) {
var $index = index++;
var alreadyCalled = false;
values.push(undefined);
@@ -3682,10 +2960,10 @@ $export$1($export$1.S + $export$1.F * !(USE_NATIVE && require$$0$8(function (ite
// 25.4.4.4 Promise.race(iterable)
race: function race(iterable) {
var C = this;
- var capability = newPromiseCapability$1(C);
+ var capability = newPromiseCapability(C);
var reject = capability.reject;
- var result = perform(function () {
- forOf(iterable, false, function (promise) {
+ var result = _perform(function () {
+ _forOf(iterable, false, function (promise) {
C.resolve(promise).then(capability.resolve, reject);
});
});
@@ -3694,58 +2972,37 @@ $export$1($export$1.S + $export$1.F * !(USE_NATIVE && require$$0$8(function (ite
}
});
-var f$6 = wks;
+var f$6 = _wks;
var _wksExt = {
f: f$6
};
-
-var _wksExt$1 = Object.freeze({
- default: _wksExt,
- __moduleExports: _wksExt,
- f: f$6
-});
-
-var wksExt = ( _wksExt$1 && _wksExt ) || _wksExt$1;
-
-var defineProperty = $defineProperty.f;
+var defineProperty = _objectDp.f;
var _wksDefine = function (name) {
- var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global$1.Symbol || {});
- if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
+ var $Symbol = _core.Symbol || (_core.Symbol = _library ? {} : _global.Symbol || {});
+ if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: _wksExt.f(name) });
};
-
-var _wksDefine$1 = Object.freeze({
- default: _wksDefine,
- __moduleExports: _wksDefine
-});
-
// all enumerable object keys, includes symbols
var _enumKeys = function (it) {
- var result = getKeys(it);
- var getSymbols = gOPS.f;
+ var result = _objectKeys(it);
+ var getSymbols = _objectGops.f;
if (getSymbols) {
var symbols = getSymbols(it);
- var isEnum = require$$0$6.f;
+ var isEnum = _objectPie.f;
var i = 0;
var key;
while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
} return result;
};
-
-var _enumKeys$1 = Object.freeze({
- default: _enumKeys,
- __moduleExports: _enumKeys
-});
-
// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
-var gOPN = require$$0$4.f;
+var gOPN = _objectGopn.f;
var toString$1 = {}.toString;
var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
@@ -3760,33 +3017,20 @@ var getWindowNames = function (it) {
};
var f$7 = function getOwnPropertyNames(it) {
- return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+ return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(_toIobject(it));
};
var _objectGopnExt = {
f: f$7
};
-
-var _objectGopnExt$1 = Object.freeze({
- default: _objectGopnExt,
- __moduleExports: _objectGopnExt,
- f: f$7
-});
-
-var wksDefine = ( _wksDefine$1 && _wksDefine ) || _wksDefine$1;
-
-var enumKeys = ( _enumKeys$1 && _enumKeys ) || _enumKeys$1;
-
-var require$$1$2 = ( _objectGopnExt$1 && _objectGopnExt ) || _objectGopnExt$1;
-
// ECMAScript 6 symbols shim
-var META = require$$0$11.KEY;
+var META = _meta.KEY;
@@ -3806,39 +3050,39 @@ var META = require$$0$11.KEY;
-var gOPD$3 = gOPD$1.f;
-var dP$2 = $defineProperty.f;
-var gOPN$1 = require$$1$2.f;
-var $Symbol = global$1.Symbol;
-var $JSON = global$1.JSON;
+var gOPD$2 = _objectGopd.f;
+var dP$2 = _objectDp.f;
+var gOPN$1 = _objectGopnExt.f;
+var $Symbol = _global.Symbol;
+var $JSON = _global.JSON;
var _stringify = $JSON && $JSON.stringify;
var PROTOTYPE$2 = 'prototype';
-var HIDDEN = wks('_hidden');
-var TO_PRIMITIVE = wks('toPrimitive');
+var HIDDEN = _wks('_hidden');
+var TO_PRIMITIVE = _wks('toPrimitive');
var isEnum = {}.propertyIsEnumerable;
-var SymbolRegistry = shared('symbol-registry');
-var AllSymbols = shared('symbols');
-var OPSymbols = shared('op-symbols');
+var SymbolRegistry = _shared('symbol-registry');
+var AllSymbols = _shared('symbols');
+var OPSymbols = _shared('op-symbols');
var ObjectProto$1 = Object[PROTOTYPE$2];
var USE_NATIVE$1 = typeof $Symbol == 'function';
-var QObject = global$1.QObject;
+var QObject = _global.QObject;
// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
var setter = !QObject || !QObject[PROTOTYPE$2] || !QObject[PROTOTYPE$2].findChild;
// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
-var setSymbolDesc = require$$0$1 && require$$0(function () {
- return _create(dP$2({}, 'a', {
+var setSymbolDesc = _descriptors && _fails(function () {
+ return _objectCreate(dP$2({}, 'a', {
get: function () { return dP$2(this, 'a', { value: 7 }).a; }
})).a != 7;
}) ? function (it, key, D) {
- var protoDesc = gOPD$3(ObjectProto$1, key);
+ var protoDesc = gOPD$2(ObjectProto$1, key);
if (protoDesc) delete ObjectProto$1[key];
dP$2(it, key, D);
if (protoDesc && it !== ObjectProto$1) dP$2(ObjectProto$1, key, protoDesc);
} : dP$2;
var wrap = function (tag) {
- var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE$2]);
+ var sym = AllSymbols[tag] = _objectCreate($Symbol[PROTOTYPE$2]);
sym._k = tag;
return sym;
};
@@ -3849,63 +3093,63 @@ var isSymbol = USE_NATIVE$1 && typeof $Symbol.iterator == 'symbol' ? function (i
return it instanceof $Symbol;
};
-var $defineProperty$1 = function defineProperty(it, key, D) {
- if (it === ObjectProto$1) $defineProperty$1(OPSymbols, key, D);
- anObject(it);
- key = toPrimitive(key, true);
- anObject(D);
- if (has(AllSymbols, key)) {
+var $defineProperty = function defineProperty(it, key, D) {
+ if (it === ObjectProto$1) $defineProperty(OPSymbols, key, D);
+ _anObject(it);
+ key = _toPrimitive(key, true);
+ _anObject(D);
+ if (_has(AllSymbols, key)) {
if (!D.enumerable) {
- if (!has(it, HIDDEN)) dP$2(it, HIDDEN, createDesc(1, {}));
+ if (!_has(it, HIDDEN)) dP$2(it, HIDDEN, _propertyDesc(1, {}));
it[HIDDEN][key] = true;
} else {
- if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
- D = _create(D, { enumerable: createDesc(0, false) });
+ if (_has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
+ D = _objectCreate(D, { enumerable: _propertyDesc(0, false) });
} return setSymbolDesc(it, key, D);
} return dP$2(it, key, D);
};
var $defineProperties = function defineProperties(it, P) {
- anObject(it);
- var keys = enumKeys(P = toIObject(P));
+ _anObject(it);
+ var keys = _enumKeys(P = _toIobject(P));
var i = 0;
var l = keys.length;
var key;
- while (l > i) $defineProperty$1(it, key = keys[i++], P[key]);
+ while (l > i) $defineProperty(it, key = keys[i++], P[key]);
return it;
};
var $create = function create(it, P) {
- return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+ return P === undefined ? _objectCreate(it) : $defineProperties(_objectCreate(it), P);
};
var $propertyIsEnumerable = function propertyIsEnumerable(key) {
- var E = isEnum.call(this, key = toPrimitive(key, true));
- if (this === ObjectProto$1 && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
- return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+ var E = isEnum.call(this, key = _toPrimitive(key, true));
+ if (this === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return false;
+ return E || !_has(this, key) || !_has(AllSymbols, key) || _has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
};
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
- it = toIObject(it);
- key = toPrimitive(key, true);
- if (it === ObjectProto$1 && has(AllSymbols, key) && !has(OPSymbols, key)) return;
- var D = gOPD$3(it, key);
- if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
+ it = _toIobject(it);
+ key = _toPrimitive(key, true);
+ if (it === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return;
+ var D = gOPD$2(it, key);
+ if (D && _has(AllSymbols, key) && !(_has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
return D;
};
var $getOwnPropertyNames = function getOwnPropertyNames(it) {
- var names = gOPN$1(toIObject(it));
+ var names = gOPN$1(_toIobject(it));
var result = [];
var i = 0;
var key;
while (names.length > i) {
- if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
+ if (!_has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
} return result;
};
var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
var IS_OP = it === ObjectProto$1;
- var names = gOPN$1(IS_OP ? OPSymbols : toIObject(it));
+ var names = gOPN$1(IS_OP ? OPSymbols : _toIobject(it));
var result = [];
var i = 0;
var key;
while (names.length > i) {
- if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto$1, key) : true)) result.push(AllSymbols[key]);
+ if (_has(AllSymbols, key = names[i++]) && (IS_OP ? _has(ObjectProto$1, key) : true)) result.push(AllSymbols[key]);
} return result;
};
@@ -3913,47 +3157,47 @@ var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
if (!USE_NATIVE$1) {
$Symbol = function Symbol() {
if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
- var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+ var tag = _uid(arguments.length > 0 ? arguments[0] : undefined);
var $set = function (value) {
if (this === ObjectProto$1) $set.call(OPSymbols, value);
- if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
- setSymbolDesc(this, tag, createDesc(1, value));
+ if (_has(this, HIDDEN) && _has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
+ setSymbolDesc(this, tag, _propertyDesc(1, value));
};
- if (require$$0$1 && setter) setSymbolDesc(ObjectProto$1, tag, { configurable: true, set: $set });
+ if (_descriptors && setter) setSymbolDesc(ObjectProto$1, tag, { configurable: true, set: $set });
return wrap(tag);
};
- redefine($Symbol[PROTOTYPE$2], 'toString', function toString() {
+ _redefine($Symbol[PROTOTYPE$2], 'toString', function toString() {
return this._k;
});
- gOPD$1.f = $getOwnPropertyDescriptor;
- $defineProperty.f = $defineProperty$1;
- require$$0$4.f = require$$1$2.f = $getOwnPropertyNames;
- require$$0$6.f = $propertyIsEnumerable;
- gOPS.f = $getOwnPropertySymbols;
+ _objectGopd.f = $getOwnPropertyDescriptor;
+ _objectDp.f = $defineProperty;
+ _objectGopn.f = _objectGopnExt.f = $getOwnPropertyNames;
+ _objectPie.f = $propertyIsEnumerable;
+ _objectGops.f = $getOwnPropertySymbols;
- if (require$$0$1 && !LIBRARY) {
- redefine(ObjectProto$1, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+ if (_descriptors && !_library) {
+ _redefine(ObjectProto$1, 'propertyIsEnumerable', $propertyIsEnumerable, true);
}
- wksExt.f = function (name) {
- return wrap(wks(name));
+ _wksExt.f = function (name) {
+ return wrap(_wks(name));
};
}
-$export$1($export$1.G + $export$1.W + $export$1.F * !USE_NATIVE$1, { Symbol: $Symbol });
+_export(_export.G + _export.W + _export.F * !USE_NATIVE$1, { Symbol: $Symbol });
for (var es6Symbols = (
// 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
-).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
+).split(','), j = 0; es6Symbols.length > j;)_wks(es6Symbols[j++]);
-for (var wellKnownSymbols = getKeys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
+for (var wellKnownSymbols = _objectKeys(_wks.store), k = 0; wellKnownSymbols.length > k;) _wksDefine(wellKnownSymbols[k++]);
-$export$1($export$1.S + $export$1.F * !USE_NATIVE$1, 'Symbol', {
+_export(_export.S + _export.F * !USE_NATIVE$1, 'Symbol', {
// 19.4.2.1 Symbol.for(key)
'for': function (key) {
- return has(SymbolRegistry, key += '')
+ return _has(SymbolRegistry, key += '')
? SymbolRegistry[key]
: SymbolRegistry[key] = $Symbol(key);
},
@@ -3966,11 +3210,11 @@ $export$1($export$1.S + $export$1.F * !USE_NATIVE$1, 'Symbol', {
useSimple: function () { setter = false; }
});
-$export$1($export$1.S + $export$1.F * !USE_NATIVE$1, 'Object', {
+_export(_export.S + _export.F * !USE_NATIVE$1, 'Object', {
// 19.1.2.2 Object.create(O [, Properties])
create: $create,
// 19.1.2.4 Object.defineProperty(O, P, Attributes)
- defineProperty: $defineProperty$1,
+ defineProperty: $defineProperty,
// 19.1.2.3 Object.defineProperties(O, Properties)
defineProperties: $defineProperties,
// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
@@ -3982,7 +3226,7 @@ $export$1($export$1.S + $export$1.F * !USE_NATIVE$1, 'Object', {
});
// 24.3.2 JSON.stringify(value [, replacer [, space]])
-$JSON && $export$1($export$1.S + $export$1.F * (!USE_NATIVE$1 || require$$0(function () {
+$JSON && _export(_export.S + _export.F * (!USE_NATIVE$1 || _fails(function () {
var S = $Symbol();
// MS Edge converts symbol values to JSON as {}
// WebKit converts symbol values to JSON as null
@@ -3995,8 +3239,8 @@ $JSON && $export$1($export$1.S + $export$1.F * (!USE_NATIVE$1 || require$$0(func
var replacer, $replacer;
while (arguments.length > i) args.push(arguments[i++]);
$replacer = replacer = args[1];
- if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
- if (!isArray(replacer)) replacer = function (key, value) {
+ if (!_isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
+ if (!_isArray(replacer)) replacer = function (key, value) {
if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
if (!isSymbol(value)) return value;
};
@@ -4006,97 +3250,89 @@ $JSON && $export$1($export$1.S + $export$1.F * (!USE_NATIVE$1 || require$$0(func
});
// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
-$Symbol[PROTOTYPE$2][TO_PRIMITIVE] || hide($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf);
+$Symbol[PROTOTYPE$2][TO_PRIMITIVE] || _hide($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf);
// 19.4.3.5 Symbol.prototype[@@toStringTag]
-setToStringTag($Symbol, 'Symbol');
+_setToStringTag($Symbol, 'Symbol');
// 20.2.1.9 Math[@@toStringTag]
-setToStringTag(Math, 'Math', true);
+_setToStringTag(Math, 'Math', true);
// 24.3.3 JSON[@@toStringTag]
-setToStringTag(global$1.JSON, 'JSON', true);
+_setToStringTag(_global.JSON, 'JSON', true);
// most Object methods by ES6 should accept primitives
var _objectSap = function (KEY, exec) {
- var fn = (core.Object || {})[KEY] || Object[KEY];
+ var fn = (_core.Object || {})[KEY] || Object[KEY];
var exp = {};
exp[KEY] = exec(fn);
- $export$1($export$1.S + $export$1.F * require$$0(function () { fn(1); }), 'Object', exp);
+ _export(_export.S + _export.F * _fails(function () { fn(1); }), 'Object', exp);
};
-
-var _objectSap$1 = Object.freeze({
- default: _objectSap,
- __moduleExports: _objectSap
-});
-
-var require$$0$14 = ( _objectSap$1 && _objectSap ) || _objectSap$1;
-
// 19.1.2.5 Object.freeze(O)
-var meta = require$$0$11.onFreeze;
+var meta = _meta.onFreeze;
-require$$0$14('freeze', function ($freeze) {
+_objectSap('freeze', function ($freeze) {
return function freeze(it) {
- return $freeze && isObject(it) ? $freeze(meta(it)) : it;
+ return $freeze && _isObject(it) ? $freeze(meta(it)) : it;
};
});
// 19.1.2.17 Object.seal(O)
-var meta$1 = require$$0$11.onFreeze;
+var meta$1 = _meta.onFreeze;
-require$$0$14('seal', function ($seal) {
+_objectSap('seal', function ($seal) {
return function seal(it) {
- return $seal && isObject(it) ? $seal(meta$1(it)) : it;
+ return $seal && _isObject(it) ? $seal(meta$1(it)) : it;
};
});
// 19.1.2.15 Object.preventExtensions(O)
-var meta$2 = require$$0$11.onFreeze;
+var meta$2 = _meta.onFreeze;
-require$$0$14('preventExtensions', function ($preventExtensions) {
+_objectSap('preventExtensions', function ($preventExtensions) {
return function preventExtensions(it) {
- return $preventExtensions && isObject(it) ? $preventExtensions(meta$2(it)) : it;
+ return $preventExtensions && _isObject(it) ? $preventExtensions(meta$2(it)) : it;
};
});
// 19.1.2.12 Object.isFrozen(O)
-require$$0$14('isFrozen', function ($isFrozen) {
+_objectSap('isFrozen', function ($isFrozen) {
return function isFrozen(it) {
- return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
+ return _isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
};
});
// 19.1.2.13 Object.isSealed(O)
-require$$0$14('isSealed', function ($isSealed) {
+_objectSap('isSealed', function ($isSealed) {
return function isSealed(it) {
- return isObject(it) ? $isSealed ? $isSealed(it) : false : true;
+ return _isObject(it) ? $isSealed ? $isSealed(it) : false : true;
};
});
// 19.1.2.11 Object.isExtensible(O)
-require$$0$14('isExtensible', function ($isExtensible) {
+_objectSap('isExtensible', function ($isExtensible) {
return function isExtensible(it) {
- return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
+ return _isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
};
});
// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
-var $getOwnPropertyDescriptor$1 = gOPD$1.f;
+var $getOwnPropertyDescriptor$1 = _objectGopd.f;
-require$$0$14('getOwnPropertyDescriptor', function () {
+_objectSap('getOwnPropertyDescriptor', function () {
return function getOwnPropertyDescriptor(it, key) {
- return $getOwnPropertyDescriptor$1(toIObject(it), key);
+ return $getOwnPropertyDescriptor$1(_toIobject(it), key);
};
});
@@ -4104,9 +3340,9 @@ require$$0$14('getOwnPropertyDescriptor', function () {
-require$$0$14('getPrototypeOf', function () {
+_objectSap('getPrototypeOf', function () {
return function getPrototypeOf(it) {
- return $getPrototypeOf(toObject(it));
+ return _objectGpo(_toObject(it));
};
});
@@ -4114,21 +3350,21 @@ require$$0$14('getPrototypeOf', function () {
-require$$0$14('keys', function () {
+_objectSap('keys', function () {
return function keys(it) {
- return getKeys(toObject(it));
+ return _objectKeys(_toObject(it));
};
});
// 19.1.2.7 Object.getOwnPropertyNames(O)
-require$$0$14('getOwnPropertyNames', function () {
- return require$$1$2.f;
+_objectSap('getOwnPropertyNames', function () {
+ return _objectGopnExt.f;
});
// 19.1.3.1 Object.assign(target, source)
-$export$1($export$1.S + $export$1.F, 'Object', { assign: require$$0$13 });
+_export(_export.S + _export.F, 'Object', { assign: _objectAssign });
// 7.2.9 SameValue(x, y)
var _sameValue = Object.is || function is(x, y) {
@@ -4136,25 +3372,17 @@ var _sameValue = Object.is || function is(x, y) {
return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
};
-
-var _sameValue$1 = Object.freeze({
- default: _sameValue,
- __moduleExports: _sameValue
-});
-
-var require$$0$15 = ( _sameValue$1 && _sameValue ) || _sameValue$1;
-
// 19.1.3.10 Object.is(value1, value2)
-$export$1($export$1.S, 'Object', { is: require$$0$15 });
+_export(_export.S, 'Object', { is: _sameValue });
-var dP$3 = $defineProperty.f;
+var dP$3 = _objectDp.f;
var FProto = Function.prototype;
var nameRE = /^\s*function ([^ (]*)/;
var NAME = 'name';
// 19.2.4.2 name
-NAME in FProto || require$$0$1 && dP$3(FProto, NAME, {
+NAME in FProto || _descriptors && dP$3(FProto, NAME, {
configurable: true,
get: function () {
try {
@@ -4165,11 +3393,11 @@ NAME in FProto || require$$0$1 && dP$3(FProto, NAME, {
}
});
-$export$1($export$1.S, 'String', {
+_export(_export.S, 'String', {
// 21.1.2.4 String.raw(callSite, ...substitutions)
raw: function raw(callSite) {
- var tpl = toIObject(callSite.raw);
- var len = toLength(tpl.length);
+ var tpl = _toIobject(callSite.raw);
+ var len = _toLength(tpl.length);
var aLen = arguments.length;
var res = [];
var i = 0;
@@ -4184,7 +3412,7 @@ var fromCharCode = String.fromCharCode;
var $fromCodePoint = String.fromCodePoint;
// length should be 1, old FF problem
-$export$1($export$1.S + $export$1.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
+_export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
// 21.1.2.2 String.fromCodePoint(...codePoints)
fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars
var res = [];
@@ -4193,7 +3421,7 @@ $export$1($export$1.S + $export$1.F * (!!$fromCodePoint && $fromCodePoint.length
var code;
while (aLen > i) {
code = +arguments[i++];
- if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
+ if (_toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
res.push(code < 0x10000
? fromCharCode(code)
: fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
@@ -4206,8 +3434,8 @@ $export$1($export$1.S + $export$1.F * (!!$fromCodePoint && $fromCodePoint.length
// false -> String#codePointAt
var _stringAt = function (TO_STRING) {
return function (that, pos) {
- var s = String(defined(that));
- var i = toInteger(pos);
+ var s = String(_defined(that));
+ var i = _toInteger(pos);
var l = s.length;
var a, b;
if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
@@ -4218,16 +3446,8 @@ var _stringAt = function (TO_STRING) {
};
};
-
-var _stringAt$1 = Object.freeze({
- default: _stringAt,
- __moduleExports: _stringAt
-});
-
-var require$$0$16 = ( _stringAt$1 && _stringAt ) || _stringAt$1;
-
-var $at = require$$0$16(false);
-$export$1($export$1.P, 'String', {
+var $at = _stringAt(false);
+_export(_export.P, 'String', {
// 21.1.3.3 String.prototype.codePointAt(pos)
codePointAt: function codePointAt(pos) {
return $at(this, pos);
@@ -4235,60 +3455,38 @@ $export$1($export$1.P, 'String', {
});
var _stringRepeat = function repeat(count) {
- var str = String(defined(this));
+ var str = String(_defined(this));
var res = '';
- var n = toInteger(count);
+ var n = _toInteger(count);
if (n < 0 || n == Infinity) throw RangeError("Count can't be negative");
for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;
return res;
};
-
-var _stringRepeat$1 = Object.freeze({
- default: _stringRepeat,
- __moduleExports: _stringRepeat
-});
-
-var repeat = ( _stringRepeat$1 && _stringRepeat ) || _stringRepeat$1;
-
-$export$1($export$1.P, 'String', {
+_export(_export.P, 'String', {
// 21.1.3.13 String.prototype.repeat(count)
- repeat: repeat
+ repeat: _stringRepeat
});
// 7.2.8 IsRegExp(argument)
-var MATCH = wks('match');
+var MATCH = _wks('match');
var _isRegexp = function (it) {
var isRegExp;
- return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
+ return _isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : _cof(it) == 'RegExp');
};
-
-var _isRegexp$1 = Object.freeze({
- default: _isRegexp,
- __moduleExports: _isRegexp
-});
-
-var require$$1$3 = ( _isRegexp$1 && _isRegexp ) || _isRegexp$1;
-
// helper for String#{startsWith, endsWith, includes}
var _stringContext = function (that, searchString, NAME) {
- if (require$$1$3(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
- return String(defined(that));
+ if (_isRegexp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
+ return String(_defined(that));
};
-
-var _stringContext$1 = Object.freeze({
- default: _stringContext,
- __moduleExports: _stringContext
-});
-
-var MATCH$1 = wks('match');
+var MATCH$1 = _wks('match');
var _failsIsRegexp = function (KEY) {
var re = /./;
try {
@@ -4301,23 +3499,13 @@ var _failsIsRegexp = function (KEY) {
} return true;
};
-
-var _failsIsRegexp$1 = Object.freeze({
- default: _failsIsRegexp,
- __moduleExports: _failsIsRegexp
-});
-
-var context = ( _stringContext$1 && _stringContext ) || _stringContext$1;
-
-var require$$0$17 = ( _failsIsRegexp$1 && _failsIsRegexp ) || _failsIsRegexp$1;
-
var STARTS_WITH = 'startsWith';
var $startsWith = ''[STARTS_WITH];
-$export$1($export$1.P + $export$1.F * require$$0$17(STARTS_WITH), 'String', {
+_export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {
startsWith: function startsWith(searchString /* , position = 0 */) {
- var that = context(this, searchString, STARTS_WITH);
- var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
+ var that = _stringContext(this, searchString, STARTS_WITH);
+ var index = _toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
var search = String(searchString);
return $startsWith
? $startsWith.call(that, search, index)
@@ -4328,12 +3516,12 @@ $export$1($export$1.P + $export$1.F * require$$0$17(STARTS_WITH), 'String', {
var ENDS_WITH = 'endsWith';
var $endsWith = ''[ENDS_WITH];
-$export$1($export$1.P + $export$1.F * require$$0$17(ENDS_WITH), 'String', {
+_export(_export.P + _export.F * _failsIsRegexp(ENDS_WITH), 'String', {
endsWith: function endsWith(searchString /* , endPosition = @length */) {
- var that = context(this, searchString, ENDS_WITH);
+ var that = _stringContext(this, searchString, ENDS_WITH);
var endPosition = arguments.length > 1 ? arguments[1] : undefined;
- var len = toLength(that.length);
- var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);
+ var len = _toLength(that.length);
+ var end = endPosition === undefined ? len : Math.min(_toLength(endPosition), len);
var search = String(searchString);
return $endsWith
? $endsWith.call(that, search, end)
@@ -4343,9 +3531,9 @@ $export$1($export$1.P + $export$1.F * require$$0$17(ENDS_WITH), 'String', {
var INCLUDES = 'includes';
-$export$1($export$1.P + $export$1.F * require$$0$17(INCLUDES), 'String', {
+_export(_export.P + _export.F * _failsIsRegexp(INCLUDES), 'String', {
includes: function includes(searchString /* , position = 0 */) {
- return !!~context(this, searchString, INCLUDES)
+ return !!~_stringContext(this, searchString, INCLUDES)
.indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
}
});
@@ -4353,7 +3541,7 @@ $export$1($export$1.P + $export$1.F * require$$0$17(INCLUDES), 'String', {
// 21.2.5.3 get RegExp.prototype.flags
var _flags = function () {
- var that = anObject(this);
+ var that = _anObject(this);
var result = '';
if (that.global) result += 'g';
if (that.ignoreCase) result += 'i';
@@ -4363,32 +3551,24 @@ var _flags = function () {
return result;
};
-
-var _flags$1 = Object.freeze({
- default: _flags,
- __moduleExports: _flags
-});
-
-var require$$2 = ( _flags$1 && _flags ) || _flags$1;
-
// 21.2.5.3 get RegExp.prototype.flags()
-if (require$$0$1 && /./g.flags != 'g') $defineProperty.f(RegExp.prototype, 'flags', {
+if (_descriptors && /./g.flags != 'g') _objectDp.f(RegExp.prototype, 'flags', {
configurable: true,
- get: require$$2
+ get: _flags
});
var _fixReWks = function (KEY, length, exec) {
- var SYMBOL = wks(KEY);
- var fns = exec(defined, SYMBOL, ''[KEY]);
+ var SYMBOL = _wks(KEY);
+ var fns = exec(_defined, SYMBOL, ''[KEY]);
var strfn = fns[0];
var rxfn = fns[1];
- if (require$$0(function () {
+ if (_fails(function () {
var O = {};
O[SYMBOL] = function () { return 7; };
return ''[KEY](O) != 7;
})) {
- redefine(String.prototype, KEY, strfn);
- hide(RegExp.prototype, SYMBOL, length == 2
+ _redefine(String.prototype, KEY, strfn);
+ _hide(RegExp.prototype, SYMBOL, length == 2
// 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
// 21.2.5.11 RegExp.prototype[@@split](string, limit)
? function (string, arg) { return rxfn.call(string, this, arg); }
@@ -4399,16 +3579,8 @@ var _fixReWks = function (KEY, length, exec) {
}
};
-
-var _fixReWks$1 = Object.freeze({
- default: _fixReWks,
- __moduleExports: _fixReWks
-});
-
-var require$$0$18 = ( _fixReWks$1 && _fixReWks ) || _fixReWks$1;
-
// @@match logic
-require$$0$18('match', 1, function (defined, MATCH, $match) {
+_fixReWks('match', 1, function (defined, MATCH, $match) {
// 21.1.3.11 String.prototype.match(regexp)
return [function match(regexp) {
var O = defined(this);
@@ -4418,7 +3590,7 @@ require$$0$18('match', 1, function (defined, MATCH, $match) {
});
// @@replace logic
-require$$0$18('replace', 2, function (defined, REPLACE, $replace) {
+_fixReWks('replace', 2, function (defined, REPLACE, $replace) {
// 21.1.3.14 String.prototype.replace(searchValue, replaceValue)
return [function replace(searchValue, replaceValue) {
var O = defined(this);
@@ -4430,8 +3602,8 @@ require$$0$18('replace', 2, function (defined, REPLACE, $replace) {
});
// @@split logic
-require$$0$18('split', 2, function (defined, SPLIT, $split) {
- var isRegExp = require$$1$3;
+_fixReWks('split', 2, function (defined, SPLIT, $split) {
+ var isRegExp = _isRegexp;
var _split = $split;
var $push = [].push;
var $SPLIT = 'split';
@@ -4501,7 +3673,7 @@ require$$0$18('split', 2, function (defined, SPLIT, $split) {
});
// @@search logic
-require$$0$18('search', 1, function (defined, SEARCH, $search) {
+_fixReWks('search', 1, function (defined, SEARCH, $search) {
// 21.1.3.15 String.prototype.search(regexp)
return [function search(regexp) {
var O = defined(this);
@@ -4511,39 +3683,31 @@ require$$0$18('search', 1, function (defined, SEARCH, $search) {
});
var _createProperty = function (object, index, value) {
- if (index in object) $defineProperty.f(object, index, createDesc(0, value));
+ if (index in object) _objectDp.f(object, index, _propertyDesc(0, value));
else object[index] = value;
};
-
-var _createProperty$1 = Object.freeze({
- default: _createProperty,
- __moduleExports: _createProperty
-});
-
-var createProperty = ( _createProperty$1 && _createProperty ) || _createProperty$1;
-
-$export$1($export$1.S + $export$1.F * !require$$0$8(function (iter) { }), 'Array', {
+_export(_export.S + _export.F * !_iterDetect(function (iter) { }), 'Array', {
// 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
- var O = toObject(arrayLike);
+ var O = _toObject(arrayLike);
var C = typeof this == 'function' ? this : Array;
var aLen = arguments.length;
var mapfn = aLen > 1 ? arguments[1] : undefined;
var mapping = mapfn !== undefined;
var index = 0;
- var iterFn = getIterFn(O);
+ var iterFn = core_getIteratorMethod(O);
var length, result, step, iterator;
- if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
+ if (mapping) mapfn = _ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
// if object isn't iterable or it's array with default iterator - use simple case
- if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {
+ if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) {
for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
- createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
+ _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value);
}
} else {
- length = toLength(O.length);
+ length = _toLength(O.length);
for (result = new C(length); length > index; index++) {
- createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
+ _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
}
}
result.length = index;
@@ -4552,7 +3716,7 @@ $export$1($export$1.S + $export$1.F * !require$$0$8(function (iter) { }), 'Array
});
// WebKit Array.of isn't generic
-$export$1($export$1.S + $export$1.F * require$$0(function () {
+_export(_export.S + _export.F * _fails(function () {
function F() { /* empty */ }
return !(Array.of.call(F) instanceof F);
}), 'Array', {
@@ -4561,7 +3725,7 @@ $export$1($export$1.S + $export$1.F * require$$0(function () {
var index = 0;
var aLen = arguments.length;
var result = new (typeof this == 'function' ? this : Array)(aLen);
- while (aLen > index) createProperty(result, index, arguments[index++]);
+ while (aLen > index) _createProperty(result, index, arguments[index++]);
result.length = aLen;
return result;
}
@@ -4570,50 +3734,50 @@ $export$1($export$1.S + $export$1.F * require$$0(function () {
// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
-$export$1($export$1.P, 'Array', { copyWithin: require$$0$9 });
+_export(_export.P, 'Array', { copyWithin: _arrayCopyWithin });
-require$$1('copyWithin');
+_addToUnscopables('copyWithin');
// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)
-var $find = require$$0$7(5);
+var $find = _arrayMethods(5);
var KEY = 'find';
var forced = true;
// Shouldn't skip holes
if (KEY in []) Array(1)[KEY](function () { forced = false; });
-$export$1($export$1.P + $export$1.F * forced, 'Array', {
+_export(_export.P + _export.F * forced, 'Array', {
find: function find(callbackfn /* , that = undefined */) {
return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
-require$$1(KEY);
+_addToUnscopables(KEY);
// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)
-var $find$1 = require$$0$7(6);
+var $find$1 = _arrayMethods(6);
var KEY$1 = 'findIndex';
var forced$1 = true;
// Shouldn't skip holes
if (KEY$1 in []) Array(1)[KEY$1](function () { forced$1 = false; });
-$export$1($export$1.P + $export$1.F * forced$1, 'Array', {
+_export(_export.P + _export.F * forced$1, 'Array', {
findIndex: function findIndex(callbackfn /* , that = undefined */) {
return $find$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
-require$$1(KEY$1);
+_addToUnscopables(KEY$1);
// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
-$export$1($export$1.P, 'Array', { fill: require$$0$5 });
+_export(_export.P, 'Array', { fill: _arrayFill });
-require$$1('fill');
+_addToUnscopables('fill');
// 20.1.2.2 Number.isFinite(number)
-var _isFinite = global$1.isFinite;
+var _isFinite = _global.isFinite;
-$export$1($export$1.S, 'Number', {
+_export(_export.S, 'Number', {
isFinite: function isFinite(it) {
return typeof it == 'number' && _isFinite(it);
}
@@ -4623,37 +3787,29 @@ $export$1($export$1.S, 'Number', {
var floor$1 = Math.floor;
var _isInteger = function isInteger(it) {
- return !isObject(it) && isFinite(it) && floor$1(it) === it;
+ return !_isObject(it) && isFinite(it) && floor$1(it) === it;
};
-
-var _isInteger$1 = Object.freeze({
- default: _isInteger,
- __moduleExports: _isInteger
-});
-
-var isInteger = ( _isInteger$1 && _isInteger ) || _isInteger$1;
-
// 20.1.2.3 Number.isInteger(number)
-$export$1($export$1.S, 'Number', { isInteger: isInteger });
+_export(_export.S, 'Number', { isInteger: _isInteger });
// 20.1.2.5 Number.isSafeInteger(number)
var abs = Math.abs;
-$export$1($export$1.S, 'Number', {
+_export(_export.S, 'Number', {
isSafeInteger: function isSafeInteger(number) {
- return isInteger(number) && abs(number) <= 0x1fffffffffffff;
+ return _isInteger(number) && abs(number) <= 0x1fffffffffffff;
}
});
// 20.1.2.4 Number.isNaN(number)
-$export$1($export$1.S, 'Number', {
+_export(_export.S, 'Number', {
isNaN: function isNaN(number) {
// eslint-disable-next-line no-self-compare
return number != number;
@@ -4663,38 +3819,30 @@ $export$1($export$1.S, 'Number', {
// 20.1.2.1 Number.EPSILON
-$export$1($export$1.S, 'Number', { EPSILON: Math.pow(2, -52) });
+_export(_export.S, 'Number', { EPSILON: Math.pow(2, -52) });
// 20.1.2.10 Number.MIN_SAFE_INTEGER
-$export$1($export$1.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });
+_export(_export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });
// 20.1.2.6 Number.MAX_SAFE_INTEGER
-$export$1($export$1.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });
+_export(_export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });
// 20.2.2.20 Math.log1p(x)
var _mathLog1p = Math.log1p || function log1p(x) {
return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
};
-
-var _mathLog1p$1 = Object.freeze({
- default: _mathLog1p,
- __moduleExports: _mathLog1p
-});
-
-var require$$0$19 = ( _mathLog1p$1 && _mathLog1p ) || _mathLog1p$1;
-
// 20.2.2.3 Math.acosh(x)
var sqrt = Math.sqrt;
var $acosh = Math.acosh;
-$export$1($export$1.S + $export$1.F * !($acosh
+_export(_export.S + _export.F * !($acosh
// V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
&& Math.floor($acosh(Number.MAX_VALUE)) == 710
// Tor Browser bug: Math.acosh(Infinity) -> NaN
@@ -4703,7 +3851,7 @@ $export$1($export$1.S + $export$1.F * !($acosh
acosh: function acosh(x) {
return (x = +x) < 1 ? NaN : x > 94906265.62425156
? Math.log(x) + Math.LN2
- : require$$0$19(x - 1 + sqrt(x - 1) * sqrt(x + 1));
+ : _mathLog1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
}
});
@@ -4716,14 +3864,14 @@ function asinh(x) {
}
// Tor Browser bug: Math.asinh(0) -> -0
-$export$1($export$1.S + $export$1.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });
+_export(_export.S + _export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });
// 20.2.2.7 Math.atanh(x)
var $atanh = Math.atanh;
// Tor Browser bug: Math.atanh(-0) -> 0
-$export$1($export$1.S + $export$1.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
+_export(_export.S + _export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
atanh: function atanh(x) {
return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
}
@@ -4735,28 +3883,20 @@ var _mathSign = Math.sign || function sign(x) {
return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
};
-
-var _mathSign$1 = Object.freeze({
- default: _mathSign,
- __moduleExports: _mathSign
-});
-
-var require$$0$20 = ( _mathSign$1 && _mathSign ) || _mathSign$1;
-
// 20.2.2.9 Math.cbrt(x)
-$export$1($export$1.S, 'Math', {
+_export(_export.S, 'Math', {
cbrt: function cbrt(x) {
- return require$$0$20(x = +x) * Math.pow(Math.abs(x), 1 / 3);
+ return _mathSign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
}
});
// 20.2.2.11 Math.clz32(x)
-$export$1($export$1.S, 'Math', {
+_export(_export.S, 'Math', {
clz32: function clz32(x) {
return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
}
@@ -4766,7 +3906,7 @@ $export$1($export$1.S, 'Math', {
var exp = Math.exp;
-$export$1($export$1.S, 'Math', {
+_export(_export.S, 'Math', {
cosh: function cosh(x) {
return (exp(x = +x) + exp(-x)) / 2;
}
@@ -4783,19 +3923,11 @@ var _mathExpm1 = (!$expm1
return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
} : $expm1;
-
-var _mathExpm1$1 = Object.freeze({
- default: _mathExpm1,
- __moduleExports: _mathExpm1
-});
-
-var expm1 = ( _mathExpm1$1 && _mathExpm1 ) || _mathExpm1$1;
-
// 20.2.2.14 Math.expm1(x)
-$export$1($export$1.S + $export$1.F * (expm1 != Math.expm1), 'Math', { expm1: expm1 });
+_export(_export.S + _export.F * (_mathExpm1 != Math.expm1), 'Math', { expm1: _mathExpm1 });
// 20.2.2.16 Math.fround(x)
@@ -4811,7 +3943,7 @@ var roundTiesToEven = function (n) {
var _mathFround = Math.fround || function fround(x) {
var $abs = Math.abs(x);
- var $sign = require$$0$20(x);
+ var $sign = _mathSign(x);
var a, result;
if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
a = (1 + EPSILON32 / EPSILON) * $abs;
@@ -4821,24 +3953,16 @@ var _mathFround = Math.fround || function fround(x) {
return $sign * result;
};
-
-var _mathFround$1 = Object.freeze({
- default: _mathFround,
- __moduleExports: _mathFround
-});
-
-var require$$0$21 = ( _mathFround$1 && _mathFround ) || _mathFround$1;
-
// 20.2.2.16 Math.fround(x)
-$export$1($export$1.S, 'Math', { fround: require$$0$21 });
+_export(_export.S, 'Math', { fround: _mathFround });
// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
var abs$1 = Math.abs;
-$export$1($export$1.S, 'Math', {
+_export(_export.S, 'Math', {
hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars
var sum = 0;
var i = 0;
@@ -4865,7 +3989,7 @@ $export$1($export$1.S, 'Math', {
var $imul = Math.imul;
// some WebKit versions fails with big numbers, some has wrong arity
-$export$1($export$1.S + $export$1.F * require$$0(function () {
+_export(_export.S + _export.F * _fails(function () {
return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
}), 'Math', {
imul: function imul(x, y) {
@@ -4881,12 +4005,12 @@ $export$1($export$1.S + $export$1.F * require$$0(function () {
// 20.2.2.20 Math.log1p(x)
-$export$1($export$1.S, 'Math', { log1p: require$$0$19 });
+_export(_export.S, 'Math', { log1p: _mathLog1p });
// 20.2.2.21 Math.log10(x)
-$export$1($export$1.S, 'Math', {
+_export(_export.S, 'Math', {
log10: function log10(x) {
return Math.log(x) * Math.LOG10E;
}
@@ -4895,7 +4019,7 @@ $export$1($export$1.S, 'Math', {
// 20.2.2.22 Math.log2(x)
-$export$1($export$1.S, 'Math', {
+_export(_export.S, 'Math', {
log2: function log2(x) {
return Math.log(x) / Math.LN2;
}
@@ -4904,7 +4028,7 @@ $export$1($export$1.S, 'Math', {
// 20.2.2.28 Math.sign(x)
-$export$1($export$1.S, 'Math', { sign: require$$0$20 });
+_export(_export.S, 'Math', { sign: _mathSign });
// 20.2.2.30 Math.sinh(x)
@@ -4912,12 +4036,12 @@ $export$1($export$1.S, 'Math', { sign: require$$0$20 });
var exp$1 = Math.exp;
// V8 near Chromium 38 has a problem with very small numbers
-$export$1($export$1.S + $export$1.F * require$$0(function () {
+_export(_export.S + _export.F * _fails(function () {
return !Math.sinh(-2e-17) != -2e-17;
}), 'Math', {
sinh: function sinh(x) {
return Math.abs(x = +x) < 1
- ? (expm1(x) - expm1(-x)) / 2
+ ? (_mathExpm1(x) - _mathExpm1(-x)) / 2
: (exp$1(x - 1) - exp$1(-x - 1)) * (Math.E / 2);
}
});
@@ -4927,10 +4051,10 @@ $export$1($export$1.S + $export$1.F * require$$0(function () {
var exp$2 = Math.exp;
-$export$1($export$1.S, 'Math', {
+_export(_export.S, 'Math', {
tanh: function tanh(x) {
- var a = expm1(x = +x);
- var b = expm1(-x);
+ var a = _mathExpm1(x = +x);
+ var b = _mathExpm1(-x);
return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp$2(x) + exp$2(-x));
}
});
@@ -4938,7 +4062,7 @@ $export$1($export$1.S, 'Math', {
// 20.2.2.34 Math.trunc(x)
-$export$1($export$1.S, 'Math', {
+_export(_export.S, 'Math', {
trunc: function trunc(it) {
return (it > 0 ? Math.floor : Math.ceil)(it);
}
@@ -4946,21 +4070,21 @@ $export$1($export$1.S, 'Math', {
// https://github.com/tc39/Array.prototype.includes
-var $includes = require$$0$2(true);
+var $includes = _arrayIncludes(true);
-$export$1($export$1.P, 'Array', {
+_export(_export.P, 'Array', {
includes: function includes(el /* , fromIndex = 0 */) {
return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
}
});
-require$$1('includes');
+_addToUnscopables('includes');
-var isEnum$1 = require$$0$6.f;
+var isEnum$1 = _objectPie.f;
var _objectToArray = function (isEntries) {
return function (it) {
- var O = toIObject(it);
- var keys = getKeys(O);
+ var O = _toIobject(it);
+ var keys = _objectKeys(O);
var length = keys.length;
var i = 0;
var result = [];
@@ -4971,19 +4095,11 @@ var _objectToArray = function (isEntries) {
};
};
-
-var _objectToArray$1 = Object.freeze({
- default: _objectToArray,
- __moduleExports: _objectToArray
-});
-
-var require$$0$22 = ( _objectToArray$1 && _objectToArray ) || _objectToArray$1;
-
// https://github.com/tc39/proposal-object-values-entries
-var $values = require$$0$22(false);
+var $values = _objectToArray(false);
-$export$1($export$1.S, 'Object', {
+_export(_export.S, 'Object', {
values: function values(it) {
return $values(it);
}
@@ -4991,9 +4107,9 @@ $export$1($export$1.S, 'Object', {
// https://github.com/tc39/proposal-object-values-entries
-var $entries = require$$0$22(true);
+var $entries = _objectToArray(true);
-$export$1($export$1.S, 'Object', {
+_export(_export.S, 'Object', {
entries: function entries(it) {
return $entries(it);
}
@@ -5006,17 +4122,17 @@ $export$1($export$1.S, 'Object', {
-$export$1($export$1.S, 'Object', {
+_export(_export.S, 'Object', {
getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
- var O = toIObject(object);
- var getDesc = gOPD$1.f;
- var keys = ownKeys(O);
+ var O = _toIobject(object);
+ var getDesc = _objectGopd.f;
+ var keys = _ownKeys(O);
var result = {};
var i = 0;
var key, desc;
while (keys.length > i) {
desc = getDesc(O, key = keys[i++]);
- if (desc !== undefined) createProperty(result, key, desc);
+ if (desc !== undefined) _createProperty(result, key, desc);
}
return result;
}
@@ -5028,46 +4144,30 @@ $export$1($export$1.S, 'Object', {
var _stringPad = function (that, maxLength, fillString, left) {
- var S = String(defined(that));
+ var S = String(_defined(that));
var stringLength = S.length;
var fillStr = fillString === undefined ? ' ' : String(fillString);
- var intMaxLength = toLength(maxLength);
+ var intMaxLength = _toLength(maxLength);
if (intMaxLength <= stringLength || fillStr == '') return S;
var fillLen = intMaxLength - stringLength;
- var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
+ var stringFiller = _stringRepeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
return left ? stringFiller + S : S + stringFiller;
};
-
-var _stringPad$1 = Object.freeze({
- default: _stringPad,
- __moduleExports: _stringPad
-});
-
-var navigator$1 = global$1.navigator;
+var navigator$1 = _global.navigator;
var _userAgent = navigator$1 && navigator$1.userAgent || '';
-
-var _userAgent$1 = Object.freeze({
- default: _userAgent,
- __moduleExports: _userAgent
-});
-
-var $pad = ( _stringPad$1 && _stringPad ) || _stringPad$1;
-
-var userAgent = ( _userAgent$1 && _userAgent ) || _userAgent$1;
-
// https://github.com/tc39/proposal-string-pad-start-end
// https://github.com/zloirock/core-js/issues/280
-$export$1($export$1.P + $export$1.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', {
+_export(_export.P + _export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(_userAgent), 'String', {
padStart: function padStart(maxLength /* , fillString = ' ' */) {
- return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
+ return _stringPad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
}
});
@@ -5077,9 +4177,9 @@ $export$1($export$1.P + $export$1.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(u
// https://github.com/zloirock/core-js/issues/280
-$export$1($export$1.P + $export$1.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', {
+_export(_export.P + _export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(_userAgent), 'String', {
padEnd: function padEnd(maxLength /* , fillString = ' ' */) {
- return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
+ return _stringPad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
}
});
@@ -5088,7 +4188,7 @@ $export$1($export$1.P + $export$1.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(u
var slice = [].slice;
-var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
+var MSIE = /MSIE .\./.test(_userAgent); // <- dirty ie9- check
var wrap$1 = function (set) {
return function (fn, time /* , ...args */) {
var boundArgs = arguments.length > 2;
@@ -5099,19 +4199,19 @@ var wrap$1 = function (set) {
} : fn, time);
};
};
-$export$1($export$1.G + $export$1.B + $export$1.F * MSIE, {
- setTimeout: wrap$1(global$1.setTimeout),
- setInterval: wrap$1(global$1.setInterval)
+_export(_export.G + _export.B + _export.F * MSIE, {
+ setTimeout: wrap$1(_global.setTimeout),
+ setInterval: wrap$1(_global.setInterval)
});
-$export$1($export$1.G + $export$1.B, {
- setImmediate: $task.set,
- clearImmediate: $task.clear
+_export(_export.G + _export.B, {
+ setImmediate: _task.set,
+ clearImmediate: _task.clear
});
-var ITERATOR$4 = wks('iterator');
-var TO_STRING_TAG = wks('toStringTag');
-var ArrayValues = Iterators.Array;
+var ITERATOR$4 = _wks('iterator');
+var TO_STRING_TAG = _wks('toStringTag');
+var ArrayValues = _iterators.Array;
var DOMIterables = {
CSSRuleList: true, // TODO: Not spec compliant, should be false.
@@ -5147,17 +4247,17 @@ var DOMIterables = {
TouchList: false
};
-for (var collections = getKeys(DOMIterables), i$1 = 0; i$1 < collections.length; i$1++) {
+for (var collections = _objectKeys(DOMIterables), i$1 = 0; i$1 < collections.length; i$1++) {
var NAME$1 = collections[i$1];
var explicit = DOMIterables[NAME$1];
- var Collection = global$1[NAME$1];
+ var Collection = _global[NAME$1];
var proto = Collection && Collection.prototype;
var key;
if (proto) {
- if (!proto[ITERATOR$4]) hide(proto, ITERATOR$4, ArrayValues);
- if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME$1);
- Iterators[NAME$1] = ArrayValues;
- if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
+ if (!proto[ITERATOR$4]) _hide(proto, ITERATOR$4, ArrayValues);
+ if (!proto[TO_STRING_TAG]) _hide(proto, TO_STRING_TAG, NAME$1);
+ _iterators[NAME$1] = ArrayValues;
+ if (explicit) for (key in es6_array_iterator) if (!proto[key]) _redefine(proto, key, es6_array_iterator[key], true);
}
}
@@ -5944,338 +5044,6 @@ try {
window.CustomEvent = CustomEvent$1; // expose definition to window
}
-// ==========================================================================
-// Plyr supported types and providers
-// ==========================================================================
-
-var providers = {
- html5: 'html5',
- youtube: 'youtube',
- vimeo: 'vimeo'
-};
-
-var types = {
- audio: 'audio',
- video: 'video'
-};
-
-// ==========================================================================
-// Plyr default config
-// ==========================================================================
-
-var defaults = {
- // Disable
- enabled: true,
-
- // Custom media title
- title: '',
-
- // Logging to console
- debug: false,
-
- // Auto play (if supported)
- autoplay: false,
-
- // Only allow one media playing at once (vimeo only)
- autopause: true,
-
- // Default time to skip when rewind/fast forward
- seekTime: 10,
-
- // Default volume
- volume: 1,
- muted: false,
-
- // Pass a custom duration
- duration: null,
-
- // Display the media duration on load in the current time position
- // If you have opted to display both duration and currentTime, this is ignored
- displayDuration: true,
-
- // Invert the current time to be a countdown
- invertTime: true,
-
- // Clicking the currentTime inverts it's value to show time left rather than elapsed
- toggleInvert: true,
-
- // Aspect ratio (for embeds)
- ratio: '16:9',
-
- // Click video container to play/pause
- clickToPlay: true,
-
- // Auto hide the controls
- hideControls: true,
-
- // Revert to poster on finish (HTML5 - will cause reload)
- showPosterOnEnd: false,
-
- // Disable the standard context menu
- disableContextMenu: true,
-
- // Sprite (for icons)
- loadSprite: true,
- iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.2.4/plyr.svg',
-
- // Blank video (used to prevent errors on source change)
- blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
-
- // Quality default
- quality: {
- default: 576,
- options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240, 'default']
- },
-
- // Set loops
- loop: {
- active: false
- // start: null,
- // end: null,
- },
-
- // Speed default and options to display
- speed: {
- selected: 1,
- options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]
- },
-
- // Keyboard shortcut settings
- keyboard: {
- focused: true,
- global: false
- },
-
- // Display tooltips
- tooltips: {
- controls: false,
- seek: true
- },
-
- // Captions settings
- captions: {
- active: false,
- language: (navigator.language || navigator.userLanguage).split('-')[0]
- },
-
- // Fullscreen settings
- fullscreen: {
- enabled: true, // Allow fullscreen?
- fallback: true, // Fallback for vintage browsers
- iosNative: false // Use the native fullscreen in iOS (disables custom controls)
- },
-
- // Local storage
- storage: {
- enabled: true,
- key: 'plyr'
- },
-
- // Default controls
- controls: ['play-large',
- // 'restart',
- // 'rewind',
- 'play',
- // 'fast-forward',
- 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay', 'fullscreen'],
- settings: ['captions', 'quality', 'speed'],
-
- // Localisation
- i18n: {
- restart: 'Restart',
- rewind: 'Rewind {seektime} secs',
- play: 'Play',
- pause: 'Pause',
- fastForward: 'Forward {seektime} secs',
- seek: 'Seek',
- played: 'Played',
- buffered: 'Buffered',
- currentTime: 'Current time',
- duration: 'Duration',
- volume: 'Volume',
- mute: 'Mute',
- unmute: 'Unmute',
- enableCaptions: 'Enable captions',
- disableCaptions: 'Disable captions',
- enterFullscreen: 'Enter fullscreen',
- exitFullscreen: 'Exit fullscreen',
- frameTitle: 'Player for {title}',
- captions: 'Captions',
- settings: 'Settings',
- speed: 'Speed',
- normal: 'Normal',
- quality: 'Quality',
- loop: 'Loop',
- start: 'Start',
- end: 'End',
- all: 'All',
- reset: 'Reset',
- disabled: 'Disabled',
- enabled: 'Enabled',
- advertisement: 'Ad'
- },
-
- // URLs
- urls: {
- vimeo: {
- api: 'https://player.vimeo.com/api/player.js'
- },
- youtube: {
- api: 'https://www.youtube.com/iframe_api'
- },
- googleIMA: {
- api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'
- }
- },
-
- // Custom control listeners
- listeners: {
- seek: null,
- play: null,
- pause: null,
- restart: null,
- rewind: null,
- fastForward: null,
- mute: null,
- volume: null,
- captions: null,
- fullscreen: null,
- pip: null,
- airplay: null,
- speed: null,
- quality: null,
- loop: null,
- language: null
- },
-
- // Events to watch and bubble
- events: [
- // Events to watch on HTML5 media elements and bubble
- // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events
- 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'seeked', 'emptied', 'ratechange', 'cuechange',
-
- // Custom events
- 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled', 'languagechange', 'controlshidden', 'controlsshown', 'ready',
-
- // YouTube
- 'statechange', 'qualitychange', 'qualityrequested',
-
- // Ads
- 'adsloaded', 'adscontentpause', 'adscontentresume', 'adstarted', 'adsmidpoint', 'adscomplete', 'adsallcomplete', 'adsimpression', 'adsclick'],
-
- // Selectors
- // Change these to match your template if using custom HTML
- selectors: {
- editable: 'input, textarea, select, [contenteditable]',
- container: '.plyr',
- controls: {
- container: null,
- wrapper: '.plyr__controls'
- },
- labels: '[data-plyr]',
- buttons: {
- play: '[data-plyr="play"]',
- pause: '[data-plyr="pause"]',
- restart: '[data-plyr="restart"]',
- rewind: '[data-plyr="rewind"]',
- fastForward: '[data-plyr="fast-forward"]',
- mute: '[data-plyr="mute"]',
- captions: '[data-plyr="captions"]',
- fullscreen: '[data-plyr="fullscreen"]',
- pip: '[data-plyr="pip"]',
- airplay: '[data-plyr="airplay"]',
- settings: '[data-plyr="settings"]',
- loop: '[data-plyr="loop"]'
- },
- inputs: {
- seek: '[data-plyr="seek"]',
- volume: '[data-plyr="volume"]',
- speed: '[data-plyr="speed"]',
- language: '[data-plyr="language"]',
- quality: '[data-plyr="quality"]'
- },
- display: {
- currentTime: '.plyr__time--current',
- duration: '.plyr__time--duration',
- buffer: '.plyr__progress--buffer',
- played: '.plyr__progress--played',
- loop: '.plyr__progress--loop',
- volume: '.plyr__volume--display'
- },
- progress: '.plyr__progress',
- captions: '.plyr__captions',
- menu: {
- quality: '.js-plyr__menu__list--quality'
- }
- },
-
- // Class hooks added to the player in different states
- classNames: {
- video: 'plyr__video-wrapper',
- embed: 'plyr__video-embed',
- ads: 'plyr__ads',
- control: 'plyr__control',
- type: 'plyr--{0}',
- provider: 'plyr--{0}',
- stopped: 'plyr--stopped',
- playing: 'plyr--playing',
- loading: 'plyr--loading',
- error: 'plyr--has-error',
- hover: 'plyr--hover',
- tooltip: 'plyr__tooltip',
- cues: 'plyr__cues',
- hidden: 'plyr__sr-only',
- hideControls: 'plyr--hide-controls',
- isIos: 'plyr--is-ios',
- isTouch: 'plyr--is-touch',
- uiSupported: 'plyr--full-ui',
- noTransition: 'plyr--no-transition',
- menu: {
- value: 'plyr__menu__value',
- badge: 'plyr__badge',
- open: 'plyr--menu-open'
- },
- captions: {
- enabled: 'plyr--captions-enabled',
- active: 'plyr--captions-active'
- },
- fullscreen: {
- enabled: 'plyr--fullscreen-enabled',
- fallback: 'plyr--fullscreen-fallback'
- },
- pip: {
- supported: 'plyr--pip-supported',
- active: 'plyr--pip-active'
- },
- airplay: {
- supported: 'plyr--airplay-supported',
- active: 'plyr--airplay-active'
- },
- tabFocus: 'plyr__tab-focus'
- },
-
- // Embed attributes
- attributes: {
- embed: {
- provider: 'data-plyr-provider',
- id: 'data-plyr-embed-id'
- }
- },
-
- // API keys
- keys: {
- google: null
- },
-
- // Advertisements plugin
- // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio
- ads: {
- enabled: false,
- publisherId: ''
- }
-};
-
var loadjs_umd = createCommonjsModule(function (module, exports) {
(function(root, factory) {
if (typeof undefined === 'function' && undefined.amd) {
@@ -6570,6 +5338,21 @@ return loadjs;
}));
});
+// ==========================================================================
+// Plyr supported types and providers
+// ==========================================================================
+
+var providers = {
+ html5: 'html5',
+ youtube: 'youtube',
+ vimeo: 'vimeo'
+};
+
+var types = {
+ audio: 'audio',
+ video: 'video'
+};
+
var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
@@ -6922,14 +5705,14 @@ var utils = {
},
- // Remove an element
+ // Remove element(s)
removeElement: function removeElement(element) {
- if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {
+ if (utils.is.nodeList(element) || utils.is.array(element)) {
+ Array.from(element).forEach(utils.removeElement);
return;
}
- if (utils.is.nodeList(element) || utils.is.array(element)) {
- Array.from(element).forEach(utils.removeElement);
+ if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {
return;
}
@@ -7101,61 +5884,6 @@ var utils = {
},
- // Find the UI controls and store references in custom controls
- // TODO: Allow settings menus with custom controls
- findElements: function findElements() {
- try {
- this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);
-
- // Buttons
- this.elements.buttons = {
- play: utils.getElements.call(this, this.config.selectors.buttons.play),
- pause: utils.getElement.call(this, this.config.selectors.buttons.pause),
- restart: utils.getElement.call(this, this.config.selectors.buttons.restart),
- rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),
- fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),
- mute: utils.getElement.call(this, this.config.selectors.buttons.mute),
- pip: utils.getElement.call(this, this.config.selectors.buttons.pip),
- airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),
- settings: utils.getElement.call(this, this.config.selectors.buttons.settings),
- captions: utils.getElement.call(this, this.config.selectors.buttons.captions),
- fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen)
- };
-
- // Progress
- this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);
-
- // Inputs
- this.elements.inputs = {
- seek: utils.getElement.call(this, this.config.selectors.inputs.seek),
- volume: utils.getElement.call(this, this.config.selectors.inputs.volume)
- };
-
- // Display
- this.elements.display = {
- buffer: utils.getElement.call(this, this.config.selectors.display.buffer),
- currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),
- duration: utils.getElement.call(this, this.config.selectors.display.duration)
- };
-
- // Seek tooltip
- if (utils.is.element(this.elements.progress)) {
- this.elements.display.seekTooltip = this.elements.progress.querySelector('.' + this.config.classNames.tooltip);
- }
-
- return true;
- } catch (error) {
- // Log it
- this.debug.warn('It looks like there is a problem with your custom controls HTML', error);
-
- // Restore native video controls
- this.toggleNativeControls(true);
-
- return false;
- }
- },
-
-
// Get the focused element
getFocusElement: function getFocusElement() {
var focused = document.activeElement;
@@ -7329,6 +6057,22 @@ var utils = {
},
+ // Format string
+ format: function format(input) {
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ args[_key - 1] = arguments[_key];
+ }
+
+ if (utils.is.empty(input)) {
+ return input;
+ }
+
+ return input.toString().replace(/{(\d+)}/g, function (match, i) {
+ return utils.is.string(args[i]) ? args[i] : '';
+ });
+ },
+
+
// Get percentage
getPercentage: function getPercentage(current, max) {
if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {
@@ -7442,8 +6186,8 @@ var utils = {
extend: function extend() {
var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- sources[_key - 1] = arguments[_key];
+ for (var _len2 = arguments.length, sources = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+ sources[_key2 - 1] = arguments[_key2];
}
if (!sources.length) {
@@ -7795,279 +6539,157 @@ var support = {
};
// ==========================================================================
-// Console wrapper
-// ==========================================================================
-
-var noop = function noop() {};
-var Console = function () {
- function Console() {
- var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- classCallCheck(this, Console);
-
- this.enabled = window.console && enabled;
-
- if (this.enabled) {
- this.log('Debugging enabled');
- }
- }
-
- createClass(Console, [{
- key: 'log',
- get: function get() {
- // eslint-disable-next-line no-console
- return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;
- }
- }, {
- key: 'warn',
- get: function get() {
- // eslint-disable-next-line no-console
- return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;
- }
- }, {
- key: 'error',
- get: function get() {
- // eslint-disable-next-line no-console
- return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;
+var html5 = {
+ getSources: function getSources() {
+ if (!this.isHTML5) {
+ return null;
}
- }]);
- return Console;
-}();
-
-// ==========================================================================
-
-var browser = utils.getBrowser();
-
-function onChange() {
- if (!this.enabled) {
- return;
- }
-
- // Update toggle button
- var button = this.player.elements.buttons.fullscreen;
- if (utils.is.element(button)) {
- utils.toggleState(button, this.active);
- }
-
- // Trigger an event
- utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);
-
- // Trap focus in container
- if (!browser.isIos) {
- utils.trapFocus.call(this.player, this.target, this.active);
- }
-}
-
-function toggleFallback() {
- var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
-
- // Store or restore scroll position
- if (toggle) {
- this.scrollPosition = {
- x: window.scrollX || 0,
- y: window.scrollY || 0
- };
- } else {
- window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);
- }
- // Toggle scroll
- document.body.style.overflow = toggle ? 'hidden' : '';
-
- // Toggle class hook
- utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);
-
- // Toggle button and fire events
- onChange.call(this);
-}
-
-var Fullscreen = function () {
- function Fullscreen(player) {
- var _this = this;
+ return this.media.querySelectorAll('source');
+ },
- classCallCheck(this, Fullscreen);
- // Keep reference to parent
- this.player = player;
+ // Get quality levels
+ getQualityOptions: function getQualityOptions() {
+ if (!this.isHTML5) {
+ return null;
+ }
- // Get prefix
- this.prefix = Fullscreen.prefix;
- this.property = Fullscreen.property;
+ // Get sources
+ var sources = html5.getSources.call(this);
- // Scroll position
- this.scrollPosition = { x: 0, y: 0 };
+ if (utils.is.empty(sources)) {
+ return null;
+ }
- // Register event listeners
- // Handle event (incase user presses escape etc)
- utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : this.prefix + 'fullscreenchange', function () {
- // TODO: Filter for target??
- onChange.call(_this);
+ // Get <source> with size attribute
+ var sizes = Array.from(sources).filter(function (source) {
+ return !utils.is.empty(source.getAttribute('size'));
});
- // Fullscreen toggle on double click
- utils.on(this.player.elements.container, 'dblclick', function (event) {
- // Ignore double click in controls
- if (utils.is.element(_this.player.elements.controls) && _this.player.elements.controls.contains(event.target)) {
- return;
- }
-
- _this.toggle();
- });
+ // If none, bail
+ if (utils.is.empty(sizes)) {
+ return null;
+ }
- // Update the UI
- this.update();
- }
+ // Reduce to unique list
+ return utils.dedupe(sizes.map(function (source) {
+ return Number(source.getAttribute('size'));
+ }));
+ },
+ extend: function extend() {
+ if (!this.isHTML5) {
+ return;
+ }
- // Determine if native supported
+ var player = this;
+ // Quality
+ Object.defineProperty(player.media, 'quality', {
+ get: function get() {
+ // Get sources
+ var sources = html5.getSources.call(player);
- createClass(Fullscreen, [{
- key: 'update',
+ if (utils.is.empty(sources)) {
+ return null;
+ }
+ var matches = Array.from(sources).filter(function (source) {
+ return source.getAttribute('src') === player.source;
+ });
- // Update UI
- value: function update() {
- if (this.enabled) {
- this.player.debug.log((Fullscreen.native ? 'Native' : 'Fallback') + ' fullscreen enabled');
- } else {
- this.player.debug.log('Fullscreen not supported and fallback disabled');
- }
+ if (utils.is.empty(matches)) {
+ return null;
+ }
- // Add styling hook to show button
- utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);
- }
+ return Number(matches[0].getAttribute('size'));
+ },
+ set: function set(input) {
+ // Get sources
+ var sources = html5.getSources.call(player);
- // Make an element fullscreen
+ if (utils.is.empty(sources)) {
+ return;
+ }
- }, {
- key: 'enter',
- value: function enter() {
- if (!this.enabled) {
- return;
- }
+ // Get matches for requested size
+ var matches = Array.from(sources).filter(function (source) {
+ return Number(source.getAttribute('size')) === input;
+ });
- // iOS native fullscreen doesn't need the request step
- if (browser.isIos && this.player.config.fullscreen.iosNative) {
- if (this.player.playing) {
- this.target.webkitEnterFullscreen();
+ // No matches for requested size
+ if (utils.is.empty(matches)) {
+ return;
}
- } else if (!Fullscreen.native) {
- toggleFallback.call(this, true);
- } else if (!this.prefix) {
- this.target.requestFullscreen();
- } else if (!utils.is.empty(this.prefix)) {
- this.target[this.prefix + 'Request' + this.property]();
- }
- }
- // Bail from fullscreen
+ // Get supported sources
+ var supported = matches.filter(function (source) {
+ return support.mime.call(player, source.getAttribute('type'));
+ });
- }, {
- key: 'exit',
- value: function exit() {
- if (!this.enabled) {
- return;
- }
+ // No supported sources
+ if (utils.is.empty(supported)) {
+ return;
+ }
- // iOS native fullscreen
- if (browser.isIos && this.player.config.fullscreen.iosNative) {
- this.target.webkitExitFullscreen();
- this.player.play();
- } else if (!Fullscreen.native) {
- toggleFallback.call(this, false);
- } else if (!this.prefix) {
- (document.cancelFullScreen || document.exitFullscreen).call(document);
- } else if (!utils.is.empty(this.prefix)) {
- var action = this.prefix === 'moz' ? 'Cancel' : 'Exit';
- document['' + this.prefix + action + this.property]();
- }
- }
+ // Trigger change event
+ utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {
+ quality: input
+ });
- // Toggle state
+ // Get current state
+ var currentTime = player.currentTime,
+ playing = player.playing;
- }, {
- key: 'toggle',
- value: function toggle() {
- if (!this.active) {
- this.enter();
- } else {
- this.exit();
- }
- }
- }, {
- key: 'enabled',
+ // Set new source
+ player.media.src = supported[0].getAttribute('src');
- // Determine if fullscreen is enabled
- get: function get() {
- return (Fullscreen.native || this.player.config.fullscreen.fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;
- }
+ // Load new source
+ player.media.load();
- // Get active state
+ // Resume playing
+ if (playing) {
+ player.play();
+ }
- }, {
- key: 'active',
- get: function get() {
- if (!this.enabled) {
- return false;
- }
+ // Restore time
+ player.currentTime = currentTime;
- // Fallback using classname
- if (!Fullscreen.native) {
- return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);
+ // Trigger change event
+ utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {
+ quality: input
+ });
}
+ });
+ },
- var element = !this.prefix ? document.fullscreenElement : document['' + this.prefix + this.property + 'Element'];
-
- return element === this.target;
- }
-
- // Get target element
- }, {
- key: 'target',
- get: function get() {
- return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;
- }
- }], [{
- key: 'native',
- get: function get() {
- return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);
+ // Cancel current network requests
+ // See https://github.com/sampotts/plyr/issues/174
+ cancelRequests: function cancelRequests() {
+ if (!this.isHTML5) {
+ return;
}
- // Get the prefix for handlers
-
- }, {
- key: 'prefix',
- get: function get() {
- // No prefix
- if (utils.is.function(document.exitFullscreen)) {
- return '';
- }
-
- // Check for fullscreen support by vendor prefix
- var value = '';
- var prefixes = ['webkit', 'moz', 'ms'];
+ // Remove child sources
+ utils.removeElement(html5.getSources());
- prefixes.some(function (pre) {
- if (utils.is.function(document[pre + 'ExitFullscreen']) || utils.is.function(document[pre + 'CancelFullScreen'])) {
- value = pre;
- return true;
- }
+ // Set blank video src attribute
+ // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error
+ // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection
+ this.media.setAttribute('src', this.config.blankVideo);
- return false;
- });
+ // Load the new empty source
+ // This will cancel existing requests
+ // See https://github.com/sampotts/plyr/issues/174
+ this.media.load();
- return value;
- }
- }, {
- key: 'property',
- get: function get() {
- return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';
- }
- }]);
- return Fullscreen;
-}();
+ // Debugging
+ this.debug.log('Cancelled network requests');
+ }
+};
// ==========================================================================
@@ -8101,277 +6723,8 @@ var i18n = {
// ==========================================================================
-var captions = {
- // Setup captions
- setup: function setup() {
- // Requires UI support
- if (!this.supported.ui) {
- return;
- }
-
- // Set default language if not set
- var stored = this.storage.get('language');
-
- if (!utils.is.empty(stored)) {
- this.captions.language = stored;
- }
-
- if (utils.is.empty(this.captions.language)) {
- this.captions.language = this.config.captions.language.toLowerCase();
- }
-
- // Set captions enabled state if not set
- if (!utils.is.boolean(this.captions.active)) {
- var active = this.storage.get('captions');
-
- if (utils.is.boolean(active)) {
- this.captions.active = active;
- } else {
- this.captions.active = this.config.captions.active;
- }
- }
-
- // Only Vimeo and HTML5 video supported at this point
- if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) {
- // Clear menu and hide
- if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {
- controls.setCaptionsMenu.call(this);
- }
-
- return;
- }
-
- // Inject the container
- if (!utils.is.element(this.elements.captions)) {
- this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));
-
- utils.insertAfter(this.elements.captions, this.elements.wrapper);
- }
-
- // Set the class hook
- utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));
-
- // Get tracks
- var tracks = captions.getTracks.call(this);
-
- // If no caption file exists, hide container for caption text
- if (utils.is.empty(tracks)) {
- return;
- }
-
- // Get browser info
- var browser = utils.getBrowser();
-
- // Fix IE captions if CORS is used
- // Fetch captions and inject as blobs instead (data URIs not supported!)
- if (browser.isIE && window.URL) {
- var elements = this.media.querySelectorAll('track');
-
- Array.from(elements).forEach(function (track) {
- var src = track.getAttribute('src');
- var href = utils.parseUrl(src);
-
- if (href.hostname !== window.location.href.hostname && ['http:', 'https:'].includes(href.protocol)) {
- utils.fetch(src, 'blob').then(function (blob) {
- track.setAttribute('src', window.URL.createObjectURL(blob));
- }).catch(function () {
- utils.removeElement(track);
- });
- }
- });
- }
-
- // Set language
- captions.setLanguage.call(this);
-
- // Enable UI
- captions.show.call(this);
-
- // Set available languages in list
- if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {
- controls.setCaptionsMenu.call(this);
- }
- },
-
-
- // Set the captions language
- setLanguage: function setLanguage() {
- var _this = this;
-
- // Setup HTML5 track rendering
- if (this.isHTML5 && this.isVideo) {
- captions.getTracks.call(this).forEach(function (track) {
- // Show track
- utils.on(track, 'cuechange', function (event) {
- return captions.setCue.call(_this, event);
- });
-
- // Turn off native caption rendering to avoid double captions
- // eslint-disable-next-line
- track.mode = 'hidden';
- });
-
- // Get current track
- var currentTrack = captions.getCurrentTrack.call(this);
-
- // Check if suported kind
- if (utils.is.track(currentTrack)) {
- // If we change the active track while a cue is already displayed we need to update it
- if (Array.from(currentTrack.activeCues || []).length) {
- captions.setCue.call(this, currentTrack);
- }
- }
- } else if (this.isVimeo && this.captions.active) {
- this.embed.enableTextTrack(this.language);
- }
- },
-
-
- // Get the tracks
- getTracks: function getTracks() {
- // Return empty array at least
- if (utils.is.nullOrUndefined(this.media)) {
- return [];
- }
-
- // Only get accepted kinds
- return Array.from(this.media.textTracks || []).filter(function (track) {
- return ['captions', 'subtitles'].includes(track.kind);
- });
- },
-
-
- // Get the current track for the current language
- getCurrentTrack: function getCurrentTrack() {
- var _this2 = this;
-
- var tracks = captions.getTracks.call(this);
-
- if (!tracks.length) {
- return null;
- }
-
- // Get track based on current language
- var track = tracks.find(function (track) {
- return track.language.toLowerCase() === _this2.language;
- });
-
- // Get the <track> with default attribute
- if (!track) {
- track = utils.getElement.call(this, 'track[default]');
- }
-
- // Get the first track
- if (!track) {
- var _tracks = slicedToArray(tracks, 1);
-
- track = _tracks[0];
- }
-
- return track;
- },
-
-
- // Get UI label for track
- getLabel: function getLabel(track) {
- var currentTrack = track;
-
- if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {
- currentTrack = captions.getCurrentTrack.call(this);
- }
-
- if (utils.is.track(currentTrack)) {
- if (!utils.is.empty(currentTrack.label)) {
- return currentTrack.label;
- }
-
- if (!utils.is.empty(currentTrack.language)) {
- return track.language.toUpperCase();
- }
-
- return i18n.get('enabled', this.config);
- }
-
- return i18n.get('disabled', this.config);
- },
-
-
- // Display active caption if it contains text
- setCue: function setCue(input) {
- // Get the track from the event if needed
- var track = utils.is.event(input) ? input.target : input;
- var activeCues = track.activeCues;
-
- var active = activeCues.length && activeCues[0];
- var currentTrack = captions.getCurrentTrack.call(this);
-
- // Only display current track
- if (track !== currentTrack) {
- return;
- }
-
- // Display a cue, if there is one
- if (utils.is.cue(active)) {
- captions.setText.call(this, active.getCueAsHTML());
- } else {
- captions.setText.call(this, null);
- }
-
- utils.dispatchEvent.call(this, this.media, 'cuechange');
- },
-
-
- // Set the current caption
- setText: function setText(input) {
- // Requires UI
- if (!this.supported.ui) {
- return;
- }
-
- if (utils.is.element(this.elements.captions)) {
- var content = utils.createElement('span');
-
- // Empty the container
- utils.emptyElement(this.elements.captions);
-
- // Default to empty
- var caption = !utils.is.nullOrUndefined(input) ? input : '';
-
- // Set the span content
- if (utils.is.string(caption)) {
- content.textContent = caption.trim();
- } else {
- content.appendChild(caption);
- }
-
- // Set new caption text
- this.elements.captions.appendChild(content);
- } else {
- this.debug.warn('No captions element to render to');
- }
- },
-
-
- // Display captions container and button (for initialization)
- show: function show() {
- // Try to load the value from storage
- var active = this.storage.get('captions');
-
- // Otherwise fall back to the default config
- if (!utils.is.boolean(active)) {
- active = this.config.captions.active;
- } else {
- this.captions.active = active;
- }
-
- if (active) {
- utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);
- utils.toggleState(this.elements.buttons.captions, true);
- }
- }
-};
-
-// ==========================================================================
+// Sniff out the browser
+var browser = utils.getBrowser();
var ui = {
addStyleHook: function addStyleHook() {
@@ -8450,6 +6803,18 @@ var ui = {
// Update the UI
ui.checkPlaying.call(this);
+ // Check for picture-in-picture support
+ utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);
+
+ // Check for airplay support
+ utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);
+
+ // Add iOS class
+ utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);
+
+ // Add touch class
+ utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);
+
// Ready for API calls
this.ready = true;
@@ -8460,6 +6825,9 @@ var ui = {
// Set the title
ui.setTitle.call(this);
+
+ // Set the poster image
+ ui.setPoster.call(this);
},
@@ -8494,9 +6862,24 @@ var ui = {
// Default to media type
var title = !utils.is.empty(this.config.title) ? this.config.title : 'video';
+ var format = i18n.get('frameTitle', this.config);
+
+ iframe.setAttribute('title', format.replace('{title}', title));
+ }
+ },
+
- iframe.setAttribute('title', i18n.get('frameTitle', this.config));
+ // Set the poster image
+ setPoster: function setPoster() {
+ if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {
+ return;
}
+
+ // Set the inline style
+ var posters = this.poster.split(',');
+ this.elements.poster.style.backgroundImage = posters.map(function (p) {
+ return 'url(\'' + p + '\')';
+ }).join(',');
},
@@ -8504,7 +6887,8 @@ var ui = {
checkPlaying: function checkPlaying() {
// Class hooks
utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);
- utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);
+ utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);
+ utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);
// Set ARIA state
utils.toggleState(this.elements.buttons.play, this.playing);
@@ -8711,159 +7095,6 @@ var ui = {
// ==========================================================================
-var html5 = {
- getSources: function getSources() {
- if (!this.isHTML5) {
- return null;
- }
-
- return this.media.querySelectorAll('source');
- },
-
-
- // Get quality levels
- getQualityOptions: function getQualityOptions() {
- if (!this.isHTML5) {
- return null;
- }
-
- // Get sources
- var sources = html5.getSources.call(this);
-
- if (utils.is.empty(sources)) {
- return null;
- }
-
- // Get <source> with size attribute
- var sizes = Array.from(sources).filter(function (source) {
- return !utils.is.empty(source.getAttribute('size'));
- });
-
- // If none, bail
- if (utils.is.empty(sizes)) {
- return null;
- }
-
- // Reduce to unique list
- return utils.dedupe(sizes.map(function (source) {
- return Number(source.getAttribute('size'));
- }));
- },
- extend: function extend() {
- if (!this.isHTML5) {
- return;
- }
-
- var player = this;
-
- // Quality
- Object.defineProperty(player.media, 'quality', {
- get: function get() {
- // Get sources
- var sources = html5.getSources.call(player);
-
- if (utils.is.empty(sources)) {
- return null;
- }
-
- var matches = Array.from(sources).filter(function (source) {
- return source.getAttribute('src') === player.source;
- });
-
- if (utils.is.empty(matches)) {
- return null;
- }
-
- return Number(matches[0].getAttribute('size'));
- },
- set: function set(input) {
- // Get sources
- var sources = html5.getSources.call(player);
-
- if (utils.is.empty(sources)) {
- return;
- }
-
- // Get matches for requested size
- var matches = Array.from(sources).filter(function (source) {
- return Number(source.getAttribute('size')) === input;
- });
-
- // No matches for requested size
- if (utils.is.empty(matches)) {
- return;
- }
-
- // Get supported sources
- var supported = matches.filter(function (source) {
- return support.mime.call(player, source.getAttribute('type'));
- });
-
- // No supported sources
- if (utils.is.empty(supported)) {
- return;
- }
-
- // Trigger change event
- utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {
- quality: input
- });
-
- // Get current state
- var currentTime = player.currentTime,
- playing = player.playing;
-
- // Set new source
-
- player.media.src = supported[0].getAttribute('src');
-
- // Load new source
- player.media.load();
-
- // Resume playing
- if (playing) {
- player.play();
- }
-
- // Restore time
- player.currentTime = currentTime;
-
- // Trigger change event
- utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {
- quality: input
- });
- }
- });
- },
-
-
- // Cancel current network requests
- // See https://github.com/sampotts/plyr/issues/174
- cancelRequests: function cancelRequests() {
- if (!this.isHTML5) {
- return;
- }
-
- // Remove child sources
- utils.removeElement(html5.getSources());
-
- // Set blank video src attribute
- // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error
- // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection
- this.media.setAttribute('src', this.config.blankVideo);
-
- // Load the new empty source
- // This will cancel existing requests
- // See https://github.com/sampotts/plyr/issues/174
- this.media.load();
-
- // Debugging
- this.debug.log('Cancelled network requests');
- }
-};
-
-// ==========================================================================
-
// Sniff out the browser
var browser$1 = utils.getBrowser();
@@ -8893,18 +7124,76 @@ var controls = {
// Get icon URL
getIconUrl: function getIconUrl() {
+ var url = new URL(this.config.iconUrl, window.location);
+ var cors = url.host !== window.location.host || browser$1.isIE && !window.svg4everybody;
+
return {
url: this.config.iconUrl,
- absolute: this.config.iconUrl.indexOf('http') === 0 || browser$1.isIE && !window.svg4everybody
+ cors: cors
};
},
+ // Find the UI controls and store references in custom controls
+ // TODO: Allow settings menus with custom controls
+ findElements: function findElements() {
+ try {
+ this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);
+
+ // Buttons
+ this.elements.buttons = {
+ play: utils.getElements.call(this, this.config.selectors.buttons.play),
+ pause: utils.getElement.call(this, this.config.selectors.buttons.pause),
+ restart: utils.getElement.call(this, this.config.selectors.buttons.restart),
+ rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),
+ fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),
+ mute: utils.getElement.call(this, this.config.selectors.buttons.mute),
+ pip: utils.getElement.call(this, this.config.selectors.buttons.pip),
+ airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),
+ settings: utils.getElement.call(this, this.config.selectors.buttons.settings),
+ captions: utils.getElement.call(this, this.config.selectors.buttons.captions),
+ fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen)
+ };
+
+ // Progress
+ this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);
+
+ // Inputs
+ this.elements.inputs = {
+ seek: utils.getElement.call(this, this.config.selectors.inputs.seek),
+ volume: utils.getElement.call(this, this.config.selectors.inputs.volume)
+ };
+
+ // Display
+ this.elements.display = {
+ buffer: utils.getElement.call(this, this.config.selectors.display.buffer),
+ currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),
+ duration: utils.getElement.call(this, this.config.selectors.display.duration)
+ };
+
+ // Seek tooltip
+ if (utils.is.element(this.elements.progress)) {
+ this.elements.display.seekTooltip = this.elements.progress.querySelector('.' + this.config.classNames.tooltip);
+ }
+
+ return true;
+ } catch (error) {
+ // Log it
+ this.debug.warn('It looks like there is a problem with your custom controls HTML', error);
+
+ // Restore native video controls
+ this.toggleNativeControls(true);
+
+ return false;
+ }
+ },
+
+
// Create <svg> icon
createIcon: function createIcon(type, attributes) {
var namespace = 'http://www.w3.org/2000/svg';
var iconUrl = controls.getIconUrl.call(this);
- var iconPath = (!iconUrl.absolute ? iconUrl.url : '') + '#' + this.config.iconPrefix;
+ var iconPath = (!iconUrl.cors ? iconUrl.url : '') + '#' + this.config.iconPrefix;
// Create <svg>
var icon = document.createElementNS(namespace, 'svg');
@@ -9676,12 +7965,11 @@ var controls = {
// Toggle Menu
- showTab: function showTab(event) {
+ showTab: function showTab() {
+ var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var menu = this.elements.settings.menu;
- var tab = event.target;
- var show = tab.getAttribute('aria-expanded') === 'false';
- var pane = document.getElementById(tab.getAttribute('aria-controls'));
+ var pane = document.getElementById(target);
// Nothing to show, bail
if (!utils.is.element(pane)) {
@@ -9741,8 +8029,12 @@ var controls = {
current.setAttribute('tabindex', -1);
// Set attributes on target
- utils.toggleHidden(pane, !show);
- tab.setAttribute('aria-expanded', show);
+ utils.toggleHidden(pane, false);
+
+ var tabs = utils.getElements.call(this, '[aria-controls="' + target + '"]');
+ Array.from(tabs).forEach(function (tab) {
+ tab.setAttribute('aria-expanded', true);
+ });
pane.removeAttribute('tabindex');
// Focus the first item
@@ -10005,7 +8297,7 @@ var controls = {
var icon = controls.getIconUrl.call(this);
// Only load external sprite using AJAX
- if (icon.absolute) {
+ if (icon.cors) {
utils.loadSprite(icon.url, 'sprite-plyr');
}
}
@@ -10092,7 +8384,7 @@ var controls = {
// Find the elements if need be
if (!utils.is.element(this.elements.controls)) {
- utils.findElements.call(this);
+ controls.findElements.call(this);
}
// Edge sometimes doesn't finish the paint so force a redraw
@@ -10115,9 +8407,879 @@ var controls = {
// ==========================================================================
-// Sniff out the browser
+var captions = {
+ // Setup captions
+ setup: function setup() {
+ // Requires UI support
+ if (!this.supported.ui) {
+ return;
+ }
+
+ // Set default language if not set
+ var stored = this.storage.get('language');
+
+ if (!utils.is.empty(stored)) {
+ this.captions.language = stored;
+ }
+
+ if (utils.is.empty(this.captions.language)) {
+ this.captions.language = this.config.captions.language.toLowerCase();
+ }
+
+ // Set captions enabled state if not set
+ if (!utils.is.boolean(this.captions.active)) {
+ var active = this.storage.get('captions');
+
+ if (utils.is.boolean(active)) {
+ this.captions.active = active;
+ } else {
+ this.captions.active = this.config.captions.active;
+ }
+ }
+
+ // Only Vimeo and HTML5 video supported at this point
+ if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) {
+ // Clear menu and hide
+ if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {
+ controls.setCaptionsMenu.call(this);
+ }
+
+ return;
+ }
+
+ // Inject the container
+ if (!utils.is.element(this.elements.captions)) {
+ this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));
+
+ utils.insertAfter(this.elements.captions, this.elements.wrapper);
+ }
+
+ // Set the class hook
+ utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));
+
+ // Get tracks
+ var tracks = captions.getTracks.call(this);
+
+ // If no caption file exists, hide container for caption text
+ if (utils.is.empty(tracks)) {
+ return;
+ }
+
+ // Get browser info
+ var browser = utils.getBrowser();
+
+ // Fix IE captions if CORS is used
+ // Fetch captions and inject as blobs instead (data URIs not supported!)
+ if (browser.isIE && window.URL) {
+ var elements = this.media.querySelectorAll('track');
+
+ Array.from(elements).forEach(function (track) {
+ var src = track.getAttribute('src');
+ var href = utils.parseUrl(src);
+
+ if (href.hostname !== window.location.href.hostname && ['http:', 'https:'].includes(href.protocol)) {
+ utils.fetch(src, 'blob').then(function (blob) {
+ track.setAttribute('src', window.URL.createObjectURL(blob));
+ }).catch(function () {
+ utils.removeElement(track);
+ });
+ }
+ });
+ }
+
+ // Set language
+ captions.setLanguage.call(this);
+
+ // Enable UI
+ captions.show.call(this);
+
+ // Set available languages in list
+ if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {
+ controls.setCaptionsMenu.call(this);
+ }
+ },
+
+
+ // Set the captions language
+ setLanguage: function setLanguage() {
+ var _this = this;
+
+ // Setup HTML5 track rendering
+ if (this.isHTML5 && this.isVideo) {
+ captions.getTracks.call(this).forEach(function (track) {
+ // Show track
+ utils.on(track, 'cuechange', function (event) {
+ return captions.setCue.call(_this, event);
+ });
+
+ // Turn off native caption rendering to avoid double captions
+ // eslint-disable-next-line
+ track.mode = 'hidden';
+ });
+
+ // Get current track
+ var currentTrack = captions.getCurrentTrack.call(this);
+
+ // Check if suported kind
+ if (utils.is.track(currentTrack)) {
+ // If we change the active track while a cue is already displayed we need to update it
+ if (Array.from(currentTrack.activeCues || []).length) {
+ captions.setCue.call(this, currentTrack);
+ }
+ }
+ } else if (this.isVimeo && this.captions.active) {
+ this.embed.enableTextTrack(this.language);
+ }
+ },
+
+
+ // Get the tracks
+ getTracks: function getTracks() {
+ // Return empty array at least
+ if (utils.is.nullOrUndefined(this.media)) {
+ return [];
+ }
+
+ // Only get accepted kinds
+ return Array.from(this.media.textTracks || []).filter(function (track) {
+ return ['captions', 'subtitles'].includes(track.kind);
+ });
+ },
+
+
+ // Get the current track for the current language
+ getCurrentTrack: function getCurrentTrack() {
+ var _this2 = this;
+
+ var tracks = captions.getTracks.call(this);
+
+ if (!tracks.length) {
+ return null;
+ }
+
+ // Get track based on current language
+ var track = tracks.find(function (track) {
+ return track.language.toLowerCase() === _this2.language;
+ });
+
+ // Get the <track> with default attribute
+ if (!track) {
+ track = utils.getElement.call(this, 'track[default]');
+ }
+
+ // Get the first track
+ if (!track) {
+ var _tracks = slicedToArray(tracks, 1);
+
+ track = _tracks[0];
+ }
+
+ return track;
+ },
+
+
+ // Get UI label for track
+ getLabel: function getLabel(track) {
+ var currentTrack = track;
+
+ if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {
+ currentTrack = captions.getCurrentTrack.call(this);
+ }
+
+ if (utils.is.track(currentTrack)) {
+ if (!utils.is.empty(currentTrack.label)) {
+ return currentTrack.label;
+ }
+
+ if (!utils.is.empty(currentTrack.language)) {
+ return track.language.toUpperCase();
+ }
+
+ return i18n.get('enabled', this.config);
+ }
+
+ return i18n.get('disabled', this.config);
+ },
+
+
+ // Display active caption if it contains text
+ setCue: function setCue(input) {
+ // Get the track from the event if needed
+ var track = utils.is.event(input) ? input.target : input;
+ var activeCues = track.activeCues;
+
+ var active = activeCues.length && activeCues[0];
+ var currentTrack = captions.getCurrentTrack.call(this);
+
+ // Only display current track
+ if (track !== currentTrack) {
+ return;
+ }
+
+ // Display a cue, if there is one
+ if (utils.is.cue(active)) {
+ captions.setText.call(this, active.getCueAsHTML());
+ } else {
+ captions.setText.call(this, null);
+ }
+
+ utils.dispatchEvent.call(this, this.media, 'cuechange');
+ },
+
+
+ // Set the current caption
+ setText: function setText(input) {
+ // Requires UI
+ if (!this.supported.ui) {
+ return;
+ }
+
+ if (utils.is.element(this.elements.captions)) {
+ var content = utils.createElement('span');
+
+ // Empty the container
+ utils.emptyElement(this.elements.captions);
+
+ // Default to empty
+ var caption = !utils.is.nullOrUndefined(input) ? input : '';
+
+ // Set the span content
+ if (utils.is.string(caption)) {
+ content.textContent = caption.trim();
+ } else {
+ content.appendChild(caption);
+ }
+
+ // Set new caption text
+ this.elements.captions.appendChild(content);
+ } else {
+ this.debug.warn('No captions element to render to');
+ }
+ },
+
+
+ // Display captions container and button (for initialization)
+ show: function show() {
+ // Try to load the value from storage
+ var active = this.storage.get('captions');
+
+ // Otherwise fall back to the default config
+ if (!utils.is.boolean(active)) {
+ active = this.config.captions.active;
+ } else {
+ this.captions.active = active;
+ }
+
+ if (active) {
+ utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);
+ utils.toggleState(this.elements.buttons.captions, true);
+ }
+ }
+};
+
+// ==========================================================================
+// Console wrapper
+// ==========================================================================
+
+var noop = function noop() {};
+
+var Console = function () {
+ function Console() {
+ var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+ classCallCheck(this, Console);
+
+ this.enabled = window.console && enabled;
+
+ if (this.enabled) {
+ this.log('Debugging enabled');
+ }
+ }
+
+ createClass(Console, [{
+ key: 'log',
+ get: function get() {
+ // eslint-disable-next-line no-console
+ return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;
+ }
+ }, {
+ key: 'warn',
+ get: function get() {
+ // eslint-disable-next-line no-console
+ return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;
+ }
+ }, {
+ key: 'error',
+ get: function get() {
+ // eslint-disable-next-line no-console
+ return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;
+ }
+ }]);
+ return Console;
+}();
+
+// ==========================================================================
+// Plyr default config
+// ==========================================================================
+
+var defaults$1 = {
+ // Disable
+ enabled: true,
+
+ // Custom media title
+ title: '',
+
+ // Logging to console
+ debug: false,
+
+ // Auto play (if supported)
+ autoplay: false,
+
+ // Only allow one media playing at once (vimeo only)
+ autopause: true,
+
+ // Default time to skip when rewind/fast forward
+ seekTime: 10,
+
+ // Default volume
+ volume: 1,
+ muted: false,
+
+ // Pass a custom duration
+ duration: null,
+
+ // Display the media duration on load in the current time position
+ // If you have opted to display both duration and currentTime, this is ignored
+ displayDuration: true,
+
+ // Invert the current time to be a countdown
+ invertTime: true,
+
+ // Clicking the currentTime inverts it's value to show time left rather than elapsed
+ toggleInvert: true,
+
+ // Aspect ratio (for embeds)
+ ratio: '16:9',
+
+ // Click video container to play/pause
+ clickToPlay: true,
+
+ // Auto hide the controls
+ hideControls: true,
+
+ // Reset to start when playback ended
+ resetOnEnd: false,
+
+ // Disable the standard context menu
+ disableContextMenu: true,
+
+ // Sprite (for icons)
+ loadSprite: true,
+ iconPrefix: 'plyr',
+ iconUrl: 'https://cdn.plyr.io/3.3.0/plyr.svg',
+
+ // Blank video (used to prevent errors on source change)
+ blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
+
+ // Quality default
+ quality: {
+ default: 576,
+ options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240, 'default']
+ },
+
+ // Set loops
+ loop: {
+ active: false
+ // start: null,
+ // end: null,
+ },
+
+ // Speed default and options to display
+ speed: {
+ selected: 1,
+ options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]
+ },
+
+ // Keyboard shortcut settings
+ keyboard: {
+ focused: true,
+ global: false
+ },
+
+ // Display tooltips
+ tooltips: {
+ controls: false,
+ seek: true
+ },
+
+ // Captions settings
+ captions: {
+ active: false,
+ language: (navigator.language || navigator.userLanguage).split('-')[0]
+ },
+
+ // Fullscreen settings
+ fullscreen: {
+ enabled: true, // Allow fullscreen?
+ fallback: true, // Fallback for vintage browsers
+ iosNative: false // Use the native fullscreen in iOS (disables custom controls)
+ },
+
+ // Local storage
+ storage: {
+ enabled: true,
+ key: 'plyr'
+ },
+
+ // Default controls
+ controls: ['play-large',
+ // 'restart',
+ // 'rewind',
+ 'play',
+ // 'fast-forward',
+ 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay', 'fullscreen'],
+ settings: ['captions', 'quality', 'speed'],
+
+ // Localisation
+ i18n: {
+ restart: 'Restart',
+ rewind: 'Rewind {seektime} secs',
+ play: 'Play',
+ pause: 'Pause',
+ fastForward: 'Forward {seektime} secs',
+ seek: 'Seek',
+ played: 'Played',
+ buffered: 'Buffered',
+ currentTime: 'Current time',
+ duration: 'Duration',
+ volume: 'Volume',
+ mute: 'Mute',
+ unmute: 'Unmute',
+ enableCaptions: 'Enable captions',
+ disableCaptions: 'Disable captions',
+ enterFullscreen: 'Enter fullscreen',
+ exitFullscreen: 'Exit fullscreen',
+ frameTitle: 'Player for {title}',
+ captions: 'Captions',
+ settings: 'Settings',
+ speed: 'Speed',
+ normal: 'Normal',
+ quality: 'Quality',
+ loop: 'Loop',
+ start: 'Start',
+ end: 'End',
+ all: 'All',
+ reset: 'Reset',
+ disabled: 'Disabled',
+ enabled: 'Enabled',
+ advertisement: 'Ad'
+ },
+
+ // URLs
+ urls: {
+ vimeo: {
+ sdk: 'https://player.vimeo.com/api/player.js',
+ iframe: 'https://player.vimeo.com/video/{0}?{1}',
+ api: 'https://vimeo.com/api/v2/video/{0}.json'
+ },
+ youtube: {
+ sdk: 'https://www.youtube.com/iframe_api',
+ api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',
+ poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg'
+ },
+ googleIMA: {
+ sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'
+ }
+ },
+
+ // Custom control listeners
+ listeners: {
+ seek: null,
+ play: null,
+ pause: null,
+ restart: null,
+ rewind: null,
+ fastForward: null,
+ mute: null,
+ volume: null,
+ captions: null,
+ fullscreen: null,
+ pip: null,
+ airplay: null,
+ speed: null,
+ quality: null,
+ loop: null,
+ language: null
+ },
+
+ // Events to watch and bubble
+ events: [
+ // Events to watch on HTML5 media elements and bubble
+ // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events
+ 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'seeked', 'emptied', 'ratechange', 'cuechange',
+
+ // Custom events
+ 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled', 'languagechange', 'controlshidden', 'controlsshown', 'ready',
+
+ // YouTube
+ 'statechange', 'qualitychange', 'qualityrequested',
+
+ // Ads
+ 'adsloaded', 'adscontentpause', 'adscontentresume', 'adstarted', 'adsmidpoint', 'adscomplete', 'adsallcomplete', 'adsimpression', 'adsclick'],
+
+ // Selectors
+ // Change these to match your template if using custom HTML
+ selectors: {
+ editable: 'input, textarea, select, [contenteditable]',
+ container: '.plyr',
+ controls: {
+ container: null,
+ wrapper: '.plyr__controls'
+ },
+ labels: '[data-plyr]',
+ buttons: {
+ play: '[data-plyr="play"]',
+ pause: '[data-plyr="pause"]',
+ restart: '[data-plyr="restart"]',
+ rewind: '[data-plyr="rewind"]',
+ fastForward: '[data-plyr="fast-forward"]',
+ mute: '[data-plyr="mute"]',
+ captions: '[data-plyr="captions"]',
+ fullscreen: '[data-plyr="fullscreen"]',
+ pip: '[data-plyr="pip"]',
+ airplay: '[data-plyr="airplay"]',
+ settings: '[data-plyr="settings"]',
+ loop: '[data-plyr="loop"]'
+ },
+ inputs: {
+ seek: '[data-plyr="seek"]',
+ volume: '[data-plyr="volume"]',
+ speed: '[data-plyr="speed"]',
+ language: '[data-plyr="language"]',
+ quality: '[data-plyr="quality"]'
+ },
+ display: {
+ currentTime: '.plyr__time--current',
+ duration: '.plyr__time--duration',
+ buffer: '.plyr__progress--buffer',
+ played: '.plyr__progress--played',
+ loop: '.plyr__progress--loop',
+ volume: '.plyr__volume--display'
+ },
+ progress: '.plyr__progress',
+ captions: '.plyr__captions',
+ menu: {
+ quality: '.js-plyr__menu__list--quality'
+ }
+ },
+
+ // Class hooks added to the player in different states
+ classNames: {
+ video: 'plyr__video-wrapper',
+ embed: 'plyr__video-embed',
+ poster: 'plyr__poster',
+ ads: 'plyr__ads',
+ control: 'plyr__control',
+ type: 'plyr--{0}',
+ provider: 'plyr--{0}',
+ playing: 'plyr--playing',
+ paused: 'plyr--paused',
+ stopped: 'plyr--stopped',
+ loading: 'plyr--loading',
+ error: 'plyr--has-error',
+ hover: 'plyr--hover',
+ tooltip: 'plyr__tooltip',
+ cues: 'plyr__cues',
+ hidden: 'plyr__sr-only',
+ hideControls: 'plyr--hide-controls',
+ isIos: 'plyr--is-ios',
+ isTouch: 'plyr--is-touch',
+ uiSupported: 'plyr--full-ui',
+ noTransition: 'plyr--no-transition',
+ menu: {
+ value: 'plyr__menu__value',
+ badge: 'plyr__badge',
+ open: 'plyr--menu-open'
+ },
+ captions: {
+ enabled: 'plyr--captions-enabled',
+ active: 'plyr--captions-active'
+ },
+ fullscreen: {
+ enabled: 'plyr--fullscreen-enabled',
+ fallback: 'plyr--fullscreen-fallback'
+ },
+ pip: {
+ supported: 'plyr--pip-supported',
+ active: 'plyr--pip-active'
+ },
+ airplay: {
+ supported: 'plyr--airplay-supported',
+ active: 'plyr--airplay-active'
+ },
+ tabFocus: 'plyr__tab-focus'
+ },
+
+ // Embed attributes
+ attributes: {
+ embed: {
+ provider: 'data-plyr-provider',
+ id: 'data-plyr-embed-id'
+ }
+ },
+
+ // API keys
+ keys: {
+ google: null
+ },
+
+ // Advertisements plugin
+ // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio
+ ads: {
+ enabled: false,
+ publisherId: ''
+ }
+};
+
+// ==========================================================================
+
var browser$2 = utils.getBrowser();
+function onChange() {
+ if (!this.enabled) {
+ return;
+ }
+
+ // Update toggle button
+ var button = this.player.elements.buttons.fullscreen;
+ if (utils.is.element(button)) {
+ utils.toggleState(button, this.active);
+ }
+
+ // Trigger an event
+ utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);
+
+ // Trap focus in container
+ if (!browser$2.isIos) {
+ utils.trapFocus.call(this.player, this.target, this.active);
+ }
+}
+
+function toggleFallback() {
+ var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+ // Store or restore scroll position
+ if (toggle) {
+ this.scrollPosition = {
+ x: window.scrollX || 0,
+ y: window.scrollY || 0
+ };
+ } else {
+ window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);
+ }
+
+ // Toggle scroll
+ document.body.style.overflow = toggle ? 'hidden' : '';
+
+ // Toggle class hook
+ utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);
+
+ // Toggle button and fire events
+ onChange.call(this);
+}
+
+var Fullscreen = function () {
+ function Fullscreen(player) {
+ var _this = this;
+
+ classCallCheck(this, Fullscreen);
+
+ // Keep reference to parent
+ this.player = player;
+
+ // Get prefix
+ this.prefix = Fullscreen.prefix;
+ this.property = Fullscreen.property;
+
+ // Scroll position
+ this.scrollPosition = { x: 0, y: 0 };
+
+ // Register event listeners
+ // Handle event (incase user presses escape etc)
+ utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : this.prefix + 'fullscreenchange', function () {
+ // TODO: Filter for target??
+ onChange.call(_this);
+ });
+
+ // Fullscreen toggle on double click
+ utils.on(this.player.elements.container, 'dblclick', function (event) {
+ // Ignore double click in controls
+ if (utils.is.element(_this.player.elements.controls) && _this.player.elements.controls.contains(event.target)) {
+ return;
+ }
+
+ _this.toggle();
+ });
+
+ // Update the UI
+ this.update();
+ }
+
+ // Determine if native supported
+
+
+ createClass(Fullscreen, [{
+ key: 'update',
+
+
+ // Update UI
+ value: function update() {
+ if (this.enabled) {
+ this.player.debug.log((Fullscreen.native ? 'Native' : 'Fallback') + ' fullscreen enabled');
+ } else {
+ this.player.debug.log('Fullscreen not supported and fallback disabled');
+ }
+
+ // Add styling hook to show button
+ utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);
+ }
+
+ // Make an element fullscreen
+
+ }, {
+ key: 'enter',
+ value: function enter() {
+ if (!this.enabled) {
+ return;
+ }
+
+ // iOS native fullscreen doesn't need the request step
+ if (browser$2.isIos && this.player.config.fullscreen.iosNative) {
+ if (this.player.playing) {
+ this.target.webkitEnterFullscreen();
+ }
+ } else if (!Fullscreen.native) {
+ toggleFallback.call(this, true);
+ } else if (!this.prefix) {
+ this.target.requestFullscreen();
+ } else if (!utils.is.empty(this.prefix)) {
+ this.target[this.prefix + 'Request' + this.property]();
+ }
+ }
+
+ // Bail from fullscreen
+
+ }, {
+ key: 'exit',
+ value: function exit() {
+ if (!this.enabled) {
+ return;
+ }
+
+ // iOS native fullscreen
+ if (browser$2.isIos && this.player.config.fullscreen.iosNative) {
+ this.target.webkitExitFullscreen();
+ this.player.play();
+ } else if (!Fullscreen.native) {
+ toggleFallback.call(this, false);
+ } else if (!this.prefix) {
+ (document.cancelFullScreen || document.exitFullscreen).call(document);
+ } else if (!utils.is.empty(this.prefix)) {
+ var action = this.prefix === 'moz' ? 'Cancel' : 'Exit';
+ document['' + this.prefix + action + this.property]();
+ }
+ }
+
+ // Toggle state
+
+ }, {
+ key: 'toggle',
+ value: function toggle() {
+ if (!this.active) {
+ this.enter();
+ } else {
+ this.exit();
+ }
+ }
+ }, {
+ key: 'enabled',
+
+
+ // Determine if fullscreen is enabled
+ get: function get() {
+ return (Fullscreen.native || this.player.config.fullscreen.fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;
+ }
+
+ // Get active state
+
+ }, {
+ key: 'active',
+ get: function get() {
+ if (!this.enabled) {
+ return false;
+ }
+
+ // Fallback using classname
+ if (!Fullscreen.native) {
+ return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);
+ }
+
+ var element = !this.prefix ? document.fullscreenElement : document['' + this.prefix + this.property + 'Element'];
+
+ return element === this.target;
+ }
+
+ // Get target element
+
+ }, {
+ key: 'target',
+ get: function get() {
+ return browser$2.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;
+ }
+ }], [{
+ key: 'native',
+ get: function get() {
+ return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);
+ }
+
+ // Get the prefix for handlers
+
+ }, {
+ key: 'prefix',
+ get: function get() {
+ // No prefix
+ if (utils.is.function(document.exitFullscreen)) {
+ return '';
+ }
+
+ // Check for fullscreen support by vendor prefix
+ var value = '';
+ var prefixes = ['webkit', 'moz', 'ms'];
+
+ prefixes.some(function (pre) {
+ if (utils.is.function(document[pre + 'ExitFullscreen']) || utils.is.function(document[pre + 'CancelFullScreen'])) {
+ value = pre;
+ return true;
+ }
+
+ return false;
+ });
+
+ return value;
+ }
+ }, {
+ key: 'property',
+ get: function get() {
+ return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';
+ }
+ }]);
+ return Fullscreen;
+}();
+
+// ==========================================================================
+
+// Sniff out the browser
+var browser$3 = utils.getBrowser();
+
var Listeners = function () {
function Listeners(player) {
classCallCheck(this, Listeners);
@@ -10383,12 +9545,9 @@ var Listeners = function () {
// Handle the media finishing
utils.on(this.player.media, 'ended', function () {
// Show poster on end
- if (_this3.player.isHTML5 && _this3.player.isVideo && _this3.player.config.showPosterOnEnd) {
+ if (_this3.player.isHTML5 && _this3.player.isVideo && _this3.player.config.resetOnEnd) {
// Restart
_this3.player.restart();
-
- // Re-load media
- _this3.player.media.load();
}
});
@@ -10403,7 +9562,7 @@ var Listeners = function () {
});
// Handle play/pause
- utils.on(this.player.media, 'playing play pause ended emptied', function (event) {
+ utils.on(this.player.media, 'playing play pause ended emptied timeupdate', function (event) {
return ui.checkPlaying.call(_this3.player, event);
});
@@ -10535,7 +9694,7 @@ var Listeners = function () {
var _this4 = this;
// IE doesn't support input event, so we fallback to change
- var inputEvent = browser$2.isIE ? 'change' : 'input';
+ var inputEvent = browser$3.isIE ? 'change' : 'input';
// Run default and custom handlers
var proxy = function proxy(event, defaultHandler, customHandlerKey) {
@@ -10608,21 +9767,31 @@ var Listeners = function () {
on(this.player.elements.settings.form, 'click', function (event) {
event.stopPropagation();
+ // Go back to home tab on click
+ var showHomeTab = function showHomeTab() {
+ var id = 'plyr-settings-' + _this4.player.id + '-home';
+ controls.showTab.call(_this4.player, id);
+ };
+
// Settings menu items - use event delegation as items are added/removed
if (utils.matches(event.target, _this4.player.config.selectors.inputs.language)) {
proxy(event, function () {
_this4.player.language = event.target.value;
+ showHomeTab();
}, 'language');
} else if (utils.matches(event.target, _this4.player.config.selectors.inputs.quality)) {
proxy(event, function () {
_this4.player.quality = event.target.value;
+ showHomeTab();
}, 'quality');
} else if (utils.matches(event.target, _this4.player.config.selectors.inputs.speed)) {
proxy(event, function () {
_this4.player.speed = parseFloat(event.target.value);
+ showHomeTab();
}, 'speed');
} else {
- controls.showTab.call(_this4.player, event);
+ var tab = event.target;
+ controls.showTab.call(_this4.player, tab.getAttribute('aria-controls'));
}
});
@@ -10651,7 +9820,7 @@ var Listeners = function () {
}, 'volume');
// Polyfill for lower fill in <input type="range"> for webkit
- if (browser$2.isWebkit) {
+ if (browser$3.isWebkit) {
on(utils.getElements.call(this.player, 'input[type="range"]'), 'input', function (event) {
controls.updateRangeFill.call(_this4.player, event.target);
});
@@ -10730,84 +9899,929 @@ var Listeners = function () {
// ==========================================================================
-var Storage = function () {
- function Storage(player) {
- classCallCheck(this, Storage);
+var vimeo = {
+ setup: function setup() {
+ var _this = this;
- this.enabled = player.config.storage.enabled;
- this.key = player.config.storage.key;
- }
+ // Add embed class for responsive
+ utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);
- // Check for actual support (see if we can use it)
+ // Set intial ratio
+ vimeo.setAspectRatio.call(this);
+ // Load the API if not already
+ if (!utils.is.object(window.Vimeo)) {
+ utils.loadScript(this.config.urls.vimeo.sdk).then(function () {
+ vimeo.ready.call(_this);
+ }).catch(function (error) {
+ _this.debug.warn('Vimeo API failed to load', error);
+ });
+ } else {
+ vimeo.ready.call(this);
+ }
+ },
- createClass(Storage, [{
- key: 'get',
- value: function get(key) {
- if (!Storage.supported) {
- return null;
- }
- var store = window.localStorage.getItem(this.key);
+ // Set aspect ratio
+ // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI
+ setAspectRatio: function setAspectRatio(input) {
+ var ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');
+ var padding = 100 / ratio[0] * ratio[1];
+ this.elements.wrapper.style.paddingBottom = padding + '%';
- if (utils.is.empty(store)) {
- return null;
- }
+ if (this.supported.ui) {
+ var height = 240;
+ var offset = (height - padding) / (height / 50);
- var json = JSON.parse(store);
+ this.media.style.transform = 'translateY(-' + offset + '%)';
+ }
+ },
- return utils.is.string(key) && key.length ? json[key] : json;
+
+ // API Ready
+ ready: function ready() {
+ var _this2 = this;
+
+ var player = this;
+
+ // Get Vimeo params for the iframe
+ var options = {
+ loop: player.config.loop.active,
+ autoplay: player.autoplay,
+ byline: false,
+ portrait: false,
+ title: false,
+ speed: true,
+ transparent: 0,
+ gesture: 'media',
+ playsinline: !this.config.fullscreen.iosNative
+ };
+ var params = utils.buildUrlParams(options);
+
+ // Get the source URL or ID
+ var source = player.media.getAttribute('src');
+
+ // Get from <div> if needed
+ if (utils.is.empty(source)) {
+ source = player.media.getAttribute(player.config.attributes.embed.id);
}
- }, {
- key: 'set',
- value: function set(object) {
- // Bail if we don't have localStorage support or it's disabled
- if (!Storage.supported || !this.enabled) {
+
+ var id = utils.parseVimeoId(source);
+
+ // Build an iframe
+ var iframe = utils.createElement('iframe');
+ var src = utils.format(player.config.urls.vimeo.iframe, id, params);
+ iframe.setAttribute('src', src);
+ iframe.setAttribute('allowfullscreen', '');
+ iframe.setAttribute('allowtransparency', '');
+ iframe.setAttribute('allow', 'autoplay');
+
+ // Inject the package
+ var wrapper = utils.createElement('div');
+ wrapper.appendChild(iframe);
+ player.media = utils.replaceElement(wrapper, player.media);
+
+ // Get poster image
+ utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(function (response) {
+ if (utils.is.empty(response)) {
return;
}
- // Can only store objectst
- if (!utils.is.object(object)) {
- return;
+ // Get the URL for thumbnail
+ var url = new URL(response[0].thumbnail_large);
+
+ // Get original image
+ url.pathname = url.pathname.split('_')[0] + '.jpg';
+
+ // Set attribute
+ player.media.setAttribute('poster', url.href);
+
+ // Update
+ ui.setPoster.call(player);
+ });
+
+ // Setup instance
+ // https://github.com/vimeo/player.js
+ player.embed = new window.Vimeo.Player(iframe);
+
+ player.media.paused = true;
+ player.media.currentTime = 0;
+
+ // Disable native text track rendering
+ if (player.supported.ui) {
+ player.embed.disableTextTrack();
+ }
+
+ // Create a faux HTML5 API using the Vimeo API
+ player.media.play = function () {
+ player.embed.play().then(function () {
+ player.media.paused = false;
+ });
+ };
+
+ player.media.pause = function () {
+ player.embed.pause().then(function () {
+ player.media.paused = true;
+ });
+ };
+
+ player.media.stop = function () {
+ player.pause();
+ player.currentTime = 0;
+ };
+
+ // Seeking
+ var currentTime = player.media.currentTime;
+
+ Object.defineProperty(player.media, 'currentTime', {
+ get: function get() {
+ return currentTime;
+ },
+ set: function set(time) {
+ // Get current paused state
+ // Vimeo will automatically play on seek
+ var paused = player.media.paused;
+
+ // Set seeking flag
+
+ player.media.seeking = true;
+
+ // Trigger seeking
+ utils.dispatchEvent.call(player, player.media, 'seeking');
+
+ // Seek after events
+ player.embed.setCurrentTime(time).catch(function () {
+ // Do nothing
+ });
+
+ // Restore pause state
+ if (paused) {
+ player.pause();
+ }
}
+ });
- // Get current storage
- var storage = this.get();
+ // Playback speed
+ var speed = player.config.speed.selected;
+ Object.defineProperty(player.media, 'playbackRate', {
+ get: function get() {
+ return speed;
+ },
+ set: function set(input) {
+ player.embed.setPlaybackRate(input).then(function () {
+ speed = input;
+ utils.dispatchEvent.call(player, player.media, 'ratechange');
+ }).catch(function (error) {
+ // Hide menu item (and menu if empty)
+ if (error.name === 'Error') {
+ controls.setSpeedMenu.call(player, []);
+ }
+ });
+ }
+ });
- // Default to empty object
- if (utils.is.empty(storage)) {
- storage = {};
+ // Volume
+ var volume = player.config.volume;
+
+ Object.defineProperty(player.media, 'volume', {
+ get: function get() {
+ return volume;
+ },
+ set: function set(input) {
+ player.embed.setVolume(input).then(function () {
+ volume = input;
+ utils.dispatchEvent.call(player, player.media, 'volumechange');
+ });
}
+ });
- // Update the working copy of the values
- utils.extend(storage, object);
+ // Muted
+ var muted = player.config.muted;
- // Update storage
- window.localStorage.setItem(this.key, JSON.stringify(storage));
+ Object.defineProperty(player.media, 'muted', {
+ get: function get() {
+ return muted;
+ },
+ set: function set(input) {
+ var toggle = utils.is.boolean(input) ? input : false;
+
+ player.embed.setVolume(toggle ? 0 : player.config.volume).then(function () {
+ muted = toggle;
+ utils.dispatchEvent.call(player, player.media, 'volumechange');
+ });
+ }
+ });
+
+ // Loop
+ var loop = player.config.loop;
+
+ Object.defineProperty(player.media, 'loop', {
+ get: function get() {
+ return loop;
+ },
+ set: function set(input) {
+ var toggle = utils.is.boolean(input) ? input : player.config.loop.active;
+
+ player.embed.setLoop(toggle).then(function () {
+ loop = toggle;
+ });
+ }
+ });
+
+ // Source
+ var currentSrc = void 0;
+ player.embed.getVideoUrl().then(function (value) {
+ currentSrc = value;
+ }).catch(function (error) {
+ _this2.debug.warn(error);
+ });
+
+ Object.defineProperty(player.media, 'currentSrc', {
+ get: function get() {
+ return currentSrc;
+ }
+ });
+
+ // Ended
+ Object.defineProperty(player.media, 'ended', {
+ get: function get() {
+ return player.currentTime === player.duration;
+ }
+ });
+
+ // Set aspect ratio based on video size
+ Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(function (dimensions) {
+ var ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);
+ vimeo.setAspectRatio.call(_this2, ratio);
+ });
+
+ // Set autopause
+ player.embed.setAutopause(player.config.autopause).then(function (state) {
+ player.config.autopause = state;
+ });
+
+ // Get title
+ player.embed.getVideoTitle().then(function (title) {
+ player.config.title = title;
+ ui.setTitle.call(_this2);
+ });
+
+ // Get current time
+ player.embed.getCurrentTime().then(function (value) {
+ currentTime = value;
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+ });
+
+ // Get duration
+ player.embed.getDuration().then(function (value) {
+ player.media.duration = value;
+ utils.dispatchEvent.call(player, player.media, 'durationchange');
+ });
+
+ // Get captions
+ player.embed.getTextTracks().then(function (tracks) {
+ player.media.textTracks = tracks;
+ captions.setup.call(player);
+ });
+
+ player.embed.on('cuechange', function (data) {
+ var cue = null;
+
+ if (data.cues.length) {
+ cue = utils.stripHTML(data.cues[0].text);
+ }
+
+ captions.setText.call(player, cue);
+ });
+
+ player.embed.on('loaded', function () {
+ if (utils.is.element(player.embed.element) && player.supported.ui) {
+ var frame = player.embed.element;
+
+ // Fix keyboard focus issues
+ // https://github.com/sampotts/plyr/issues/317
+ frame.setAttribute('tabindex', -1);
+ }
+ });
+
+ player.embed.on('play', function () {
+ // Only fire play if paused before
+ if (player.media.paused) {
+ utils.dispatchEvent.call(player, player.media, 'play');
+ }
+ player.media.paused = false;
+ utils.dispatchEvent.call(player, player.media, 'playing');
+ });
+
+ player.embed.on('pause', function () {
+ player.media.paused = true;
+ utils.dispatchEvent.call(player, player.media, 'pause');
+ });
+
+ player.embed.on('timeupdate', function (data) {
+ player.media.seeking = false;
+ currentTime = data.seconds;
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+ });
+
+ player.embed.on('progress', function (data) {
+ player.media.buffered = data.percent;
+ utils.dispatchEvent.call(player, player.media, 'progress');
+
+ // Check all loaded
+ if (parseInt(data.percent, 10) === 1) {
+ utils.dispatchEvent.call(player, player.media, 'canplaythrough');
+ }
+
+ // Get duration as if we do it before load, it gives an incorrect value
+ // https://github.com/sampotts/plyr/issues/891
+ player.embed.getDuration().then(function (value) {
+ if (value !== player.media.duration) {
+ player.media.duration = value;
+ utils.dispatchEvent.call(player, player.media, 'durationchange');
+ }
+ });
+ });
+
+ player.embed.on('seeked', function () {
+ player.media.seeking = false;
+ utils.dispatchEvent.call(player, player.media, 'seeked');
+ utils.dispatchEvent.call(player, player.media, 'play');
+ });
+
+ player.embed.on('ended', function () {
+ player.media.paused = true;
+ utils.dispatchEvent.call(player, player.media, 'ended');
+ });
+
+ player.embed.on('error', function (detail) {
+ player.media.error = detail;
+ utils.dispatchEvent.call(player, player.media, 'error');
+ });
+
+ // Rebuild UI
+ setTimeout(function () {
+ return ui.build.call(player);
+ }, 0);
+ }
+};
+
+// ==========================================================================
+
+// Standardise YouTube quality unit
+function mapQualityUnit(input) {
+ switch (input) {
+ case 'hd2160':
+ return 2160;
+
+ case 2160:
+ return 'hd2160';
+
+ case 'hd1440':
+ return 1440;
+
+ case 1440:
+ return 'hd1440';
+
+ case 'hd1080':
+ return 1080;
+
+ case 1080:
+ return 'hd1080';
+
+ case 'hd720':
+ return 720;
+
+ case 720:
+ return 'hd720';
+
+ case 'large':
+ return 480;
+
+ case 480:
+ return 'large';
+
+ case 'medium':
+ return 360;
+
+ case 360:
+ return 'medium';
+
+ case 'small':
+ return 240;
+
+ case 240:
+ return 'small';
+
+ default:
+ return 'default';
+ }
+}
+
+function mapQualityUnits(levels) {
+ if (utils.is.empty(levels)) {
+ return levels;
+ }
+
+ return utils.dedupe(levels.map(function (level) {
+ return mapQualityUnit(level);
+ }));
+}
+
+var youtube = {
+ setup: function setup() {
+ var _this = this;
+
+ // Add embed class for responsive
+ utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);
+
+ // Set aspect ratio
+ youtube.setAspectRatio.call(this);
+
+ // Setup API
+ if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {
+ youtube.ready.call(this);
+ } else {
+ // Load the API
+ utils.loadScript(this.config.urls.youtube.sdk).catch(function (error) {
+ _this.debug.warn('YouTube API failed to load', error);
+ });
+
+ // Setup callback for the API
+ // YouTube has it's own system of course...
+ window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];
+
+ // Add to queue
+ window.onYouTubeReadyCallbacks.push(function () {
+ youtube.ready.call(_this);
+ });
+
+ // Set callback to process queue
+ window.onYouTubeIframeAPIReady = function () {
+ window.onYouTubeReadyCallbacks.forEach(function (callback) {
+ callback();
+ });
+ };
}
- }], [{
- key: 'supported',
- get: function get() {
- try {
- if (!('localStorage' in window)) {
- return false;
+ },
+
+
+ // Get the media title
+ getTitle: function getTitle(videoId) {
+ var _this2 = this;
+
+ // Try via undocumented API method first
+ // This method disappears now and then though...
+ // https://github.com/sampotts/plyr/issues/709
+ if (utils.is.function(this.embed.getVideoData)) {
+ var _embed$getVideoData = this.embed.getVideoData(),
+ title = _embed$getVideoData.title;
+
+ if (utils.is.empty(title)) {
+ this.config.title = title;
+ ui.setTitle.call(this);
+ return;
+ }
+ }
+
+ // Or via Google API
+ var key = this.config.keys.google;
+ if (utils.is.string(key) && !utils.is.empty(key)) {
+ var url = utils.format(this.config.urls.youtube.api, videoId, key);
+
+ utils.fetch(url).then(function (result) {
+ if (utils.is.object(result)) {
+ _this2.config.title = result.items[0].snippet.title;
+ ui.setTitle.call(_this2);
}
+ }).catch(function () {});
+ }
+ },
- var test = '___test';
- // Try to use it (it might be disabled, e.g. user is in private mode)
- // see: https://github.com/sampotts/plyr/issues/131
- window.localStorage.setItem(test, test);
- window.localStorage.removeItem(test);
+ // Set aspect ratio
+ setAspectRatio: function setAspectRatio() {
+ var ratio = this.config.ratio.split(':');
+ this.elements.wrapper.style.paddingBottom = 100 / ratio[0] * ratio[1] + '%';
+ },
- return true;
- } catch (e) {
- return false;
+
+ // API ready
+ ready: function ready() {
+ var player = this;
+
+ // Ignore already setup (race condition)
+ var currentId = player.media.getAttribute('id');
+ if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {
+ return;
+ }
+
+ // Get the source URL or ID
+ var source = player.media.getAttribute('src');
+
+ // Get from <div> if needed
+ if (utils.is.empty(source)) {
+ source = player.media.getAttribute(this.config.attributes.embed.id);
+ }
+
+ // Replace the <iframe> with a <div> due to YouTube API issues
+ var videoId = utils.parseYouTubeId(source);
+ var id = utils.generateId(player.provider);
+ var container = utils.createElement('div', { id: id });
+ player.media = utils.replaceElement(container, player.media);
+
+ // Set poster image
+ player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));
+
+ // Setup instance
+ // https://developers.google.com/youtube/iframe_api_reference
+ player.embed = new window.YT.Player(id, {
+ videoId: videoId,
+ playerVars: {
+ autoplay: player.config.autoplay ? 1 : 0, // Autoplay
+ controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported
+ rel: 0, // No related vids
+ showinfo: 0, // Hide info
+ iv_load_policy: 3, // Hide annotations
+ modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)
+ disablekb: 1, // Disable keyboard as we handle it
+ playsinline: 1, // Allow iOS inline playback
+
+ // Tracking for stats
+ // origin: window ? `${window.location.protocol}//${window.location.host}` : null,
+ widget_referrer: window ? window.location.href : null,
+
+ // Captions are flaky on YouTube
+ cc_load_policy: player.captions.active ? 1 : 0,
+ cc_lang_pref: player.config.captions.language
+ },
+ events: {
+ onError: function onError(event) {
+ // If we've already fired an error, don't do it again
+ // YouTube fires onError twice
+ if (utils.is.object(player.media.error)) {
+ return;
+ }
+
+ var detail = {
+ code: event.data
+ };
+
+ // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError
+ switch (event.data) {
+ case 2:
+ detail.message = 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';
+ break;
+
+ case 5:
+ detail.message = 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';
+ break;
+
+ case 100:
+ detail.message = 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';
+ break;
+
+ case 101:
+ case 150:
+ detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';
+ break;
+
+ default:
+ detail.message = 'An unknown error occured';
+ break;
+ }
+
+ player.media.error = detail;
+
+ utils.dispatchEvent.call(player, player.media, 'error');
+ },
+ onPlaybackQualityChange: function onPlaybackQualityChange() {
+ utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {
+ quality: player.media.quality
+ });
+ },
+ onPlaybackRateChange: function onPlaybackRateChange(event) {
+ // Get the instance
+ var instance = event.target;
+
+ // Get current speed
+ player.media.playbackRate = instance.getPlaybackRate();
+
+ utils.dispatchEvent.call(player, player.media, 'ratechange');
+ },
+ onReady: function onReady(event) {
+ // Get the instance
+ var instance = event.target;
+
+ // Get the title
+ youtube.getTitle.call(player, videoId);
+
+ // Create a faux HTML5 API using the YouTube API
+ player.media.play = function () {
+ instance.playVideo();
+ };
+
+ player.media.pause = function () {
+ instance.pauseVideo();
+ };
+
+ player.media.stop = function () {
+ instance.stopVideo();
+ };
+
+ player.media.duration = instance.getDuration();
+ player.media.paused = true;
+
+ // Seeking
+ player.media.currentTime = 0;
+ Object.defineProperty(player.media, 'currentTime', {
+ get: function get() {
+ return Number(instance.getCurrentTime());
+ },
+ set: function set(time) {
+ // Vimeo will automatically play on seek
+ var paused = player.media.paused;
+
+ // Set seeking flag
+
+ player.media.seeking = true;
+
+ // Trigger seeking
+ utils.dispatchEvent.call(player, player.media, 'seeking');
+
+ // Seek after events sent
+ instance.seekTo(time);
+
+ // Restore pause state
+ if (paused) {
+ player.pause();
+ }
+ }
+ });
+
+ // Playback speed
+ Object.defineProperty(player.media, 'playbackRate', {
+ get: function get() {
+ return instance.getPlaybackRate();
+ },
+ set: function set(input) {
+ instance.setPlaybackRate(input);
+ }
+ });
+
+ // Quality
+ Object.defineProperty(player.media, 'quality', {
+ get: function get() {
+ return mapQualityUnit(instance.getPlaybackQuality());
+ },
+ set: function set(input) {
+ var quality = input;
+
+ // Set via API
+ instance.setPlaybackQuality(mapQualityUnit(quality));
+
+ // Trigger request event
+ utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {
+ quality: quality
+ });
+ }
+ });
+
+ // Volume
+ var volume = player.config.volume;
+
+ Object.defineProperty(player.media, 'volume', {
+ get: function get() {
+ return volume;
+ },
+ set: function set(input) {
+ volume = input;
+ instance.setVolume(volume * 100);
+ utils.dispatchEvent.call(player, player.media, 'volumechange');
+ }
+ });
+
+ // Muted
+ var muted = player.config.muted;
+
+ Object.defineProperty(player.media, 'muted', {
+ get: function get() {
+ return muted;
+ },
+ set: function set(input) {
+ var toggle = utils.is.boolean(input) ? input : muted;
+ muted = toggle;
+ instance[toggle ? 'mute' : 'unMute']();
+ utils.dispatchEvent.call(player, player.media, 'volumechange');
+ }
+ });
+
+ // Source
+ Object.defineProperty(player.media, 'currentSrc', {
+ get: function get() {
+ return instance.getVideoUrl();
+ }
+ });
+
+ // Ended
+ Object.defineProperty(player.media, 'ended', {
+ get: function get() {
+ return player.currentTime === player.duration;
+ }
+ });
+
+ // Get available speeds
+ player.options.speed = instance.getAvailablePlaybackRates();
+
+ // Set the tabindex to avoid focus entering iframe
+ if (player.supported.ui) {
+ player.media.setAttribute('tabindex', -1);
+ }
+
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+ utils.dispatchEvent.call(player, player.media, 'durationchange');
+
+ // Reset timer
+ clearInterval(player.timers.buffering);
+
+ // Setup buffering
+ player.timers.buffering = setInterval(function () {
+ // Get loaded % from YouTube
+ player.media.buffered = instance.getVideoLoadedFraction();
+
+ // Trigger progress only when we actually buffer something
+ if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {
+ utils.dispatchEvent.call(player, player.media, 'progress');
+ }
+
+ // Set last buffer point
+ player.media.lastBuffered = player.media.buffered;
+
+ // Bail if we're at 100%
+ if (player.media.buffered === 1) {
+ clearInterval(player.timers.buffering);
+
+ // Trigger event
+ utils.dispatchEvent.call(player, player.media, 'canplaythrough');
+ }
+ }, 200);
+
+ // Rebuild UI
+ setTimeout(function () {
+ return ui.build.call(player);
+ }, 50);
+ },
+ onStateChange: function onStateChange(event) {
+ // Get the instance
+ var instance = event.target;
+
+ // Reset timer
+ clearInterval(player.timers.playing);
+
+ // Handle events
+ // -1 Unstarted
+ // 0 Ended
+ // 1 Playing
+ // 2 Paused
+ // 3 Buffering
+ // 5 Video cued
+ switch (event.data) {
+ case -1:
+ // Update scrubber
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+
+ // Get loaded % from YouTube
+ player.media.buffered = instance.getVideoLoadedFraction();
+ utils.dispatchEvent.call(player, player.media, 'progress');
+
+ break;
+
+ case 0:
+ player.media.paused = true;
+
+ // YouTube doesn't support loop for a single video, so mimick it.
+ if (player.media.loop) {
+ // YouTube needs a call to `stopVideo` before playing again
+ instance.stopVideo();
+ instance.playVideo();
+ } else {
+ utils.dispatchEvent.call(player, player.media, 'ended');
+ }
+
+ break;
+
+ case 1:
+ // If we were seeking, fire seeked event
+ if (player.media.seeking) {
+ utils.dispatchEvent.call(player, player.media, 'seeked');
+ }
+ player.media.seeking = false;
+
+ // Only fire play if paused before
+ if (player.media.paused) {
+ utils.dispatchEvent.call(player, player.media, 'play');
+ }
+ player.media.paused = false;
+
+ utils.dispatchEvent.call(player, player.media, 'playing');
+
+ // Poll to get playback progress
+ player.timers.playing = setInterval(function () {
+ utils.dispatchEvent.call(player, player.media, 'timeupdate');
+ }, 50);
+
+ // Check duration again due to YouTube bug
+ // https://github.com/sampotts/plyr/issues/374
+ // https://code.google.com/p/gdata-issues/issues/detail?id=8690
+ if (player.media.duration !== instance.getDuration()) {
+ player.media.duration = instance.getDuration();
+ utils.dispatchEvent.call(player, player.media, 'durationchange');
+ }
+
+ // Get quality
+ controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));
+
+ break;
+
+ case 2:
+ player.media.paused = true;
+
+ utils.dispatchEvent.call(player, player.media, 'pause');
+
+ break;
+
+ default:
+ break;
+ }
+
+ utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {
+ code: event.data
+ });
+ }
}
+ });
+ }
+};
+
+// ==========================================================================
+
+var media = {
+ // Setup media
+ setup: function setup() {
+ // If there's no media, bail
+ if (!this.media) {
+ this.debug.warn('No media element found!');
+ return;
}
- }]);
- return Storage;
-}();
+
+ // Add type class
+ utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);
+
+ // Add provider class
+ utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);
+
+ // Add video class for embeds
+ // This will require changes if audio embeds are added
+ if (this.isEmbed) {
+ utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);
+ }
+
+ // Inject the player wrapper
+ if (this.isVideo) {
+ // Create the wrapper div
+ this.elements.wrapper = utils.createElement('div', {
+ class: this.config.classNames.video
+ });
+
+ // Wrap the video in a container
+ utils.wrap(this.media, this.elements.wrapper);
+
+ // Faux poster container
+ this.elements.poster = utils.createElement('span', {
+ class: this.config.classNames.poster
+ });
+
+ this.elements.wrapper.appendChild(this.elements.poster);
+ }
+
+ if (this.isEmbed) {
+ switch (this.provider) {
+ case 'youtube':
+ youtube.setup.call(this);
+ break;
+
+ case 'vimeo':
+ vimeo.setup.call(this);
+ break;
+
+ default:
+ break;
+ }
+ } else if (this.isHTML5) {
+ html5.extend.call(this);
+ }
+ }
+};
// ==========================================================================
@@ -10863,7 +10877,7 @@ var Ads = function () {
if (this.enabled) {
// Check if the Google IMA3 SDK is loaded or load it ourselves
if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {
- utils.loadScript(this.player.config.urls.googleIMA.api).then(function () {
+ utils.loadScript(this.player.config.urls.googleIMA.sdk).then(function () {
_this2.ready();
}).catch(function () {
// Script failed to load or is blocked
@@ -10973,6 +10987,9 @@ var Ads = function () {
// We only overlay ads as we only support video.
request.forceNonLinearFullSlot = false;
+ // Mute based on current state
+ request.setAdWillPlayMuted(!this.player.muted);
+
this.loader.requestAds(request);
} catch (e) {
this.onAdError(e);
@@ -11051,7 +11068,7 @@ var Ads = function () {
// Get skippable state
// TODO: Skip button
- // this.manager.getAdSkippableState();
+ // this.player.debug.warn(this.manager.getAdSkippableState());
// Set volume to match player
this.manager.setVolume(this.player.volume);
@@ -11481,925 +11498,6 @@ var Ads = function () {
// ==========================================================================
-// Standardise YouTube quality unit
-function mapQualityUnit(input) {
- switch (input) {
- case 'hd2160':
- return 2160;
-
- case 2160:
- return 'hd2160';
-
- case 'hd1440':
- return 1440;
-
- case 1440:
- return 'hd1440';
-
- case 'hd1080':
- return 1080;
-
- case 1080:
- return 'hd1080';
-
- case 'hd720':
- return 720;
-
- case 720:
- return 'hd720';
-
- case 'large':
- return 480;
-
- case 480:
- return 'large';
-
- case 'medium':
- return 360;
-
- case 360:
- return 'medium';
-
- case 'small':
- return 240;
-
- case 240:
- return 'small';
-
- default:
- return 'default';
- }
-}
-
-function mapQualityUnits(levels) {
- if (utils.is.empty(levels)) {
- return levels;
- }
-
- return utils.dedupe(levels.map(function (level) {
- return mapQualityUnit(level);
- }));
-}
-
-var youtube = {
- setup: function setup() {
- var _this = this;
-
- // Add embed class for responsive
- utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);
-
- // Set aspect ratio
- youtube.setAspectRatio.call(this);
-
- // Setup API
- if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {
- youtube.ready.call(this);
- } else {
- // Load the API
- utils.loadScript(this.config.urls.youtube.api).catch(function (error) {
- _this.debug.warn('YouTube API failed to load', error);
- });
-
- // Setup callback for the API
- // YouTube has it's own system of course...
- window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];
-
- // Add to queue
- window.onYouTubeReadyCallbacks.push(function () {
- youtube.ready.call(_this);
- });
-
- // Set callback to process queue
- window.onYouTubeIframeAPIReady = function () {
- window.onYouTubeReadyCallbacks.forEach(function (callback) {
- callback();
- });
- };
- }
- },
-
-
- // Get the media title
- getTitle: function getTitle(videoId) {
- var _this2 = this;
-
- // Try via undocumented API method first
- // This method disappears now and then though...
- // https://github.com/sampotts/plyr/issues/709
- if (utils.is.function(this.embed.getVideoData)) {
- var _embed$getVideoData = this.embed.getVideoData(),
- title = _embed$getVideoData.title;
-
- if (utils.is.empty(title)) {
- this.config.title = title;
- ui.setTitle.call(this);
- return;
- }
- }
-
- // Or via Google API
- var key = this.config.keys.google;
- if (utils.is.string(key) && !utils.is.empty(key)) {
- var url = 'https://www.googleapis.com/youtube/v3/videos?id=' + videoId + '&key=' + key + '&fields=items(snippet(title))&part=snippet';
-
- utils.fetch(url).then(function (result) {
- if (utils.is.object(result)) {
- _this2.config.title = result.items[0].snippet.title;
- ui.setTitle.call(_this2);
- }
- }).catch(function () {});
- }
- },
-
-
- // Set aspect ratio
- setAspectRatio: function setAspectRatio() {
- var ratio = this.config.ratio.split(':');
- this.elements.wrapper.style.paddingBottom = 100 / ratio[0] * ratio[1] + '%';
- },
-
-
- // API ready
- ready: function ready() {
- var player = this;
-
- // Ignore already setup (race condition)
- var currentId = player.media.getAttribute('id');
- if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {
- return;
- }
-
- // Get the source URL or ID
- var source = player.media.getAttribute('src');
-
- // Get from <div> if needed
- if (utils.is.empty(source)) {
- source = player.media.getAttribute(this.config.attributes.embed.id);
- }
-
- // Replace the <iframe> with a <div> due to YouTube API issues
- var videoId = utils.parseYouTubeId(source);
- var id = utils.generateId(player.provider);
- var container = utils.createElement('div', { id: id });
- player.media = utils.replaceElement(container, player.media);
-
- // Setup instance
- // https://developers.google.com/youtube/iframe_api_reference
- player.embed = new window.YT.Player(id, {
- videoId: videoId,
- playerVars: {
- autoplay: player.config.autoplay ? 1 : 0, // Autoplay
- controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported
- rel: 0, // No related vids
- showinfo: 0, // Hide info
- iv_load_policy: 3, // Hide annotations
- modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)
- disablekb: 1, // Disable keyboard as we handle it
- playsinline: 1, // Allow iOS inline playback
-
- // Tracking for stats
- // origin: window ? `${window.location.protocol}//${window.location.host}` : null,
- widget_referrer: window ? window.location.href : null,
-
- // Captions are flaky on YouTube
- cc_load_policy: player.captions.active ? 1 : 0,
- cc_lang_pref: player.config.captions.language
- },
- events: {
- onError: function onError(event) {
- // If we've already fired an error, don't do it again
- // YouTube fires onError twice
- if (utils.is.object(player.media.error)) {
- return;
- }
-
- var detail = {
- code: event.data
- };
-
- // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError
- switch (event.data) {
- case 2:
- detail.message = 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';
- break;
-
- case 5:
- detail.message = 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';
- break;
-
- case 100:
- detail.message = 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';
- break;
-
- case 101:
- case 150:
- detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';
- break;
-
- default:
- detail.message = 'An unknown error occured';
- break;
- }
-
- player.media.error = detail;
-
- utils.dispatchEvent.call(player, player.media, 'error');
- },
- onPlaybackQualityChange: function onPlaybackQualityChange() {
- utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {
- quality: player.media.quality
- });
- },
- onPlaybackRateChange: function onPlaybackRateChange(event) {
- // Get the instance
- var instance = event.target;
-
- // Get current speed
- player.media.playbackRate = instance.getPlaybackRate();
-
- utils.dispatchEvent.call(player, player.media, 'ratechange');
- },
- onReady: function onReady(event) {
- // Get the instance
- var instance = event.target;
-
- // Get the title
- youtube.getTitle.call(player, videoId);
-
- // Create a faux HTML5 API using the YouTube API
- player.media.play = function () {
- instance.playVideo();
- };
-
- player.media.pause = function () {
- instance.pauseVideo();
- };
-
- player.media.stop = function () {
- instance.stopVideo();
- };
-
- player.media.duration = instance.getDuration();
- player.media.paused = true;
-
- // Seeking
- player.media.currentTime = 0;
- Object.defineProperty(player.media, 'currentTime', {
- get: function get() {
- return Number(instance.getCurrentTime());
- },
- set: function set(time) {
- // Vimeo will automatically play on seek
- var paused = player.media.paused;
-
- // Set seeking flag
-
- player.media.seeking = true;
-
- // Trigger seeking
- utils.dispatchEvent.call(player, player.media, 'seeking');
-
- // Seek after events sent
- instance.seekTo(time);
-
- // Restore pause state
- if (paused) {
- player.pause();
- }
- }
- });
-
- // Playback speed
- Object.defineProperty(player.media, 'playbackRate', {
- get: function get() {
- return instance.getPlaybackRate();
- },
- set: function set(input) {
- instance.setPlaybackRate(input);
- }
- });
-
- // Quality
- Object.defineProperty(player.media, 'quality', {
- get: function get() {
- return mapQualityUnit(instance.getPlaybackQuality());
- },
- set: function set(input) {
- var quality = input;
-
- // Set via API
- instance.setPlaybackQuality(mapQualityUnit(quality));
-
- // Trigger request event
- utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {
- quality: quality
- });
- }
- });
-
- // Volume
- var volume = player.config.volume;
-
- Object.defineProperty(player.media, 'volume', {
- get: function get() {
- return volume;
- },
- set: function set(input) {
- volume = input;
- instance.setVolume(volume * 100);
- utils.dispatchEvent.call(player, player.media, 'volumechange');
- }
- });
-
- // Muted
- var muted = player.config.muted;
-
- Object.defineProperty(player.media, 'muted', {
- get: function get() {
- return muted;
- },
- set: function set(input) {
- var toggle = utils.is.boolean(input) ? input : muted;
- muted = toggle;
- instance[toggle ? 'mute' : 'unMute']();
- utils.dispatchEvent.call(player, player.media, 'volumechange');
- }
- });
-
- // Source
- Object.defineProperty(player.media, 'currentSrc', {
- get: function get() {
- return instance.getVideoUrl();
- }
- });
-
- // Ended
- Object.defineProperty(player.media, 'ended', {
- get: function get() {
- return player.currentTime === player.duration;
- }
- });
-
- // Get available speeds
- player.options.speed = instance.getAvailablePlaybackRates();
-
- // Set the tabindex to avoid focus entering iframe
- if (player.supported.ui) {
- player.media.setAttribute('tabindex', -1);
- }
-
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
- utils.dispatchEvent.call(player, player.media, 'durationchange');
-
- // Reset timer
- clearInterval(player.timers.buffering);
-
- // Setup buffering
- player.timers.buffering = setInterval(function () {
- // Get loaded % from YouTube
- player.media.buffered = instance.getVideoLoadedFraction();
-
- // Trigger progress only when we actually buffer something
- if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {
- utils.dispatchEvent.call(player, player.media, 'progress');
- }
-
- // Set last buffer point
- player.media.lastBuffered = player.media.buffered;
-
- // Bail if we're at 100%
- if (player.media.buffered === 1) {
- clearInterval(player.timers.buffering);
-
- // Trigger event
- utils.dispatchEvent.call(player, player.media, 'canplaythrough');
- }
- }, 200);
-
- // Rebuild UI
- setTimeout(function () {
- return ui.build.call(player);
- }, 50);
- },
- onStateChange: function onStateChange(event) {
- // Get the instance
- var instance = event.target;
-
- // Reset timer
- clearInterval(player.timers.playing);
-
- // Handle events
- // -1 Unstarted
- // 0 Ended
- // 1 Playing
- // 2 Paused
- // 3 Buffering
- // 5 Video cued
- switch (event.data) {
- case -1:
- // Update scrubber
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
-
- // Get loaded % from YouTube
- player.media.buffered = instance.getVideoLoadedFraction();
- utils.dispatchEvent.call(player, player.media, 'progress');
-
- break;
-
- case 0:
- player.media.paused = true;
-
- // YouTube doesn't support loop for a single video, so mimick it.
- if (player.media.loop) {
- // YouTube needs a call to `stopVideo` before playing again
- instance.stopVideo();
- instance.playVideo();
- } else {
- utils.dispatchEvent.call(player, player.media, 'ended');
- }
-
- break;
-
- case 1:
- // If we were seeking, fire seeked event
- if (player.media.seeking) {
- utils.dispatchEvent.call(player, player.media, 'seeked');
- }
- player.media.seeking = false;
-
- // Only fire play if paused before
- if (player.media.paused) {
- utils.dispatchEvent.call(player, player.media, 'play');
- }
- player.media.paused = false;
-
- utils.dispatchEvent.call(player, player.media, 'playing');
-
- // Poll to get playback progress
- player.timers.playing = setInterval(function () {
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
- }, 50);
-
- // Check duration again due to YouTube bug
- // https://github.com/sampotts/plyr/issues/374
- // https://code.google.com/p/gdata-issues/issues/detail?id=8690
- if (player.media.duration !== instance.getDuration()) {
- player.media.duration = instance.getDuration();
- utils.dispatchEvent.call(player, player.media, 'durationchange');
- }
-
- // Get quality
- controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));
-
- break;
-
- case 2:
- player.media.paused = true;
-
- utils.dispatchEvent.call(player, player.media, 'pause');
-
- break;
-
- default:
- break;
- }
-
- utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {
- code: event.data
- });
- }
- }
- });
- }
-};
-
-// ==========================================================================
-
-var vimeo = {
- setup: function setup() {
- var _this = this;
-
- // Add embed class for responsive
- utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);
-
- // Set intial ratio
- vimeo.setAspectRatio.call(this);
-
- // Load the API if not already
- if (!utils.is.object(window.Vimeo)) {
- utils.loadScript(this.config.urls.vimeo.api).then(function () {
- vimeo.ready.call(_this);
- }).catch(function (error) {
- _this.debug.warn('Vimeo API failed to load', error);
- });
- } else {
- vimeo.ready.call(this);
- }
- },
-
-
- // Set aspect ratio
- // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI
- setAspectRatio: function setAspectRatio(input) {
- var ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');
- var padding = 100 / ratio[0] * ratio[1];
- this.elements.wrapper.style.paddingBottom = padding + '%';
-
- if (this.supported.ui) {
- var height = 240;
- var offset = (height - padding) / (height / 50);
-
- this.media.style.transform = 'translateY(-' + offset + '%)';
- }
- },
-
-
- // API Ready
- ready: function ready() {
- var _this2 = this;
-
- var player = this;
-
- // Get Vimeo params for the iframe
- var options = {
- loop: player.config.loop.active,
- autoplay: player.autoplay,
- byline: false,
- portrait: false,
- title: false,
- speed: true,
- transparent: 0,
- gesture: 'media',
- playsinline: !this.config.fullscreen.iosNative
- };
- var params = utils.buildUrlParams(options);
-
- // Get the source URL or ID
- var source = player.media.getAttribute('src');
-
- // Get from <div> if needed
- if (utils.is.empty(source)) {
- source = player.media.getAttribute(this.config.attributes.embed.id);
- }
-
- var id = utils.parseVimeoId(source);
-
- // Build an iframe
- var iframe = utils.createElement('iframe');
- var src = 'https://player.vimeo.com/video/' + id + '?' + params;
- iframe.setAttribute('src', src);
- iframe.setAttribute('allowfullscreen', '');
- iframe.setAttribute('allowtransparency', '');
- iframe.setAttribute('allow', 'autoplay');
-
- // Inject the package
- var wrapper = utils.createElement('div');
- wrapper.appendChild(iframe);
- player.media = utils.replaceElement(wrapper, player.media);
-
- // Setup instance
- // https://github.com/vimeo/player.js
- player.embed = new window.Vimeo.Player(iframe);
-
- player.media.paused = true;
- player.media.currentTime = 0;
-
- // Disable native text track rendering
- if (player.supported.ui) {
- player.embed.disableTextTrack();
- }
-
- // Create a faux HTML5 API using the Vimeo API
- player.media.play = function () {
- player.embed.play().then(function () {
- player.media.paused = false;
- });
- };
-
- player.media.pause = function () {
- player.embed.pause().then(function () {
- player.media.paused = true;
- });
- };
-
- player.media.stop = function () {
- player.pause();
- player.currentTime = 0;
- };
-
- // Seeking
- var currentTime = player.media.currentTime;
-
- Object.defineProperty(player.media, 'currentTime', {
- get: function get() {
- return currentTime;
- },
- set: function set(time) {
- // Get current paused state
- // Vimeo will automatically play on seek
- var paused = player.media.paused;
-
- // Set seeking flag
-
- player.media.seeking = true;
-
- // Trigger seeking
- utils.dispatchEvent.call(player, player.media, 'seeking');
-
- // Seek after events
- player.embed.setCurrentTime(time).catch(function () {
- // Do nothing
- });
-
- // Restore pause state
- if (paused) {
- player.pause();
- }
- }
- });
-
- // Playback speed
- var speed = player.config.speed.selected;
- Object.defineProperty(player.media, 'playbackRate', {
- get: function get() {
- return speed;
- },
- set: function set(input) {
- player.embed.setPlaybackRate(input).then(function () {
- speed = input;
- utils.dispatchEvent.call(player, player.media, 'ratechange');
- }).catch(function (error) {
- // Hide menu item (and menu if empty)
- if (error.name === 'Error') {
- controls.setSpeedMenu.call(player, []);
- }
- });
- }
- });
-
- // Volume
- var volume = player.config.volume;
-
- Object.defineProperty(player.media, 'volume', {
- get: function get() {
- return volume;
- },
- set: function set(input) {
- player.embed.setVolume(input).then(function () {
- volume = input;
- utils.dispatchEvent.call(player, player.media, 'volumechange');
- });
- }
- });
-
- // Muted
- var muted = player.config.muted;
-
- Object.defineProperty(player.media, 'muted', {
- get: function get() {
- return muted;
- },
- set: function set(input) {
- var toggle = utils.is.boolean(input) ? input : false;
-
- player.embed.setVolume(toggle ? 0 : player.config.volume).then(function () {
- muted = toggle;
- utils.dispatchEvent.call(player, player.media, 'volumechange');
- });
- }
- });
-
- // Loop
- var loop = player.config.loop;
-
- Object.defineProperty(player.media, 'loop', {
- get: function get() {
- return loop;
- },
- set: function set(input) {
- var toggle = utils.is.boolean(input) ? input : player.config.loop.active;
-
- player.embed.setLoop(toggle).then(function () {
- loop = toggle;
- });
- }
- });
-
- // Source
- var currentSrc = void 0;
- player.embed.getVideoUrl().then(function (value) {
- currentSrc = value;
- }).catch(function (error) {
- _this2.debug.warn(error);
- });
-
- Object.defineProperty(player.media, 'currentSrc', {
- get: function get() {
- return currentSrc;
- }
- });
-
- // Ended
- Object.defineProperty(player.media, 'ended', {
- get: function get() {
- return player.currentTime === player.duration;
- }
- });
-
- // Set aspect ratio based on video size
- Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(function (dimensions) {
- var ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);
- vimeo.setAspectRatio.call(_this2, ratio);
- });
-
- // Set autopause
- player.embed.setAutopause(player.config.autopause).then(function (state) {
- player.config.autopause = state;
- });
-
- // Get title
- player.embed.getVideoTitle().then(function (title) {
- player.config.title = title;
- ui.setTitle.call(_this2);
- });
-
- // Get current time
- player.embed.getCurrentTime().then(function (value) {
- currentTime = value;
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
- });
-
- // Get duration
- player.embed.getDuration().then(function (value) {
- player.media.duration = value;
- utils.dispatchEvent.call(player, player.media, 'durationchange');
- });
-
- // Get captions
- player.embed.getTextTracks().then(function (tracks) {
- player.media.textTracks = tracks;
- captions.setup.call(player);
- });
-
- player.embed.on('cuechange', function (data) {
- var cue = null;
-
- if (data.cues.length) {
- cue = utils.stripHTML(data.cues[0].text);
- }
-
- captions.setText.call(player, cue);
- });
-
- player.embed.on('loaded', function () {
- if (utils.is.element(player.embed.element) && player.supported.ui) {
- var frame = player.embed.element;
-
- // Fix keyboard focus issues
- // https://github.com/sampotts/plyr/issues/317
- frame.setAttribute('tabindex', -1);
- }
- });
-
- player.embed.on('play', function () {
- // Only fire play if paused before
- if (player.media.paused) {
- utils.dispatchEvent.call(player, player.media, 'play');
- }
- player.media.paused = false;
- utils.dispatchEvent.call(player, player.media, 'playing');
- });
-
- player.embed.on('pause', function () {
- player.media.paused = true;
- utils.dispatchEvent.call(player, player.media, 'pause');
- });
-
- player.embed.on('timeupdate', function (data) {
- player.media.seeking = false;
- currentTime = data.seconds;
- utils.dispatchEvent.call(player, player.media, 'timeupdate');
- });
-
- player.embed.on('progress', function (data) {
- player.media.buffered = data.percent;
- utils.dispatchEvent.call(player, player.media, 'progress');
-
- // Check all loaded
- if (parseInt(data.percent, 10) === 1) {
- utils.dispatchEvent.call(player, player.media, 'canplaythrough');
- }
-
- // Get duration as if we do it before load, it gives an incorrect value
- // https://github.com/sampotts/plyr/issues/891
- player.embed.getDuration().then(function (value) {
- if (value !== player.media.duration) {
- player.media.duration = value;
- utils.dispatchEvent.call(player, player.media, 'durationchange');
- }
- });
- });
-
- player.embed.on('seeked', function () {
- player.media.seeking = false;
- utils.dispatchEvent.call(player, player.media, 'seeked');
- utils.dispatchEvent.call(player, player.media, 'play');
- });
-
- player.embed.on('ended', function () {
- player.media.paused = true;
- utils.dispatchEvent.call(player, player.media, 'ended');
- });
-
- player.embed.on('error', function (detail) {
- player.media.error = detail;
- utils.dispatchEvent.call(player, player.media, 'error');
- });
-
- // Rebuild UI
- setTimeout(function () {
- return ui.build.call(player);
- }, 0);
- }
-};
-
-// ==========================================================================
-
-// Sniff out the browser
-var browser$3 = utils.getBrowser();
-
-var media = {
- // Setup media
- setup: function setup() {
- // If there's no media, bail
- if (!this.media) {
- this.debug.warn('No media element found!');
- return;
- }
-
- // Add type class
- utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);
-
- // Add provider class
- utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);
-
- // Add video class for embeds
- // This will require changes if audio embeds are added
- if (this.isEmbed) {
- utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);
- }
-
- if (this.supported.ui) {
- // Check for picture-in-picture support
- utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);
-
- // Check for airplay support
- utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);
-
- // If there's no autoplay attribute, assume the video is stopped and add state class
- utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);
-
- // Add iOS class
- utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser$3.isIos);
-
- // Add touch class
- utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);
- }
-
- // Inject the player wrapper
- if (this.isVideo) {
- // Create the wrapper div
- this.elements.wrapper = utils.createElement('div', {
- class: this.config.classNames.video
- });
-
- // Wrap the video in a container
- utils.wrap(this.media, this.elements.wrapper);
- }
-
- if (this.isEmbed) {
- switch (this.provider) {
- case 'youtube':
- youtube.setup.call(this);
- break;
-
- case 'vimeo':
- vimeo.setup.call(this);
- break;
-
- default:
- break;
- }
- } else if (this.isHTML5) {
- ui.setTitle.call(this);
-
- html5.extend.call(this);
- }
- }
-};
-
-// ==========================================================================
-
var source = {
// Add elements to HTML5 media (source, tracks, etc)
insertElements: function insertElements(type, attributes) {
@@ -12541,6 +11639,87 @@ var source = {
// ==========================================================================
+var Storage = function () {
+ function Storage(player) {
+ classCallCheck(this, Storage);
+
+ this.enabled = player.config.storage.enabled;
+ this.key = player.config.storage.key;
+ }
+
+ // Check for actual support (see if we can use it)
+
+
+ createClass(Storage, [{
+ key: 'get',
+ value: function get(key) {
+ if (!Storage.supported) {
+ return null;
+ }
+
+ var store = window.localStorage.getItem(this.key);
+
+ if (utils.is.empty(store)) {
+ return null;
+ }
+
+ var json = JSON.parse(store);
+
+ return utils.is.string(key) && key.length ? json[key] : json;
+ }
+ }, {
+ key: 'set',
+ value: function set(object) {
+ // Bail if we don't have localStorage support or it's disabled
+ if (!Storage.supported || !this.enabled) {
+ return;
+ }
+
+ // Can only store objectst
+ if (!utils.is.object(object)) {
+ return;
+ }
+
+ // Get current storage
+ var storage = this.get();
+
+ // Default to empty object
+ if (utils.is.empty(storage)) {
+ storage = {};
+ }
+
+ // Update the working copy of the values
+ utils.extend(storage, object);
+
+ // Update storage
+ window.localStorage.setItem(this.key, JSON.stringify(storage));
+ }
+ }], [{
+ key: 'supported',
+ get: function get() {
+ try {
+ if (!('localStorage' in window)) {
+ return false;
+ }
+
+ var test = '___test';
+
+ // Try to use it (it might be disabled, e.g. user is in private mode)
+ // see: https://github.com/sampotts/plyr/issues/131
+ window.localStorage.setItem(test, test);
+ window.localStorage.removeItem(test);
+
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ }]);
+ return Storage;
+}();
+
+// ==========================================================================
+
// Private properties
// TODO: Use a WeakMap for private globals
// const globals = new WeakMap();
@@ -12578,7 +11757,7 @@ var Plyr = function () {
}
// Set config
- this.config = utils.extend({}, defaults, options || {}, function () {
+ this.config = utils.extend({}, defaults$1, options || {}, function () {
try {
return JSON.parse(_this.media.getAttribute('data-plyr-config'));
} catch (e) {
@@ -12653,17 +11832,9 @@ var Plyr = function () {
}
// Cache original element state for .destroy()
- // TODO: Investigate a better solution as I suspect this causes reported double load issues?
- setTimeout(function () {
- var clone = _this.media.cloneNode(true);
-
- // Prevent the clone autoplaying
- if (clone.getAttribute('autoplay')) {
- clone.pause();
- }
-
- _this.elements.original = clone;
- }, 0);
+ var clone = this.media.cloneNode(true);
+ clone.autoplay = false;
+ this.elements.original = clone;
// Set media type based on tag or data attribute
// Supported: video, audio, vimeo, youtube
@@ -12870,7 +12041,7 @@ var Plyr = function () {
}
/**
- * Get paused state
+ * Get playing state
*/
}, {
@@ -13125,8 +12296,8 @@ var Plyr = function () {
utils.toggleClass(_this2.elements.controls, _this2.config.classNames.noTransition, false);
}
- // Check if controls toggled
- var toggled = utils.toggleClass(_this2.elements.container, _this2.config.classNames.hideControls, true);
+ // Set hideControls class
+ var toggled = utils.toggleClass(_this2.elements.container, _this2.config.classNames.hideControls, _this2.config.hideControls);
// Trigger event and close menu
if (toggled) {
@@ -13335,19 +12506,29 @@ var Plyr = function () {
return Boolean(this.type === types.audio);
}
}, {
+ key: 'playing',
+ get: function get() {
+ return Boolean(this.ready && !this.paused && !this.ended);
+ }
+
+ /**
+ * Get paused state
+ */
+
+ }, {
key: 'paused',
get: function get() {
return Boolean(this.media.paused);
}
/**
- * Get playing state
+ * Get stopped state
*/
}, {
- key: 'playing',
+ key: 'stopped',
get: function get() {
- return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));
+ return Boolean(this.paused && this.currentTime === 0);
}
/**
@@ -13728,20 +12909,21 @@ var Plyr = function () {
}
/**
- * Set the poster image for a HTML5 video
+ * Set the poster image for a video
* @param {input} - the URL for the new poster image
*/
}, {
key: 'poster',
set: function set(input) {
- if (!this.isHTML5 || !this.isVideo) {
- this.debug.warn('Poster can only be set on HTML5 video');
+ if (!this.isVideo) {
+ this.debug.warn('Poster can only be set for video');
return;
}
if (utils.is.string(input)) {
this.media.setAttribute('poster', input);
+ ui.setPoster.call(this);
}
}
@@ -13750,7 +12932,7 @@ var Plyr = function () {
*/
,
get: function get() {
- if (!this.isHTML5 || !this.isVideo) {
+ if (!this.isVideo) {
return null;
}
diff --git a/dist/plyr.polyfilled.js.map b/dist/plyr.polyfilled.js.map
index db0f29c4..5a9c3e83 100644
--- a/dist/plyr.polyfilled.js.map
+++ b/dist/plyr.polyfilled.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","types.js","defaults.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","support.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js","plyr.polyfilled.js"],"names":["document","require$$0","require$$1","require$$2","dP","global","min","shared","DESCRIPTORS","toIndex","$typed","arrayFill","redefineAll","fails","SPECIES","buffer","VIEW","$export","TAG","IE_PROTO","PROTOTYPE","ITERATOR","speciesConstructor","ArrayProto","create","descriptor","getPrototypeOf","addToUnscopables","pIE","LIBRARY","require$$3","require$$4","ctx","require$$7","anInstance","require$$8","require$$9","hide","require$$10","require$$11","toInteger","require$$12","toLength","require$$13","toAbsoluteIndex","require$$15","toPrimitive","require$$16","has","require$$17","classof","require$$18","isObject","require$$19","toObject","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","uid","require$$26","wks","require$$27","require$$28","require$$29","require$$30","require$$31","Iterators","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","$iterators","setSpecies","meta","$iterDetect","createArrayMethod","id","$has","assign","gOPD","getProto","Reflect","gOPN","process","Promise","TypeError","isNode","newPromiseCapability","newPromiseCapabilityModule","require$$5","require$$6","toString","$GOPD","$DP","gOPNExt","ObjectProto","USE_NATIVE","$fails","$defineProperty","$keys","$getOwnPropertyDescriptor","isRegExp","MATCH","$find","KEY","forced","floor","log1p","sign","$expm1","abs","exp","isEnum","navigator","wrap","i","NAME","this","CustomEvent","providers","types","defaults","language","userLanguage","split","define","utils","input","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","documentMode","documentElement","style","userAgent","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","call","content","fetch","then","empty","result","setItem","stringify","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","boolean","hasAttribute","removeAttribute","toggle","contains","classList","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","currentTime","duration","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","filter","item","indexOf","reduce","prev","curr","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","property","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","i18n","seekTime","title","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","src","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","ready","setTitle","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","forceHours","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","push","suffix","list","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","touch","pageX","left","parseFloat","setting","tabs","panes","toggleTab","checkMenu","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","lang","default","unshift","values","tab","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","mapQualityUnit","mapQualityUnits","levels","level","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","insertElement","attribute","cancelRequests","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","readyState","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.4/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.4\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.2.4\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\n\nimport 'custom-event-polyfill';\n\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","../../node_modules/loadjs/dist/loadjs.umd.js","types.js","utils.js","support.js","html5.js","i18n.js","ui.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","storage.js","plyr.js","plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","define","providers","types","utils","input","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","boolean","hasAttribute","removeAttribute","toggle","contains","classList","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","args","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","filter","item","indexOf","reduce","prev","curr","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","html5","getSources","sizes","dedupe","player","mime","currentTime","playing","src","load","play","config","blankVideo","debug","log","i18n","seekTime","title","toggleClass","selectors","classNames","uiSupported","listeners","warn","toggleNativeControls","controls","inject","setup","volume","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","pip","airplay","isIos","isTouch","touch","ready","setTitle","setPoster","label","get","buttons","isEmbed","iframe","getElement","poster","posters","backgroundImage","p","paused","stopped","toggleControls","loading","timers","setTimeout","failed","networkState","error","inputs","setRange","mute","updateRangeFill","progress","display","getElementsByTagName","nodeValue","getPercentage","duration","seek","setProgress","buffered","forceHours","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","URL","iconUrl","location","cors","host","isIE","svg4everybody","pause","restart","rewind","fastForward","settings","captions","fullscreen","seekTooltip","tooltip","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","suffix","list","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","left","hasClass","parseFloat","setting","tabs","panes","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","findElements","repaint","labels","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","enabled","hostname","protocol","createObjectURL","blob","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","defaults","userLanguage","onChange","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","replaceElement","thumbnail_large","pathname","Player","disableTextTrack","stop","setCurrentTime","selected","setPlaybackRate","setVolume","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","seekTo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","getAvailableQualityLevels","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","handler","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Storage","store","json","removeItem","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => utils.is.string(args[i]) ? args[i] : '');\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Set the poster image\n ui.setPoster.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Set the poster image\n setPoster() {\n if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {\n return;\n }\n\n // Set the inline style\n const posters = this.poster.split(',');\n this.elements.poster.style.backgroundImage = posters.map(p => `url('${p}')`).join(',');\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n poster: 'plyr__poster',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set attribute\n player.media.setAttribute('poster', url.href);\n\n // Update\n ui.setPoster.call(player);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('span', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n ui.setPoster.call(this);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Set hideControls class\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, this.config.hideControls);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.3.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\nimport 'custom-event-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.min.js b/dist/plyr.polyfilled.min.js
index cfe83f41..4e70b5ef 100644
--- a/dist/plyr.polyfilled.min.js
+++ b/dist/plyr.polyfilled.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=Object.freeze({default:n,__moduleExports:n}),r=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),o=r.version,s=Object.freeze({default:r,__moduleExports:r,version:o}),a=function(e){return"object"==typeof e?null!==e:"function"==typeof e},l=Object.freeze({default:a,__moduleExports:a}),c=l&&a||l,u=function(e){if(!c(e))throw TypeError(e+" is not an object!");return e},d=Object.freeze({default:u,__moduleExports:u}),f=function(e){try{return!!e()}catch(e){return!0}},h=Object.freeze({default:f,__moduleExports:f}),p=h&&f||h,g=!p(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),m=Object.freeze({default:g,__moduleExports:g}),y=i&&n||i,v=y.document,b=c(v)&&c(v.createElement),E=function(e){return b?v.createElement(e):{}},w=Object.freeze({default:E,__moduleExports:E}),_=m&&g||m,k=w&&E||w,T=!_&&!p(function(){return 7!=Object.defineProperty(k("div"),"a",{get:function(){return 7}}).a}),S=Object.freeze({default:T,__moduleExports:T}),x=function(e,t){if(!c(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!c(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!c(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!c(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},A=Object.freeze({default:x,__moduleExports:x}),O=d&&u||d,C=S&&T||S,j=A&&x||A,P=Object.defineProperty,M=_?Object.defineProperty:function(e,t,n){if(O(e),t=j(t,!0),O(n),C)try{return P(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},L={f:M},N=Object.freeze({default:L,__moduleExports:L,f:M}),I=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},F=Object.freeze({default:I,__moduleExports:I}),z=N&&L||N,R=F&&I||F,q=_?function(e,t,n){return z.f(e,t,R(1,n))}:function(e,t,n){return e[t]=n,e},V=Object.freeze({default:q,__moduleExports:q}),B={}.hasOwnProperty,D=function(e,t){return B.call(e,t)},U=Object.freeze({default:D,__moduleExports:D}),H=0,W=Math.random(),Y=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++H+W).toString(36))},G=Object.freeze({default:Y,__moduleExports:Y}),K=V&&q||V,Q=U&&D||U,J=G&&Y||G,$=s&&r||s,X=t(function(e){var t=J("src"),n=Function.toString,i=(""+n).split("toString");$.inspectSource=function(e){return n.call(e)},(e.exports=function(e,n,r,o){var s="function"==typeof r;s&&(Q(r,"name")||K(r,"name",n)),e[n]!==r&&(s&&(Q(r,t)||K(r,t,e[n]?""+e[n]:i.join(String(n)))),e===y?e[n]=r:o?e[n]?e[n]=r:K(e,n,r):(delete e[n],K(e,n,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||n.call(this)})}),Z=Object.freeze({default:X,__moduleExports:X}),ee=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},te=Object.freeze({default:ee,__moduleExports:ee}),ne=te&&ee||te,ie=function(e,t,n){if(ne(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},re=Object.freeze({default:ie,__moduleExports:ie}),oe=Z&&X||Z,se=re&&ie||re,ae=function(e,t,n){var i,r,o,s,a=e&ae.F,l=e&ae.G,c=e&ae.S,u=e&ae.P,d=e&ae.B,f=l?y:c?y[t]||(y[t]={}):(y[t]||{}).prototype,h=l?$:$[t]||($[t]={}),p=h.prototype||(h.prototype={});for(i in l&&(n=t),n)o=((r=!a&&f&&void 0!==f[i])?f:n)[i],s=d&&r?se(o,y):u&&"function"==typeof o?se(Function.call,o):o,f&&oe(f,i,o,e&ae.U),h[i]!=o&&K(h,i,s),u&&p[i]!=o&&(p[i]=o)};y.core=$,ae.F=1,ae.G=2,ae.S=4,ae.P=8,ae.B=16,ae.W=32,ae.U=64,ae.R=128;for(var le,ce=ae,ue=Object.freeze({default:ce,__moduleExports:ce}),de=J("typed_array"),fe=J("view"),he=!(!y.ArrayBuffer||!y.DataView),pe=he,ge=0,me="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");ge<9;)(le=y[me[ge++]])?(K(le.prototype,de,!0),K(le.prototype,fe,!0)):pe=!1;var ye={ABV:he,CONSTR:pe,TYPED:de,VIEW:fe},ve=ye.ABV,be=ye.CONSTR,Ee=ye.TYPED,we=ye.VIEW,_e=Object.freeze({default:ye,__moduleExports:ye,ABV:ve,CONSTR:be,TYPED:Ee,VIEW:we}),ke=Object.freeze({default:!1,__moduleExports:!1}),Te=function(e,t,n){for(var i in t)oe(e,i,t[i],n);return e},Se=Object.freeze({default:Te,__moduleExports:Te}),xe=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},Ae=Object.freeze({default:xe,__moduleExports:xe}),Oe=Math.ceil,Ce=Math.floor,je=function(e){return isNaN(e=+e)?0:(e>0?Ce:Oe)(e)},Pe=Object.freeze({default:je,__moduleExports:je}),Me=Pe&&je||Pe,Le=Math.min,Ne=function(e){return e>0?Le(Me(e),9007199254740991):0},Ie=Object.freeze({default:Ne,__moduleExports:Ne}),Fe=Ie&&Ne||Ie,ze=function(e){if(void 0===e)return 0;var t=Me(e),n=Fe(t);if(t!==n)throw RangeError("Wrong length!");return n},Re=Object.freeze({default:ze,__moduleExports:ze}),qe={}.toString,Ve=function(e){return qe.call(e).slice(8,-1)},Be=Object.freeze({default:Ve,__moduleExports:Ve}),De=Be&&Ve||Be,Ue=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==De(e)?e.split(""):Object(e)},He=Object.freeze({default:Ue,__moduleExports:Ue}),We=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},Ye=Object.freeze({default:We,__moduleExports:We}),Ge=He&&Ue||He,Ke=Ye&&We||Ye,Qe=function(e){return Ge(Ke(e))},Je=Object.freeze({default:Qe,__moduleExports:Qe}),$e=Math.max,Xe=Math.min,Ze=function(e,t){return(e=Me(e))<0?$e(e+t,0):Xe(e,t)},et=Object.freeze({default:Ze,__moduleExports:Ze}),tt=Je&&Qe||Je,nt=et&&Ze||et,it=function(e){return function(t,n,i){var r,o=tt(t),s=Fe(o.length),a=nt(i,s);if(e&&n!=n){for(;s>a;)if((r=o[a++])!=r)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===n)return e||a||0;return!e&&-1}},rt=Object.freeze({default:it,__moduleExports:it}),ot=y["__core-js_shared__"]||(y["__core-js_shared__"]={}),st=function(e){return ot[e]||(ot[e]={})},at=Object.freeze({default:st,__moduleExports:st}),lt=at&&st||at,ct=lt("keys"),ut=function(e){return ct[e]||(ct[e]=J(e))},dt=Object.freeze({default:ut,__moduleExports:ut}),ft=rt&&it||rt,ht=dt&&ut||dt,pt=ft(!1),gt=ht("IE_PROTO"),mt=function(e,t){var n,i=tt(e),r=0,o=[];for(n in i)n!=gt&&Q(i,n)&&o.push(n);for(;t.length>r;)Q(i,n=t[r++])&&(~pt(o,n)||o.push(n));return o},yt=Object.freeze({default:mt,__moduleExports:mt}),vt="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),bt=Object.freeze({default:vt,__moduleExports:vt}),Et=yt&&mt||yt,wt=bt&&vt||bt,_t=wt.concat("length","prototype"),kt=Object.getOwnPropertyNames||function(e){return Et(e,_t)},Tt={f:kt},St=Object.freeze({default:Tt,__moduleExports:Tt,f:kt}),xt=function(e){return Object(Ke(e))},At=Object.freeze({default:xt,__moduleExports:xt}),Ot=At&&xt||At,Ct=function(e){for(var t=Ot(this),n=Fe(t.length),i=arguments.length,r=nt(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,s=void 0===o?n:nt(o,n);s>r;)t[r++]=e;return t},jt=Object.freeze({default:Ct,__moduleExports:Ct}),Pt=t(function(e){var t=lt("wks"),n=y.Symbol,i="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=i&&n[e]||(i?n:J)("Symbol."+e))}).store=t}),Mt=Object.freeze({default:Pt,__moduleExports:Pt}),Lt=Mt&&Pt||Mt,Nt=z.f,It=Lt("toStringTag"),Ft=function(e,t,n){e&&!Q(e=n?e:e.prototype,It)&&Nt(e,It,{configurable:!0,value:t})},zt=Object.freeze({default:Ft,__moduleExports:Ft}),Rt=ke,qt=_e&&ye||_e,Vt=Se&&Te||Se,Bt=Ae&&xe||Ae,Dt=Re&&ze||Re,Ut=St&&Tt||St,Ht=jt&&Ct||jt,Wt=zt&&Ft||zt,Yt=t(function(e,t){var n=Ut.f,i=z.f,r="prototype",o="Wrong index!",s=y.ArrayBuffer,a=y.DataView,l=y.Math,c=y.RangeError,u=y.Infinity,d=s,f=l.abs,h=l.pow,g=l.floor,m=l.log,v=l.LN2,b=_?"_b":"buffer",E=_?"_l":"byteLength",w=_?"_o":"byteOffset";function k(e,t,n){var i,r,o,s=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,d=23===t?h(2,-24)-h(2,-77):0,p=0,y=e<0||0===e&&1/e<0?1:0;for((e=f(e))!=e||e===u?(r=e!=e?1:0,i=l):(i=g(m(e)/v),e*(o=h(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?d/o:d*h(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*h(2,t),i+=c):(r=e*h(2,c-1)*h(2,t),i=0));t>=8;s[p++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;s[p++]=255&i,i/=256,a-=8);return s[--p]|=128*y,s}function T(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,s=o>>1,a=r-7,l=n-1,c=e[l--],d=127&c;for(c>>=7;a>0;d=256*d+e[l],l--,a-=8);for(i=d&(1<<-a)-1,d>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===d)d=1-s;else{if(d===o)return i?NaN:c?-u:u;i+=h(2,t),d-=s}return(c?-1:1)*i*h(2,d-t)}function S(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function x(e){return[255&e]}function A(e){return[255&e,e>>8&255]}function O(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function C(e){return k(e,52,8)}function j(e){return k(e,23,4)}function P(e,t,n){i(e[r],t,{get:function(){return this[n]}})}function M(e,t,n,i){var r=Dt(+n);if(r+t>e[E])throw c(o);var s=e[b]._b,a=r+e[w],l=s.slice(a,a+t);return i?l:l.reverse()}function L(e,t,n,i,r,s){var a=Dt(+n);if(a+t>e[E])throw c(o);for(var l=e[b]._b,u=a+e[w],d=i(+r),f=0;f<t;f++)l[u+f]=d[s?f:t-f-1]}if(qt.ABV){if(!p(function(){s(1)})||!p(function(){new s(-1)})||p(function(){return new s,new s(1.5),new s(NaN),"ArrayBuffer"!=s.name})){for(var N,I=(s=function(e){return Bt(this,s),new d(Dt(e))})[r]=d[r],F=n(d),R=0;F.length>R;)(N=F[R++])in s||K(s,N,d[N]);Rt||(I.constructor=s)}var q=new a(new s(2)),V=a[r].setInt8;q.setInt8(0,2147483648),q.setInt8(1,2147483649),!q.getInt8(0)&&q.getInt8(1)||Vt(a[r],{setInt8:function(e,t){V.call(this,e,t<<24>>24)},setUint8:function(e,t){V.call(this,e,t<<24>>24)}},!0)}else s=function(e){Bt(this,s,"ArrayBuffer");var t=Dt(e);this._b=Ht.call(new Array(t),0),this[E]=t},a=function(e,t,n){Bt(this,a,"DataView"),Bt(e,s,"DataView");var i=e[E],r=Me(t);if(r<0||r>i)throw c("Wrong offset!");if(r+(n=void 0===n?i-r:Fe(n))>i)throw c("Wrong length!");this[b]=e,this[w]=r,this[E]=n},_&&(P(s,"byteLength","_l"),P(a,"buffer","_b"),P(a,"byteLength","_l"),P(a,"byteOffset","_o")),Vt(a[r],{getInt8:function(e){return M(this,1,e)[0]<<24>>24},getUint8:function(e){return M(this,1,e)[0]},getInt16:function(e){var t=M(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=M(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return S(M(this,4,e,arguments[1]))},getUint32:function(e){return S(M(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return T(M(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return T(M(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){L(this,1,e,x,t)},setUint8:function(e,t){L(this,1,e,x,t)},setInt16:function(e,t){L(this,2,e,A,t,arguments[2])},setUint16:function(e,t){L(this,2,e,A,t,arguments[2])},setInt32:function(e,t){L(this,4,e,O,t,arguments[2])},setUint32:function(e,t){L(this,4,e,O,t,arguments[2])},setFloat32:function(e,t){L(this,4,e,j,t,arguments[2])},setFloat64:function(e,t){L(this,8,e,C,t,arguments[2])}});Wt(s,"ArrayBuffer"),Wt(a,"DataView"),K(a[r],qt.VIEW,!0),t.ArrayBuffer=s,t.DataView=a}),Gt=Object.freeze({default:Yt,__moduleExports:Yt}),Kt=Lt("species"),Qt=function(e,t){var n,i=O(e).constructor;return void 0===i||void 0==(n=O(i)[Kt])?t:ne(n)},Jt=Object.freeze({default:Qt,__moduleExports:Qt}),$t=Lt("species"),Xt=function(e){var t=y[e];_&&t&&!t[$t]&&z.f(t,$t,{configurable:!0,get:function(){return this}})},Zt=Object.freeze({default:Xt,__moduleExports:Xt}),en=ue&&ce||ue,tn=Gt&&Yt||Gt,nn=Jt&&Qt||Jt,rn=Zt&&Xt||Zt,on=y.ArrayBuffer,sn=tn.ArrayBuffer,an=tn.DataView,ln=qt.ABV&&on.isView,cn=sn.prototype.slice,un=qt.VIEW;en(en.G+en.W+en.F*(on!==sn),{ArrayBuffer:sn}),en(en.S+en.F*!qt.CONSTR,"ArrayBuffer",{isView:function(e){return ln&&ln(e)||c(e)&&un in e}}),en(en.P+en.U+en.F*p(function(){return!new sn(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==cn&&void 0===t)return cn.call(O(this),e);for(var n=O(this).byteLength,i=nt(e,n),r=nt(void 0===t?n:t,n),o=new(nn(this,sn))(Fe(r-i)),s=new an(this),a=new an(o),l=0;i<r;)a.setUint8(l++,s.getUint8(i++));return o}}),rn("ArrayBuffer");var dn=Lt("toStringTag"),fn="Arguments"==De(function(){return arguments}()),hn=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),dn))?n:fn?De(t):"Object"==(i=De(t))&&"function"==typeof t.callee?"Arguments":i},pn=Object.freeze({default:hn,__moduleExports:hn}),gn={},mn=Object.freeze({default:gn,__moduleExports:gn}),yn=mn&&gn||mn,vn=Lt("iterator"),bn=Array.prototype,En=function(e){return void 0!==e&&(yn.Array===e||bn[vn]===e)},wn=Object.freeze({default:En,__moduleExports:En}),_n=Object.keys||function(e){return Et(e,wt)},kn=Object.freeze({default:_n,__moduleExports:_n}),Tn=kn&&_n||kn,Sn=_?Object.defineProperties:function(e,t){O(e);for(var n,i=Tn(t),r=i.length,o=0;r>o;)z.f(e,n=i[o++],t[n]);return e},xn=Object.freeze({default:Sn,__moduleExports:Sn}),An=y.document,On=An&&An.documentElement,Cn=Object.freeze({default:On,__moduleExports:On}),jn=xn&&Sn||xn,Pn=Cn&&On||Cn,Mn=ht("IE_PROTO"),Ln=function(){},Nn=function(){var e,t=k("iframe"),n=wt.length;for(t.style.display="none",Pn.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),Nn=e.F;n--;)delete Nn.prototype[wt[n]];return Nn()},In=Object.create||function(e,t){var n;return null!==e?(Ln.prototype=O(e),n=new Ln,Ln.prototype=null,n[Mn]=e):n=Nn(),void 0===t?n:jn(n,t)},Fn=Object.freeze({default:In,__moduleExports:In}),zn=ht("IE_PROTO"),Rn=Object.prototype,qn=Object.getPrototypeOf||function(e){return e=Ot(e),Q(e,zn)?e[zn]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Rn:null},Vn=Object.freeze({default:qn,__moduleExports:qn}),Bn=pn&&hn||pn,Dn=Lt("iterator"),Un=$.getIteratorMethod=function(e){if(void 0!=e)return e[Dn]||e["@@iterator"]||yn[Bn(e)]},Hn=Object.freeze({default:Un,__moduleExports:Un}),Wn=Array.isArray||function(e){return"Array"==De(e)},Yn=Object.freeze({default:Wn,__moduleExports:Wn}),Gn=Yn&&Wn||Yn,Kn=Lt("species"),Qn=function(e){var t;return Gn(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Gn(t.prototype)||(t=void 0),c(t)&&null===(t=t[Kn])&&(t=void 0)),void 0===t?Array:t},Jn=Object.freeze({default:Qn,__moduleExports:Qn}),$n=Jn&&Qn||Jn,Xn=function(e,t){return new($n(e))(t)},Zn=Object.freeze({default:Xn,__moduleExports:Xn}),ei=Zn&&Xn||Zn,ti=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,s=6==e,a=5==e||s,l=t||ei;return function(t,c,u){for(var d,f,h=Ot(t),p=Ge(h),g=se(c,u,3),m=Fe(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((a||y in p)&&(f=g(d=p[y],y,h),e))if(n)v[y]=f;else if(f)switch(e){case 3:return!0;case 5:return d;case 6:return y;case 2:v.push(d)}else if(o)return!1;return s?-1:r||o?o:v}},ni=Object.freeze({default:ti,__moduleExports:ti}),ii=Lt("unscopables"),ri=Array.prototype;void 0==ri[ii]&&K(ri,ii,{});var oi=function(e){ri[ii][e]=!0},si=Object.freeze({default:oi,__moduleExports:oi}),ai=function(e,t){return{value:t,done:!!e}},li=Object.freeze({default:ai,__moduleExports:ai}),ci=Fn&&In||Fn,ui={};K(ui,Lt("iterator"),function(){return this});var di=function(e,t,n){e.prototype=ci(ui,{next:R(1,n)}),Wt(e,t+" Iterator")},fi=Object.freeze({default:di,__moduleExports:di}),hi=fi&&di||fi,pi=Vn&&qn||Vn,gi=Lt("iterator"),mi=!([].keys&&"next"in[].keys()),yi=function(){return this},vi=function(e,t,n,i,r,o,s){hi(n,t,i);var a,l,c,u=function(e){if(!mi&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},d=t+" Iterator",f="values"==r,h=!1,p=e.prototype,g=p[gi]||p["@@iterator"]||r&&p[r],m=!mi&&g||u(r),y=r?f?u("entries"):m:void 0,v="Array"==t&&p.entries||g;if(v&&(c=pi(v.call(new e)))!==Object.prototype&&c.next&&(Wt(c,d,!0),Rt||Q(c,gi)||K(c,gi,yi)),f&&g&&"values"!==g.name&&(h=!0,m=function(){return g.call(this)}),Rt&&!s||!mi&&!h&&p[gi]||K(p,gi,m),yn[t]=m,yn[d]=yi,r)if(a={values:f?m:u("values"),keys:o?m:u("keys"),entries:y},s)for(l in a)l in p||oe(p,l,a[l]);else en(en.P+en.F*(mi||h),t,a);return a},bi=Object.freeze({default:vi,__moduleExports:vi}),Ei=si&&oi||si,wi=li&&ai||li,_i=bi&&vi||bi,ki=_i(Array,"Array",function(e,t){this._t=tt(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,wi(1)):wi(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");yn.Arguments=yn.Array,Ei("keys"),Ei("values"),Ei("entries");var Ti=Object.freeze({default:ki,__moduleExports:ki}),Si=Lt("iterator"),xi=!1;try{[7][Si]().return=function(){xi=!0}}catch(e){}var Ai=function(e,t){if(!t&&!xi)return!1;var n=!1;try{var i=[7],r=i[Si]();r.next=function(){return{done:n=!0}},i[Si]=function(){return r},e(i)}catch(e){}return n},Oi=Object.freeze({default:Ai,__moduleExports:Ai}),Ci=[].copyWithin||function(e,t){var n=Ot(this),i=Fe(n.length),r=nt(e,i),o=nt(t,i),s=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===s?i:nt(s,i))-o,i-r),l=1;for(o<r&&r<o+a&&(l=-1,o+=a-1,r+=a-1);a-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ji=Object.freeze({default:Ci,__moduleExports:Ci}),Pi={}.propertyIsEnumerable,Mi={f:Pi},Li=Object.freeze({default:Mi,__moduleExports:Mi,f:Pi}),Ni=Li&&Mi||Li,Ii=Object.getOwnPropertyDescriptor,Fi=_?Ii:function(e,t){if(e=tt(e),t=j(t,!0),C)try{return Ii(e,t)}catch(e){}if(Q(e,t))return R(!Ni.f.call(e,t),e[t])},zi={f:Fi},Ri=Object.freeze({default:zi,__moduleExports:zi,f:Fi}),qi=wn&&En||wn,Vi=Hn&&Un||Hn,Bi=ni&&ti||ni,Di=Ti&&ki||Ti,Ui=Oi&&Ai||Oi,Hi=ji&&Ci||ji,Wi=Ri&&zi||Ri,Yi=t(function(e){if(_){var t=Rt,n=y,i=p,r=en,o=qt,s=tn,a=se,l=Bt,u=R,d=K,f=Vt,h=Me,g=Fe,m=Dt,v=nt,b=j,E=Q,w=Bn,k=c,T=Ot,S=qi,x=ci,A=pi,O=Ut.f,C=Vi,P=J,M=Lt,L=Bi,N=ft,I=nn,F=Di,q=yn,V=Ui,B=rn,D=Ht,U=Hi,H=z,W=Wi,Y=H.f,G=W.f,$=n.RangeError,X=n.TypeError,Z=n.Uint8Array,ee=Array.prototype,te=s.ArrayBuffer,ne=s.DataView,ie=L(0),re=L(2),oe=L(3),ae=L(4),le=L(5),ce=L(6),ue=N(!0),de=N(!1),fe=F.values,he=F.keys,pe=F.entries,ge=ee.lastIndexOf,me=ee.reduce,ye=ee.reduceRight,ve=ee.join,be=ee.sort,Ee=ee.slice,we=ee.toString,_e=ee.toLocaleString,ke=M("iterator"),Te=M("toStringTag"),Se=P("typed_constructor"),xe=P("def_constructor"),Ae=o.CONSTR,Oe=o.TYPED,Ce=o.VIEW,je=L(1,function(e,t){return ze(I(e,e[xe]),t)}),Pe=i(function(){return 1===new Z(new Uint16Array([1]).buffer)[0]}),Le=!!Z&&!!Z.prototype.set&&i(function(){new Z(1).set({})}),Ne=function(e,t){var n=h(e);if(n<0||n%t)throw $("Wrong offset!");return n},Ie=function(e){if(k(e)&&Oe in e)return e;throw X(e+" is not a typed array!")},ze=function(e,t){if(!(k(e)&&Se in e))throw X("It is not a typed array constructor!");return new e(t)},Re=function(e,t){return qe(I(e,e[xe]),t)},qe=function(e,t){for(var n=0,i=t.length,r=ze(e,i);i>n;)r[n]=t[n++];return r},Ve=function(e,t,n){Y(e,t,{get:function(){return this._d[n]}})},Be=function(e){var t,n,i,r,o,s,l=T(e),c=arguments.length,u=c>1?arguments[1]:void 0,d=void 0!==u,f=C(l);if(void 0!=f&&!S(f)){for(s=f.call(l),i=[],t=0;!(o=s.next()).done;t++)i.push(o.value);l=i}for(d&&c>2&&(u=a(u,arguments[2],2)),t=0,n=g(l.length),r=ze(this,n);n>t;t++)r[t]=d?u(l[t],t):l[t];return r},De=function(){for(var e=0,t=arguments.length,n=ze(this,t);t>e;)n[e]=arguments[e++];return n},Ue=!!Z&&i(function(){_e.call(new Z(1))}),He=function(){return _e.apply(Ue?Ee.call(Ie(this)):Ie(this),arguments)},We={copyWithin:function(e,t){return U.call(Ie(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ae(Ie(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return D.apply(Ie(this),arguments)},filter:function(e){return Re(this,re(Ie(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return le(Ie(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ce(Ie(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){ie(Ie(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return de(Ie(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return ue(Ie(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return ve.apply(Ie(this),arguments)},lastIndexOf:function(e){return ge.apply(Ie(this),arguments)},map:function(e){return je(Ie(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return me.apply(Ie(this),arguments)},reduceRight:function(e){return ye.apply(Ie(this),arguments)},reverse:function(){for(var e,t=Ie(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return oe(Ie(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return be.call(Ie(this),e)},subarray:function(e,t){var n=Ie(this),i=n.length,r=v(e,i);return new(I(n,n[xe]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,g((void 0===t?i:v(t,i))-r))}},Ye=function(e,t){return Re(this,Ee.call(Ie(this),e,t))},Ge=function(e){Ie(this);var t=Ne(arguments[1],1),n=this.length,i=T(e),r=g(i.length),o=0;if(r+t>n)throw $("Wrong length!");for(;o<r;)this[t+o]=i[o++]},Ke={entries:function(){return pe.call(Ie(this))},keys:function(){return he.call(Ie(this))},values:function(){return fe.call(Ie(this))}},Qe=function(e,t){return k(e)&&e[Oe]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},Je=function(e,t){return Qe(e,t=b(t,!0))?u(2,e[t]):G(e,t)},$e=function(e,t,n){return!(Qe(e,t=b(t,!0))&&k(n)&&E(n,"value"))||E(n,"get")||E(n,"set")||n.configurable||E(n,"writable")&&!n.writable||E(n,"enumerable")&&!n.enumerable?Y(e,t,n):(e[t]=n.value,e)};Ae||(W.f=Je,H.f=$e),r(r.S+r.F*!Ae,"Object",{getOwnPropertyDescriptor:Je,defineProperty:$e}),i(function(){we.call({})})&&(we=_e=function(){return ve.call(this)});var Xe=f({},We);f(Xe,Ke),d(Xe,ke,Ke.values),f(Xe,{slice:Ye,set:Ge,constructor:function(){},toString:we,toLocaleString:He}),Ve(Xe,"buffer","b"),Ve(Xe,"byteOffset","o"),Ve(Xe,"byteLength","l"),Ve(Xe,"length","e"),Y(Xe,Te,{get:function(){return this[Oe]}}),e.exports=function(e,s,a,c){var u=e+((c=!!c)?"Clamped":"")+"Array",f="get"+e,h="set"+e,p=n[u],y=p||{},v=p&&A(p),b=!p||!o.ABV,E={},_=p&&p.prototype,T=function(e,t){Y(e,t,{get:function(){return function(e,t){var n=e._d;return n.v[f](t*s+n.o,Pe)}(this,t)},set:function(e){return function(e,t,n){var i=e._d;c&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[h](t*s+i.o,n,Pe)}(this,t,e)},enumerable:!0})};b?(p=a(function(e,t,n,i){l(e,p,u,"_d");var r,o,a,c,f=0,h=0;if(k(t)){if(!(t instanceof te||"ArrayBuffer"==(c=w(t))||"SharedArrayBuffer"==c))return Oe in t?qe(p,t):Be.call(p,t);r=t,h=Ne(n,s);var y=t.byteLength;if(void 0===i){if(y%s)throw $("Wrong length!");if((o=y-h)<0)throw $("Wrong length!")}else if((o=g(i)*s)+h>y)throw $("Wrong length!");a=o/s}else a=m(t),r=new te(o=a*s);for(d(e,"_d",{b:r,o:h,l:o,e:a,v:new ne(r)});f<a;)T(e,f++)}),_=p.prototype=x(Xe),d(_,"constructor",p)):i(function(){p(1)})&&i(function(){new p(-1)})&&V(function(e){new p,new p(null),new p(1.5),new p(e)},!0)||(p=a(function(e,t,n,i){var r;return l(e,p,u),k(t)?t instanceof te||"ArrayBuffer"==(r=w(t))||"SharedArrayBuffer"==r?void 0!==i?new y(t,Ne(n,s),i):void 0!==n?new y(t,Ne(n,s)):new y(t):Oe in t?qe(p,t):Be.call(p,t):new y(m(t))}),ie(v!==Function.prototype?O(y).concat(O(v)):O(y),function(e){e in p||d(p,e,y[e])}),p.prototype=_,t||(_.constructor=p));var S=_[ke],C=!!S&&("values"==S.name||void 0==S.name),j=Ke.values;d(p,Se,!0),d(_,Oe,u),d(_,Ce,!0),d(_,xe,p),(c?new p(1)[Te]==u:Te in _)||Y(_,Te,{get:function(){return u}}),E[u]=p,r(r.G+r.W+r.F*(p!=y),E),r(r.S,u,{BYTES_PER_ELEMENT:s}),r(r.S+r.F*i(function(){y.of.call(p,1)}),u,{from:Be,of:De}),"BYTES_PER_ELEMENT"in _||d(_,"BYTES_PER_ELEMENT",s),r(r.P,u,We),B(u),r(r.P+r.F*Le,u,{set:Ge}),r(r.P+r.F*!C,u,Ke),t||_.toString==we||(_.toString=we),r(r.P+r.F*i(function(){new p(1).slice()}),u,{slice:Ye}),r(r.P+r.F*(i(function(){return[1,2].toLocaleString()!=new p([1,2]).toLocaleString()})||!i(function(){_.toLocaleString.call([1,2])})),u,{toLocaleString:He}),q[u]=C?S:j,t||C||d(_,ke,j)}}else e.exports=function(){}}),Gi=Object.freeze({default:Yi,__moduleExports:Yi}),Ki=Gi&&Yi||Gi;Ki("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),Ki("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var Qi=function(e,t,n,i){try{return i?t(O(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&O(r.call(e)),t}},Ji=Object.freeze({default:Qi,__moduleExports:Qi}),$i=Ji&&Qi||Ji,Xi=t(function(e){var t={},n={},i=e.exports=function(e,i,r,o,s){var a,l,c,u,d=s?function(){return e}:Vi(e),f=se(r,o,i?2:1),h=0;if("function"!=typeof d)throw TypeError(e+" is not iterable!");if(qi(d)){for(a=Fe(e.length);a>h;h++)if((u=i?f(O(l=e[h])[0],l[1]):f(e[h]))===t||u===n)return u}else for(c=d.call(e);!(l=c.next()).done;)if((u=$i(c,f,l.value,i))===t||u===n)return u};i.BREAK=t,i.RETURN=n}),Zi=Object.freeze({default:Xi,__moduleExports:Xi}),er=t(function(e){var t=J("meta"),n=z.f,i=0,r=Object.isExtensible||function(){return!0},o=!p(function(){return r(Object.preventExtensions({}))}),s=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},a=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!c(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!Q(e,t)){if(!r(e))return"F";if(!n)return"E";s(e)}return e[t].i},getWeak:function(e,n){if(!Q(e,t)){if(!r(e))return!0;if(!n)return!1;s(e)}return e[t].w},onFreeze:function(e){return o&&a.NEED&&r(e)&&!Q(e,t)&&s(e),e}}}),tr=er.KEY,nr=er.NEED,ir=er.fastKey,rr=er.getWeak,or=er.onFreeze,sr=Object.freeze({default:er,__moduleExports:er,KEY:tr,NEED:nr,fastKey:ir,getWeak:rr,onFreeze:or}),ar=function(e,t){if(!c(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},lr=Object.freeze({default:ar,__moduleExports:ar}),cr=Zi&&Xi||Zi,ur=sr&&er||sr,dr=lr&&ar||lr,fr=z.f,hr=ur.fastKey,pr=_?"_s":"size",gr=function(e,t){var n,i=hr(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},mr={getConstructor:function(e,t,n,i){var r=e(function(e,o){Bt(e,r,t,"_i"),e._t=t,e._i=ci(null),e._f=void 0,e._l=void 0,e[pr]=0,void 0!=o&&cr(o,n,e[i],e)});return Vt(r.prototype,{clear:function(){for(var e=dr(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[pr]=0},delete:function(e){var n=dr(this,t),i=gr(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[pr]--}return!!i},forEach:function(e){dr(this,t);for(var n,i=se(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!gr(dr(this,t),e)}}),_&&fr(r.prototype,"size",{get:function(){return dr(this,t)[pr]}}),r},def:function(e,t,n){var i,r,o=gr(e,t);return o?o.v=n:(e._l=o={i:r=hr(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[pr]++,"F"!==r&&(e._i[r]=o)),e},getEntry:gr,setStrong:function(e,t,n){_i(e,t,function(e,n){this._t=dr(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?wi(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,wi(1))},n?"entries":"values",!n,!0),rn(t)}},yr=mr.getConstructor,vr=mr.def,br=mr.getEntry,Er=mr.setStrong,wr=Object.freeze({default:mr,__moduleExports:mr,getConstructor:yr,def:vr,getEntry:br,setStrong:Er}),_r=function(e,t){if(O(e),!c(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},kr={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=se(Function.call,Wi.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return _r(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:_r},Tr=kr.set,Sr=kr.check,xr=Object.freeze({default:kr,__moduleExports:kr,set:Tr,check:Sr}),Ar=xr&&kr||xr,Or=Ar.set,Cr=function(e,t,n){var i,r=t.constructor;return r!==n&&"function"==typeof r&&(i=r.prototype)!==n.prototype&&c(i)&&Or&&Or(e,i),e},jr=Object.freeze({default:Cr,__moduleExports:Cr}),Pr=jr&&Cr||jr,Mr=function(e,t,n,i,r,o){var s=y[e],a=s,l=r?"set":"add",u=a&&a.prototype,d={},f=function(e){var t=u[e];oe(u,e,"delete"==e?function(e){return!(o&&!c(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(o&&!c(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return o&&!c(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof a&&(o||u.forEach&&!p(function(){(new a).entries().next()}))){var h=new a,g=h[l](o?{}:-0,1)!=h,m=p(function(){h.has(1)}),v=Ui(function(e){new a(e)}),b=!o&&p(function(){for(var e=new a,t=5;t--;)e[l](t,t);return!e.has(-0)});v||((a=t(function(t,n){Bt(t,a,e);var i=Pr(new s,t,a);return void 0!=n&&cr(n,r,i[l],i),i})).prototype=u,u.constructor=a),(m||b)&&(f("delete"),f("has"),r&&f("get")),(b||g)&&f(l),o&&u.clear&&delete u.clear}else a=i.getConstructor(t,e,r,l),Vt(a.prototype,n),ur.NEED=!0;return Wt(a,e),d[e]=a,en(en.G+en.W+en.F*(a!=s),d),o||i.setStrong(a,e,r),a},Lr=Object.freeze({default:Mr,__moduleExports:Mr}),Nr=wr&&mr||wr,Ir=Lr&&Mr||Lr,Fr=(Ir("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=Nr.getEntry(dr(this,"Map"),e);return t&&t.v},set:function(e,t){return Nr.def(dr(this,"Map"),0===e?0:e,t)}},Nr,!0),Ir("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Nr.def(dr(this,"Set"),e=0===e?0:e,e)}},Nr),Object.getOwnPropertySymbols),zr={f:Fr},Rr=Object.freeze({default:zr,__moduleExports:zr,f:Fr}),qr=Rr&&zr||Rr,Vr=Object.assign,Br=!Vr||p(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Vr({},e)[n]||Object.keys(Vr({},t)).join("")!=i})?function(e,t){for(var n=Ot(e),i=arguments.length,r=1,o=qr.f,s=Ni.f;i>r;)for(var a,l=Ge(arguments[r++]),c=o?Tn(l).concat(o(l)):Tn(l),u=c.length,d=0;u>d;)s.call(l,a=c[d++])&&(n[a]=l[a]);return n}:Vr,Dr=Object.freeze({default:Br,__moduleExports:Br}),Ur=ur.getWeak,Hr=Bi(5),Wr=Bi(6),Yr=0,Gr=function(e){return e._l||(e._l=new Kr)},Kr=function(){this.a=[]},Qr=function(e,t){return Hr(e.a,function(e){return e[0]===t})};Kr.prototype={get:function(e){var t=Qr(this,e);if(t)return t[1]},has:function(e){return!!Qr(this,e)},set:function(e,t){var n=Qr(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Wr(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Jr={getConstructor:function(e,t,n,i){var r=e(function(e,o){Bt(e,r,t,"_i"),e._t=t,e._i=Yr++,e._l=void 0,void 0!=o&&cr(o,n,e[i],e)});return Vt(r.prototype,{delete:function(e){if(!c(e))return!1;var n=Ur(e);return!0===n?Gr(dr(this,t)).delete(e):n&&Q(n,this._i)&&delete n[this._i]},has:function(e){if(!c(e))return!1;var n=Ur(e);return!0===n?Gr(dr(this,t)).has(e):n&&Q(n,this._i)}}),r},def:function(e,t,n){var i=Ur(O(t),!0);return!0===i?Gr(e).set(t,n):i[e._i]=n,e},ufstore:Gr},$r=Jr.getConstructor,Xr=Jr.def,Zr=Jr.ufstore,eo=Object.freeze({default:Jr,__moduleExports:Jr,getConstructor:$r,def:Xr,ufstore:Zr}),to=Dr&&Br||Dr,no=eo&&Jr||eo;t(function(e){var t,n=Bi(0),i=ur.getWeak,r=Object.isExtensible,o=no.ufstore,s={},a=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},l={get:function(e){if(c(e)){var t=i(e);return!0===t?o(dr(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return no.def(dr(this,"WeakMap"),e,t)}},u=e.exports=Ir("WeakMap",a,l,no,!0,!0);p(function(){return 7!=(new u).set((Object.freeze||Object)(s),7).get(s)})&&(t=no.getConstructor(a,"WeakMap"),to(t.prototype,l),ur.NEED=!0,n(["delete","has","get","set"],function(e){var n=u.prototype,i=n[e];oe(n,e,function(n,o){if(c(n)&&!r(n)){this._f||(this._f=new t);var s=this._f[e](n,o);return"set"==e?this:s}return i.call(this,n,o)})}))});Ir("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return no.def(dr(this,"WeakSet"),e,!0)}},no,!1,!0);var io=(y.Reflect||{}).apply,ro=Function.apply;en(en.S+en.F*!p(function(){io(function(){})}),"Reflect",{apply:function(e,t,n){var i=ne(e),r=O(n);return io?io(i,t,r):ro.call(i,t,r)}});var oo=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},so=Object.freeze({default:oo,__moduleExports:oo}),ao=so&&oo||so,lo=[].slice,co={},uo=Function.bind||function(e){var t=ne(this),n=lo.call(arguments,1),i=function(){var r=n.concat(lo.call(arguments));return this instanceof i?function(e,t,n){if(!(t in co)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";co[t]=Function("F,a","return new F("+i.join(",")+")")}return co[t](e,n)}(t,r.length,r):ao(t,r,e)};return c(t.prototype)&&(i.prototype=t.prototype),i},fo=Object.freeze({default:uo,__moduleExports:uo}),ho=fo&&uo||fo,po=(y.Reflect||{}).construct,go=p(function(){function e(){}return!(po(function(){},[],e)instanceof e)}),mo=!p(function(){po(function(){})});en(en.S+en.F*(go||mo),"Reflect",{construct:function(e,t){ne(e),O(t);var n=arguments.length<3?e:ne(arguments[2]);if(mo&&!go)return po(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(ho.apply(e,i))}var r=n.prototype,o=ci(c(r)?r:Object.prototype),s=Function.apply.call(e,o,t);return c(s)?s:o}}),en(en.S+en.F*p(function(){Reflect.defineProperty(z.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){O(e),t=j(t,!0),O(n);try{return z.f(e,t,n),!0}catch(e){return!1}}});var yo=Wi.f;en(en.S,"Reflect",{deleteProperty:function(e,t){var n=yo(O(e),t);return!(n&&!n.configurable)&&delete e[t]}}),en(en.S,"Reflect",{get:function e(t,n){var i,r,o=arguments.length<3?t:arguments[2];return O(t)===o?t[n]:(i=Wi.f(t,n))?Q(i,"value")?i.value:void 0!==i.get?i.get.call(o):void 0:c(r=pi(t))?e(r,n,o):void 0}}),en(en.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return Wi.f(O(e),t)}}),en(en.S,"Reflect",{getPrototypeOf:function(e){return pi(O(e))}}),en(en.S,"Reflect",{has:function(e,t){return t in e}});var vo=Object.isExtensible;en(en.S,"Reflect",{isExtensible:function(e){return O(e),!vo||vo(e)}});var bo=y.Reflect,Eo=bo&&bo.ownKeys||function(e){var t=Ut.f(O(e)),n=qr.f;return n?t.concat(n(e)):t},wo=Object.freeze({default:Eo,__moduleExports:Eo}),_o=wo&&Eo||wo;en(en.S,"Reflect",{ownKeys:_o});var ko=Object.preventExtensions;en(en.S,"Reflect",{preventExtensions:function(e){O(e);try{return ko&&ko(e),!0}catch(e){return!1}}}),en(en.S,"Reflect",{set:function e(t,n,i){var r,o,s=arguments.length<4?t:arguments[3],a=Wi.f(O(t),n);if(!a){if(c(o=pi(t)))return e(o,n,i,s);a=R(0)}return Q(a,"value")?!(!1===a.writable||!c(s)||((r=Wi.f(s,n)||R(0)).value=i,z.f(s,n,r),0)):void 0!==a.set&&(a.set.call(s,i),!0)}}),Ar&&en(en.S,"Reflect",{setPrototypeOf:function(e,t){Ar.check(e,t);try{return Ar.set(e,t),!0}catch(e){return!1}}});var To,So,xo,Ao=y.process,Oo=y.setImmediate,Co=y.clearImmediate,jo=y.MessageChannel,Po=y.Dispatch,Mo=0,Lo={},No=function(){var e=+this;if(Lo.hasOwnProperty(e)){var t=Lo[e];delete Lo[e],t()}},Io=function(e){No.call(e.data)};Oo&&Co||(Oo=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return Lo[++Mo]=function(){ao("function"==typeof e?e:Function(e),t)},To(Mo),Mo},Co=function(e){delete Lo[e]},"process"==De(Ao)?To=function(e){Ao.nextTick(se(No,e,1))}:Po&&Po.now?To=function(e){Po.now(se(No,e,1))}:jo?(xo=(So=new jo).port2,So.port1.onmessage=Io,To=se(xo.postMessage,xo,1)):y.addEventListener&&"function"==typeof postMessage&&!y.importScripts?(To=function(e){y.postMessage(e+"","*")},y.addEventListener("message",Io,!1)):To="onreadystatechange"in k("script")?function(e){Pn.appendChild(k("script")).onreadystatechange=function(){Pn.removeChild(this),No.call(e)}}:function(e){setTimeout(se(No,e,1),0)});var Fo={set:Oo,clear:Co},zo=Fo.set,Ro=Fo.clear,qo=Object.freeze({default:Fo,__moduleExports:Fo,set:zo,clear:Ro}),Vo=qo&&Fo||qo,Bo=Vo.set,Do=y.MutationObserver||y.WebKitMutationObserver,Uo=y.process,Ho=y.Promise,Wo="process"==De(Uo),Yo=function(){var e,t,n,i=function(){var i,r;for(Wo&&(i=Uo.domain)&&i.exit();e;){r=e.fn,e=e.next;try{r()}catch(i){throw e?n():t=void 0,i}}t=void 0,i&&i.enter()};if(Wo)n=function(){Uo.nextTick(i)};else if(!Do||y.navigator&&y.navigator.standalone)if(Ho&&Ho.resolve){var r=Ho.resolve();n=function(){r.then(i)}}else n=function(){Bo.call(y,i)};else{var o=!0,s=document.createTextNode("");new Do(i).observe(s,{characterData:!0}),n=function(){s.data=o=!o}}return function(i){var r={fn:i,next:void 0};t&&(t.next=r),e||(e=r,n()),t=r}},Go=Object.freeze({default:Yo,__moduleExports:Yo});var Ko,Qo,Jo,$o,Xo=function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=ne(t),this.reject=ne(n)}(e)},Zo={f:Xo},es=Object.freeze({default:Zo,__moduleExports:Zo,f:Xo}),ts=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},ns=Object.freeze({default:ts,__moduleExports:ts}),is=es&&Zo||es,rs=function(e,t){if(O(e),c(t)&&t.constructor===e)return t;var n=is.f(e);return(0,n.resolve)(t),n.promise},os=Object.freeze({default:rs,__moduleExports:rs}),ss=Go&&Yo||Go,as=ns&&ts||ns,ls=os&&rs||os,cs=Vo.set,us=ss(),ds=y.TypeError,fs=y.process,hs=y.Promise,ps="process"==Bn(fs),gs=function(){},ms=Qo=is.f,ys=!!function(){try{var e=hs.resolve(1),t=(e.constructor={})[Lt("species")]=function(e){e(gs,gs)};return(ps||"function"==typeof PromiseRejectionEvent)&&e.then(gs)instanceof t}catch(e){}}(),vs=function(e){var t;return!(!c(e)||"function"!=typeof(t=e.then))&&t},bs=function(e,t){if(!e._n){e._n=!0;var n=e._c;us(function(){for(var i=e._v,r=1==e._s,o=0,s=function(t){var n,o,s=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{s?(r||(2==e._h&&_s(e),e._h=1),!0===s?n=i:(c&&c.enter(),n=s(i),c&&c.exit()),n===t.promise?l(ds("Promise-chain cycle")):(o=vs(n))?o.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&Es(e)})}},Es=function(e){cs.call(y,function(){var t,n,i,r=e._v,o=ws(e);if(o&&(t=as(function(){ps?fs.emit("unhandledRejection",r,e):(n=y.onunhandledrejection)?n({promise:e,reason:r}):(i=y.console)&&i.error&&i.error("Unhandled promise rejection",r)}),e._h=ps||ws(e)?2:1),e._a=void 0,o&&t.e)throw t.v})},ws=function(e){return 1!==e._h&&0===(e._a||e._c).length},_s=function(e){cs.call(y,function(){var t;ps?fs.emit("rejectionHandled",e):(t=y.onrejectionhandled)&&t({promise:e,reason:e._v})})},ks=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),bs(t,!0))},Ts=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw ds("Promise can't be resolved itself");(t=vs(e))?us(function(){var i={_w:n,_d:!1};try{t.call(e,se(Ts,i,1),se(ks,i,1))}catch(e){ks.call(i,e)}}):(n._v=e,n._s=1,bs(n,!1))}catch(e){ks.call({_w:n,_d:!1},e)}}};ys||(hs=function(e){Bt(this,hs,"Promise","_h"),ne(e),Ko.call(this);try{e(se(Ts,this,1),se(ks,this,1))}catch(e){ks.call(this,e)}},(Ko=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=Vt(hs.prototype,{then:function(e,t){var n=ms(nn(this,hs));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=ps?fs.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&bs(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Jo=function(){var e=new Ko;this.promise=e,this.resolve=se(Ts,e,1),this.reject=se(ks,e,1)},is.f=ms=function(e){return e===hs||e===$o?new Jo(e):Qo(e)}),en(en.G+en.W+en.F*!ys,{Promise:hs}),Wt(hs,"Promise"),rn("Promise"),$o=$.Promise,en(en.S+en.F*!ys,"Promise",{reject:function(e){var t=ms(this);return(0,t.reject)(e),t.promise}}),en(en.S+en.F*(Rt||!ys),"Promise",{resolve:function(e){return ls(Rt&&this===$o?hs:this,e)}}),en(en.S+en.F*!(ys&&Ui(function(e){hs.all(e).catch(gs)})),"Promise",{all:function(e){var t=this,n=ms(t),i=n.resolve,r=n.reject,o=as(function(){var n=[],o=0,s=1;cr(e,!1,function(e){var a=o++,l=!1;n.push(void 0),s++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=ms(t),i=n.reject,r=as(function(){cr(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Ss=Lt,xs={f:Ss},As=Object.freeze({default:xs,__moduleExports:xs,f:Ss}),Os=As&&xs||As,Cs=z.f,js=function(e){var t=$.Symbol||($.Symbol=Rt?{}:y.Symbol||{});"_"==e.charAt(0)||e in t||Cs(t,e,{value:Os.f(e)})},Ps=Object.freeze({default:js,__moduleExports:js}),Ms=function(e){var t=Tn(e),n=qr.f;if(n)for(var i,r=n(e),o=Ni.f,s=0;r.length>s;)o.call(e,i=r[s++])&&t.push(i);return t},Ls=Object.freeze({default:Ms,__moduleExports:Ms}),Ns=Ut.f,Is={}.toString,Fs="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],zs=function(e){return Fs&&"[object Window]"==Is.call(e)?function(e){try{return Ns(e)}catch(e){return Fs.slice()}}(e):Ns(tt(e))},Rs={f:zs},qs=Object.freeze({default:Rs,__moduleExports:Rs,f:zs}),Vs=Ps&&js||Ps,Bs=Ls&&Ms||Ls,Ds=qs&&Rs||qs,Us=ur.KEY,Hs=Wi.f,Ws=z.f,Ys=Ds.f,Gs=y.Symbol,Ks=y.JSON,Qs=Ks&&Ks.stringify,Js=Lt("_hidden"),$s=Lt("toPrimitive"),Xs={}.propertyIsEnumerable,Zs=lt("symbol-registry"),ea=lt("symbols"),ta=lt("op-symbols"),na=Object.prototype,ia="function"==typeof Gs,ra=y.QObject,oa=!ra||!ra.prototype||!ra.prototype.findChild,sa=_&&p(function(){return 7!=ci(Ws({},"a",{get:function(){return Ws(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Hs(na,t);i&&delete na[t],Ws(e,t,n),i&&e!==na&&Ws(na,t,i)}:Ws,aa=function(e){var t=ea[e]=ci(Gs.prototype);return t._k=e,t},la=ia&&"symbol"==typeof Gs.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Gs},ca=function(e,t,n){return e===na&&ca(ta,t,n),O(e),t=j(t,!0),O(n),Q(ea,t)?(n.enumerable?(Q(e,Js)&&e[Js][t]&&(e[Js][t]=!1),n=ci(n,{enumerable:R(0,!1)})):(Q(e,Js)||Ws(e,Js,R(1,{})),e[Js][t]=!0),sa(e,t,n)):Ws(e,t,n)},ua=function(e,t){O(e);for(var n,i=Bs(t=tt(t)),r=0,o=i.length;o>r;)ca(e,n=i[r++],t[n]);return e},da=function(e){var t=Xs.call(this,e=j(e,!0));return!(this===na&&Q(ea,e)&&!Q(ta,e))&&(!(t||!Q(this,e)||!Q(ea,e)||Q(this,Js)&&this[Js][e])||t)},fa=function(e,t){if(e=tt(e),t=j(t,!0),e!==na||!Q(ea,t)||Q(ta,t)){var n=Hs(e,t);return!n||!Q(ea,t)||Q(e,Js)&&e[Js][t]||(n.enumerable=!0),n}},ha=function(e){for(var t,n=Ys(tt(e)),i=[],r=0;n.length>r;)Q(ea,t=n[r++])||t==Js||t==Us||i.push(t);return i},pa=function(e){for(var t,n=e===na,i=Ys(n?ta:tt(e)),r=[],o=0;i.length>o;)!Q(ea,t=i[o++])||n&&!Q(na,t)||r.push(ea[t]);return r};ia||(oe((Gs=function(){if(this instanceof Gs)throw TypeError("Symbol is not a constructor!");var e=J(arguments.length>0?arguments[0]:void 0),t=function(n){this===na&&t.call(ta,n),Q(this,Js)&&Q(this[Js],e)&&(this[Js][e]=!1),sa(this,e,R(1,n))};return _&&oa&&sa(na,e,{configurable:!0,set:t}),aa(e)}).prototype,"toString",function(){return this._k}),Wi.f=fa,z.f=ca,Ut.f=Ds.f=ha,Ni.f=da,qr.f=pa,_&&!Rt&&oe(na,"propertyIsEnumerable",da,!0),Os.f=function(e){return aa(Lt(e))}),en(en.G+en.W+en.F*!ia,{Symbol:Gs});for(var ga="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ma=0;ga.length>ma;)Lt(ga[ma++]);for(var ya=Tn(Lt.store),va=0;ya.length>va;)Vs(ya[va++]);en(en.S+en.F*!ia,"Symbol",{for:function(e){return Q(Zs,e+="")?Zs[e]:Zs[e]=Gs(e)},keyFor:function(e){if(!la(e))throw TypeError(e+" is not a symbol!");for(var t in Zs)if(Zs[t]===e)return t},useSetter:function(){oa=!0},useSimple:function(){oa=!1}}),en(en.S+en.F*!ia,"Object",{create:function(e,t){return void 0===t?ci(e):ua(ci(e),t)},defineProperty:ca,defineProperties:ua,getOwnPropertyDescriptor:fa,getOwnPropertyNames:ha,getOwnPropertySymbols:pa}),Ks&&en(en.S+en.F*(!ia||p(function(){var e=Gs();return"[null]"!=Qs([e])||"{}"!=Qs({a:e})||"{}"!=Qs(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],r=1;arguments.length>r;)i.push(arguments[r++]);if(n=t=i[1],(c(t)||void 0!==e)&&!la(e))return Gn(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!la(t))return t}),i[1]=t,Qs.apply(Ks,i)}}),Gs.prototype[$s]||K(Gs.prototype,$s,Gs.prototype.valueOf),Wt(Gs,"Symbol"),Wt(Math,"Math",!0),Wt(y.JSON,"JSON",!0);var ba=function(e,t){var n=($.Object||{})[e]||Object[e],i={};i[e]=t(n),en(en.S+en.F*p(function(){n(1)}),"Object",i)},Ea=Object.freeze({default:ba,__moduleExports:ba}),wa=Ea&&ba||Ea,_a=ur.onFreeze;wa("freeze",function(e){return function(t){return e&&c(t)?e(_a(t)):t}});var ka=ur.onFreeze;wa("seal",function(e){return function(t){return e&&c(t)?e(ka(t)):t}});var Ta=ur.onFreeze;wa("preventExtensions",function(e){return function(t){return e&&c(t)?e(Ta(t)):t}}),wa("isFrozen",function(e){return function(t){return!c(t)||!!e&&e(t)}}),wa("isSealed",function(e){return function(t){return!c(t)||!!e&&e(t)}}),wa("isExtensible",function(e){return function(t){return!!c(t)&&(!e||e(t))}});var Sa=Wi.f;wa("getOwnPropertyDescriptor",function(){return function(e,t){return Sa(tt(e),t)}}),wa("getPrototypeOf",function(){return function(e){return pi(Ot(e))}}),wa("keys",function(){return function(e){return Tn(Ot(e))}}),wa("getOwnPropertyNames",function(){return Ds.f}),en(en.S+en.F,"Object",{assign:to});var xa=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t},Aa=Object.freeze({default:xa,__moduleExports:xa}),Oa=Aa&&xa||Aa;en(en.S,"Object",{is:Oa});var Ca=z.f,ja=Function.prototype,Pa=/^\s*function ([^ (]*)/;"name"in ja||_&&Ca(ja,"name",{configurable:!0,get:function(){try{return(""+this).match(Pa)[1]}catch(e){return""}}}),en(en.S,"String",{raw:function(e){for(var t=tt(e.raw),n=Fe(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Ma=String.fromCharCode,La=String.fromCodePoint;en(en.S+en.F*(!!La&&1!=La.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],nt(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Ma(t):Ma(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Na=function(e){return function(t,n){var i,r,o=String(Ke(t)),s=Me(n),a=o.length;return s<0||s>=a?e?"":void 0:(i=o.charCodeAt(s))<55296||i>56319||s+1===a||(r=o.charCodeAt(s+1))<56320||r>57343?e?o.charAt(s):i:e?o.slice(s,s+2):r-56320+(i-55296<<10)+65536}},Ia=Object.freeze({default:Na,__moduleExports:Na}),Fa=(Ia&&Na||Ia)(!1);en(en.P,"String",{codePointAt:function(e){return Fa(this,e)}});var za=function(e){var t=String(Ke(this)),n="",i=Me(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n},Ra=Object.freeze({default:za,__moduleExports:za}),qa=Ra&&za||Ra;en(en.P,"String",{repeat:qa});var Va=Lt("match"),Ba=function(e){var t;return c(e)&&(void 0!==(t=e[Va])?!!t:"RegExp"==De(e))},Da=Object.freeze({default:Ba,__moduleExports:Ba}),Ua=Da&&Ba||Da,Ha=function(e,t,n){if(Ua(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(Ke(e))},Wa=Object.freeze({default:Ha,__moduleExports:Ha}),Ya=Lt("match"),Ga=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Ya]=!1,!"/./"[e](t)}catch(e){}}return!0},Ka=Object.freeze({default:Ga,__moduleExports:Ga}),Qa=Wa&&Ha||Wa,Ja=Ka&&Ga||Ka,$a="".startsWith;en(en.P+en.F*Ja("startsWith"),"String",{startsWith:function(e){var t=Qa(this,e,"startsWith"),n=Fe(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return $a?$a.call(t,i,n):t.slice(n,n+i.length)===i}});var Xa="".endsWith;en(en.P+en.F*Ja("endsWith"),"String",{endsWith:function(e){var t=Qa(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=Fe(t.length),r=void 0===n?i:Math.min(Fe(n),i),o=String(e);return Xa?Xa.call(t,o,r):t.slice(r-o.length,r)===o}});en(en.P+en.F*Ja("includes"),"String",{includes:function(e){return!!~Qa(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});var Za=function(){var e=O(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},el=Object.freeze({default:Za,__moduleExports:Za}),tl=el&&Za||el;_&&"g"!=/./g.flags&&z.f(RegExp.prototype,"flags",{configurable:!0,get:tl});var nl=function(e,t,n){var i=Lt(e),r=n(Ke,i,""[e]),o=r[0],s=r[1];p(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(oe(String.prototype,e,o),K(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))},il=Object.freeze({default:nl,__moduleExports:nl}),rl=il&&nl||il;rl("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),rl("replace",2,function(e,t,n){return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),rl("split",2,function(e,t,n){var i=Ua,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var s=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,d,f=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,h+"g");for(s||(a=new RegExp("^"+m.source+"$(?!\\s)",h));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(f.push(n.slice(p,l.index)),!s&&l.length>1&&l[0].replace(a,function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(l[d]=void 0)}),l.length>1&&l.index<n.length&&o.apply(f,l.slice(1)),u=l[0].length,p=c,f.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||f.push(""):f.push(n.slice(p)),f.length>g?f.slice(0,g):f}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),rl("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var ol=function(e,t,n){t in e?z.f(e,t,R(0,n)):e[t]=n},sl=Object.freeze({default:ol,__moduleExports:ol}),al=sl&&ol||sl;en(en.S+en.F*!Ui(function(e){}),"Array",{from:function(e){var t,n,i,r,o=Ot(e),s="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,d=Vi(o);if(c&&(l=se(l,a>2?arguments[2]:void 0,2)),void 0==d||s==Array&&qi(d))for(n=new s(t=Fe(o.length));t>u;u++)al(n,u,c?l(o[u],u):o[u]);else for(r=d.call(o),n=new s;!(i=r.next()).done;u++)al(n,u,c?$i(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),en(en.S+en.F*p(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)al(n,e,arguments[e++]);return n.length=t,n}}),en(en.P,"Array",{copyWithin:Hi}),Ei("copyWithin");var ll=Bi(5),cl=!0;"find"in[]&&Array(1).find(function(){cl=!1}),en(en.P+en.F*cl,"Array",{find:function(e){return ll(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("find");var ul=Bi(6),dl=!0;"findIndex"in[]&&Array(1).findIndex(function(){dl=!1}),en(en.P+en.F*dl,"Array",{findIndex:function(e){return ul(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("findIndex"),en(en.P,"Array",{fill:Ht}),Ei("fill");var fl=y.isFinite;en(en.S,"Number",{isFinite:function(e){return"number"==typeof e&&fl(e)}});var hl=Math.floor,pl=function(e){return!c(e)&&isFinite(e)&&hl(e)===e},gl=Object.freeze({default:pl,__moduleExports:pl}),ml=gl&&pl||gl;en(en.S,"Number",{isInteger:ml});var yl=Math.abs;en(en.S,"Number",{isSafeInteger:function(e){return ml(e)&&yl(e)<=9007199254740991}}),en(en.S,"Number",{isNaN:function(e){return e!=e}}),en(en.S,"Number",{EPSILON:Math.pow(2,-52)}),en(en.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),en(en.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var vl=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},bl=Object.freeze({default:vl,__moduleExports:vl}),El=bl&&vl||bl,wl=Math.sqrt,_l=Math.acosh;en(en.S+en.F*!(_l&&710==Math.floor(_l(Number.MAX_VALUE))&&_l(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:El(e-1+wl(e-1)*wl(e+1))}});var kl=Math.asinh;en(en.S+en.F*!(kl&&1/kl(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var Tl=Math.atanh;en(en.S+en.F*!(Tl&&1/Tl(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var Sl=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1},xl=Object.freeze({default:Sl,__moduleExports:Sl}),Al=xl&&Sl||xl;en(en.S,"Math",{cbrt:function(e){return Al(e=+e)*Math.pow(Math.abs(e),1/3)}}),en(en.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var Ol=Math.exp;en(en.S,"Math",{cosh:function(e){return(Ol(e=+e)+Ol(-e))/2}});var Cl=Math.expm1,jl=!Cl||Cl(10)>22025.465794806718||Cl(10)<22025.465794806718||-2e-17!=Cl(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:Cl,Pl=Object.freeze({default:jl,__moduleExports:jl}),Ml=Pl&&jl||Pl;en(en.S+en.F*(Ml!=Math.expm1),"Math",{expm1:Ml});var Ll=Math.pow,Nl=Ll(2,-52),Il=Ll(2,-23),Fl=Ll(2,127)*(2-Il),zl=Ll(2,-126),Rl=Math.fround||function(e){var t,n,i=Math.abs(e),r=Al(e);return i<zl?r*(i/zl/Il+1/Nl-1/Nl)*zl*Il:(n=(t=(1+Il/Nl)*i)-(t-i))>Fl||n!=n?r*(1/0):r*n},ql=Object.freeze({default:Rl,__moduleExports:Rl}),Vl=ql&&Rl||ql;en(en.S,"Math",{fround:Vl});var Bl=Math.abs;en(en.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,s=arguments.length,a=0;o<s;)a<(n=Bl(arguments[o++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var Dl=Math.imul;en(en.S+en.F*p(function(){return-5!=Dl(4294967295,5)||2!=Dl.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),en(en.S,"Math",{log1p:El}),en(en.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),en(en.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),en(en.S,"Math",{sign:Al});var Ul=Math.exp;en(en.S+en.F*p(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(Ml(e)-Ml(-e))/2:(Ul(e-1)-Ul(-e-1))*(Math.E/2)}});var Hl=Math.exp;en(en.S,"Math",{tanh:function(e){var t=Ml(e=+e),n=Ml(-e);return t==1/0?1:n==1/0?-1:(t-n)/(Hl(e)+Hl(-e))}}),en(en.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var Wl=ft(!0);en(en.P,"Array",{includes:function(e){return Wl(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("includes");var Yl=Ni.f,Gl=function(e){return function(t){for(var n,i=tt(t),r=Tn(i),o=r.length,s=0,a=[];o>s;)Yl.call(i,n=r[s++])&&a.push(e?[n,i[n]]:i[n]);return a}},Kl=Object.freeze({default:Gl,__moduleExports:Gl}),Ql=Kl&&Gl||Kl,Jl=Ql(!1);en(en.S,"Object",{values:function(e){return Jl(e)}});var $l=Ql(!0);en(en.S,"Object",{entries:function(e){return $l(e)}}),en(en.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=tt(e),r=Wi.f,o=_o(i),s={},a=0;o.length>a;)void 0!==(n=r(i,t=o[a++]))&&al(s,t,n);return s}});var Xl=function(e,t,n,i){var r=String(Ke(e)),o=r.length,s=void 0===n?" ":String(n),a=Fe(t);if(a<=o||""==s)return r;var l=a-o,c=qa.call(s,Math.ceil(l/s.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Zl=Object.freeze({default:Xl,__moduleExports:Xl}),ec=y.navigator,tc=ec&&ec.userAgent||"",nc=Object.freeze({default:tc,__moduleExports:tc}),ic=Zl&&Xl||Zl,rc=nc&&tc||nc;en(en.P+en.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(rc),"String",{padStart:function(e){return ic(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),en(en.P+en.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(rc),"String",{padEnd:function(e){return ic(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var oc=[].slice,sc=/MSIE .\./.test(rc),ac=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&oc.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};en(en.G+en.B+en.F*sc,{setTimeout:ac(y.setTimeout),setInterval:ac(y.setInterval)}),en(en.G+en.B,{setImmediate:Vo.set,clearImmediate:Vo.clear});for(var lc=Lt("iterator"),cc=Lt("toStringTag"),uc=yn.Array,dc={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},fc=Tn(dc),hc=0;hc<fc.length;hc++){var pc,gc=fc[hc],mc=dc[gc],yc=y[gc],vc=yc&&yc.prototype;if(vc&&(vc[lc]||K(vc,lc,uc),vc[cc]||K(vc,cc,gc),yn[gc]=uc,mc))for(pc in Di)vc[pc]||oe(vc,pc,Di[pc],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",d="suspendedYield",f="executing",h="completed",p={},g={};g[s]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(j([])));y&&y!==i&&r.call(y,s)&&(g=y);var v=k.prototype=w.prototype=Object.create(g);_.prototype=v.constructor=k,k.constructor=_,k[l]=_.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===_||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,k):(e.__proto__=k,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},T(S.prototype),S.prototype[a]=function(){return this},c.AsyncIterator=S,c.async=function(e,t,n,i){var r=new S(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(v),v[l]="Generator",v[s]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=j,C.prototype={constructor:C,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var l=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(l&&c){if(this.prev<s.catchLoc)return i(s.catchLoc,!0);if(this.prev<s.finallyLoc)return i(s.finallyLoc)}else if(l){if(this.prev<s.catchLoc)return i(s.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return i(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),O(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;O(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:j(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof w?t:w,o=Object.create(r.prototype),s=new C(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===f)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw o;return P()}for(n.method=r,n.arg=o;;){var s=n.delegate;if(s){var a=x(s,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=E(e,t,n);if("normal"===l.type){if(i=n.done?h:d,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,s),o}function E(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function w(){}function _(){}function k(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function S(t){function n(e,i,o,s){var a=E(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,s)},function(e){n("throw",e,o,s)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},s)}s(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function x(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,x(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=E(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function j(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:P}}function P(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var bc=new window.CustomEvent("test");if(bc.preventDefault(),!0!==bc.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Ec=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Ec.prototype=window.Event.prototype,window.CustomEvent=Ec}var wc,_c={html5:"html5",youtube:"youtube",vimeo:"vimeo"},kc={audio:"audio",video:"video"},Tc={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.2.4/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},Sc=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function s(t,n,i,r){var o,a,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,f=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(a=l.createElement("link")).rel="stylesheet",a.href=f):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(a=l.createElement("img")).src=f:((a=l.createElement("script")).src=t,a.async=void 0===c||c),a.onload=a.onerror=a.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in a)try{a.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return s(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==d(t,a)&&l.head.appendChild(a)}function a(e,n,i){var a,l;if(n&&n.trim&&(a=n),l=(a?i:n)||{},a){if(a in t)throw"LoadJS";t[a]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,a=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<a;r++)s(e[r],i,n)}(e,function(e){o(l,e),r(a,e)},l)}return a.ready=function(e,t){return function(e,t){var r,o,s,a=[],l=(e=e.push?e:[e]).length,c=l;for(r=function(e,n){n.length&&a.push(e),--c||t(a)};l--;)o=e[l],(s=n[o])?r(o,s):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),a},a.done=function(e){r(e,[])},a.reset=function(){t={},n={},i={}},a.isDefined=function(e){return e in t},a},e.exports=n()}),xc=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},Ac=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Oc=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Cc=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),jc={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e){return new Promise(function(t,n){Sc(e,{success:t,error:n})})},loadSprite:function(e,t){if(jc.is.string(e)){var n=jc.is.string(t),i=function(){return document.querySelectorAll("#"+t).length};if(!n||!i()){var r=document.createElement("div");if(jc.toggleHidden(r,!0),n&&r.setAttribute("id",t),Pc.storage){var o=window.localStorage.getItem("cache-"+t);if(null!==o){var s=JSON.parse(o);return void a.call(r,s.content)}}jc.fetch(e).then(function(e){jc.is.empty(e)||(Pc.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),a.call(r,e))}).catch(function(){})}}function a(e){n&&i()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return jc.is.object(t)&&jc.setAttributes(i,t),jc.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(jc.createElement(e,n,i))},removeElement:function(e){jc.is.element(e)&&jc.is.element(e.parentNode)&&(jc.is.nodeList(e)||jc.is.array(e)?Array.from(e).forEach(jc.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return jc.is.element(t)&&jc.is.element(t.parentNode)&&jc.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){jc.is.element(e)&&!jc.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Cc(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!jc.is.string(e)||jc.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),s=o[0],a=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":jc.is.object(i)&&jc.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=a}}),n},toggleHidden:function(e,t){if(jc.is.element(e)){var n=t;jc.is.boolean(n)||(n=!e.hasAttribute("hidden")),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,n){if(jc.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return jc.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=jc.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:jc.getElements.call(this,this.config.selectors.buttons.play),pause:jc.getElement.call(this,this.config.selectors.buttons.pause),restart:jc.getElement.call(this,this.config.selectors.buttons.restart),rewind:jc.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:jc.getElement.call(this,this.config.selectors.buttons.fastForward),mute:jc.getElement.call(this,this.config.selectors.buttons.mute),pip:jc.getElement.call(this,this.config.selectors.buttons.pip),airplay:jc.getElement.call(this,this.config.selectors.buttons.airplay),settings:jc.getElement.call(this,this.config.selectors.buttons.settings),captions:jc.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:jc.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=jc.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:jc.getElement.call(this,this.config.selectors.inputs.seek),volume:jc.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:jc.getElement.call(this,this.config.selectors.display.buffer),currentTime:jc.getElement.call(this,this.config.selectors.display.currentTime),duration:jc.getElement.call(this,this.config.selectors.display.duration)},jc.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(jc.is.element(e)){var n=jc.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=jc.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?jc.on(this.elements.container,"keydown",o,!1):jc.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!jc.is.empty(e)&&!jc.is.empty(t)&&jc.is.function(n))if(jc.is.nodeList(e)||jc.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&jc.toggleListener.call(null,e,t,n,i,r,o)});else{var s=t.split(" "),a=o;Pc.passiveListeners&&(a={passive:r,capture:o}),s.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];jc.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];jc.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(jc.is.element(e)&&!jc.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:jc.is.plyr(this)?this:null})});e.dispatchEvent(r)}},toggleState:function(e,t){if(jc.is.array(e)||jc.is.nodeList(e))Array.from(e).forEach(function(e){return jc.toggleState(e,t)});else if(jc.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=jc.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!jc.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),s=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(s)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=jc.replaceAll(e,"-"," "),e=jc.replaceAll(e,"_"," "),e=jc.toTitleCase(e),jc.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=jc.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return jc.is.object(r)?(Object.keys(r).forEach(function(t){jc.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Oc({},t,{})),jc.extend(e[t],r[t])):Object.assign(e,Oc({},t,r[t]))}),jc.extend.apply(jc,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return jc.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},closest:function(e,t){return jc.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?_c.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?_c.vimeo:null},parseYouTubeId:function(e){if(jc.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(jc.is.empty(e))return null;if(jc.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Cc(n,2),r=i[0],o=i[1];return Object.assign(e,Oc({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return jc.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!jc.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){jc.toggleHidden(e,!0),e.offsetHeight,jc.toggleHidden(e,!1)},0)}},Pc={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=jc.getBrowser(),s=o.isIPhone&&n&&Pc.playsinline;switch(t+":"+e){case"html5:video":r=(i=Pc.video)&&Pc.rangeInput&&(!o.isIPhone||s);break;case"html5:audio":r=(i=Pc.audio)&&Pc.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=Pc.rangeInput&&(!o.isIPhone||s);break;default:r=(i=Pc.audio&&Pc.video)&&Pc.rangeInput}return{api:i,ui:r}},pip:!jc.getBrowser().isIPhone&&jc.is.function(jc.createElement("video").webkitSetPresentationMode),airplay:jc.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!jc.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(wc=document.createElement("input"),wc.type="range","range"===wc.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==jc.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Mc=function(){},Lc=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];xc(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Ac(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):Mc}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):Mc}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):Mc}}]),e}(),Nc=jc.getBrowser();function Ic(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;jc.is.element(e)&&jc.toggleState(e,this.active),jc.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Nc.isIos||jc.trapFocus.call(this.player,this.target,this.active)}}function Fc(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",jc.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),Ic.call(this)}var zc=function(){function e(t){var n=this;xc(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},jc.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){Ic.call(n)}),jc.on(this.player.elements.container,"dblclick",function(e){jc.is.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Ac(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),jc.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Nc.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?jc.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():Fc.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(Nc.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!jc.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else Fc.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:jc.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return Nc.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(jc.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!jc.is.function(document[t+"ExitFullscreen"])&&!jc.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),Rc=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(jc.is.empty(e)||jc.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var n=t.i18n[e],i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Cc(e,2),i=t[0],r=t[1];n=jc.replaceAll(n,i,r)}),n},qc={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(jc.is.empty(e)||(this.captions.language=e),jc.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!jc.is.boolean(this.captions.active)){var t=this.storage.get("captions");jc.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!Pc.textTracks)jc.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Uc.setCaptionsMenu.call(this);else{jc.is.element(this.elements.captions)||(this.elements.captions=jc.createElement("div",jc.getAttributesFromSelector(this.config.selectors.captions)),jc.insertAfter(this.elements.captions,this.elements.wrapper)),jc.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!jc.is.empty(qc.getTracks.call(this)));var n=qc.getTracks.call(this);if(!jc.is.empty(n)){if(jc.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=jc.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&jc.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){jc.removeElement(e)})})}qc.setLanguage.call(this),qc.show.call(this),jc.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Uc.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){qc.getTracks.call(this).forEach(function(t){jc.on(t,"cuechange",function(t){return qc.setCue.call(e,t)}),t.mode="hidden"});var t=qc.getCurrentTrack.call(this);jc.is.track(t)&&Array.from(t.activeCues||[]).length&&qc.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return jc.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=qc.getTracks.call(this);if(!t.length)return null;var n=t.find(function(t){return t.language.toLowerCase()===e.language});(n||(n=jc.getElement.call(this,"track[default]")),n)||(n=Cc(t,1)[0]);return n},getLabel:function(e){var t=e;return!jc.is.track(t)&&Pc.textTracks&&this.captions.active&&(t=qc.getCurrentTrack.call(this)),jc.is.track(t)?jc.is.empty(t.label)?jc.is.empty(t.language)?Rc("enabled",this.config):e.language.toUpperCase():t.label:Rc("disabled",this.config)},setCue:function(e){var t=jc.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===qc.getCurrentTrack.call(this)&&(jc.is.cue(i)?qc.setText.call(this,i.getCueAsHTML()):qc.setText.call(this,null),jc.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(jc.is.element(this.elements.captions)){var t=jc.createElement("span");jc.emptyElement(this.elements.captions);var n=jc.is.nullOrUndefined(e)?"":e;jc.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");jc.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(jc.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),jc.toggleState(this.elements.buttons.captions,!0))}},Vc={addStyleHook:function(){jc.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),jc.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void Vc.toggleNativeControls.call(this,!0);jc.is.element(this.elements.controls)||(Uc.inject.call(this),this.listeners.controls()),Vc.toggleNativeControls.call(this),qc.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,Vc.updateVolume.call(this),Vc.timeUpdate.call(this),Vc.checkPlaying.call(this),this.ready=!0,setTimeout(function(){jc.dispatchEvent.call(e,e.media,"ready")},0),Vc.setTitle.call(this)},setTitle:function(){var e=Rc("play",this.config);if(jc.is.string(this.config.title)&&!jc.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),jc.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=jc.getElement.call(this,"iframe");if(!jc.is.element(t))return;jc.is.empty(this.config.title)||this.config.title;t.setAttribute("title",Rc("frameTitle",this.config))}},checkPlaying:function(){jc.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),jc.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),jc.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){jc.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(jc.toggleClass(this.elements.container,this.config.classNames.loading,!1),jc.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){jc.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(jc.is.element(this.elements.inputs.volume)&&Vc.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),jc.is.element(this.elements.buttons.mute)&&jc.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;jc.is.element(e)&&(e.value=t,Uc.updateRangeFill.call(this,e))},setProgress:function(e,t){var n=jc.is.number(t)?t:0,i=jc.is.element(e)?e:this.elements.display.buffer;if(jc.is.element(i)){i.value=n;var r=i.getElementsByTagName("span")[0];jc.is.element(r)&&(r.childNodes[0].nodeValue=n)}},updateProgress:function(e){if(this.supported.ui&&jc.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=jc.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&Vc.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":Vc.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(jc.is.element(e)&&jc.is.number(t)){var i=jc.getHours(this.duration)>0;e.textContent=jc.formatTime(t,i,n)}},timeUpdate:function(e){var t=!jc.is.element(this.elements.display.duration)&&this.config.invertTime;Vc.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Vc.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=jc.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Vc.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Vc.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),Uc.updateSeekTooltip.call(this)}}},Bc={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=Bc.getSources.call(this);if(jc.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!jc.is.empty(e.getAttribute("size"))});return jc.is.empty(t)?null:jc.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=Bc.getSources.call(e);if(jc.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return jc.is.empty(n)?null:Number(n[0].getAttribute("size"))},set:function(t){var n=Bc.getSources.call(e);if(!jc.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute("size"))===t});if(!jc.is.empty(i)){var r=i.filter(function(t){return Pc.mime.call(e,t.getAttribute("type"))});if(!jc.is.empty(r)){jc.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var o=e.currentTime,s=e.playing;e.media.src=r[0].getAttribute("src"),e.media.load(),s&&e.play(),e.currentTime=o,jc.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(jc.removeElement(Bc.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},Dc=jc.getBrowser(),Uc={updateRangeFill:function(e){var t=jc.is.event(e)?e.target:e;jc.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),Dc.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||Dc.isIE&&!window.svg4everybody}},createIcon:function(e,t){var n=Uc.getIconUrl.call(this),i=(n.absolute?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");jc.setAttributes(r,jc.extend(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),s=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",s):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(o),r},createLabel:function(e,t){var n=Rc(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,jc.createElement("span",i,n)},createBadge:function(e){if(jc.is.empty(e))return null;var t=jc.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(jc.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=jc.createElement("button"),i=Object.assign({},t),r=jc.toCamelCase(e),o=!1,s=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,s="play",l="pause",a="play",c="pause";break;case"mute":o=!0,s="mute",l="unmute",a="volume",c="muted";break;case"captions":o=!0,s="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":o=!0,s="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",s="play",a="play";break;default:s=r,a=e}return o?(n.appendChild(Uc.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(Uc.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(Uc.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(Uc.createLabel.call(this,s,{class:"label--not-pressed"})),i["aria-pressed"]=!1):(n.appendChild(Uc.createIcon.call(this,a)),n.appendChild(Uc.createLabel.call(this,s))),jc.extend(i,jc.getAttributesFromSelector(this.config.selectors.buttons[r],i)),jc.setAttributes(n,i),"play"===r?(jc.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=jc.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},Rc(e,this.config)),i=jc.createElement("input",jc.extend(jc.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,Uc.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=jc.createElement("progress",jc.extend(jc.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(jc.createElement("span",null,"0"));var i="";switch(e){case"played":i=Rc("played",this.config);break;case"buffer":i=Rc("buffered",this.config)}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=jc.getAttributesFromSelector(this.config.selectors.display[e]),n=jc.createElement("div",jc.extend(t,{class:"plyr__time "+t.class,"aria-label":Rc(e,this.config)}),"00:00");return this.elements.display[e]=n,n},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=jc.createElement("li"),a=jc.createElement("label",{class:this.config.classNames.control}),l=jc.createElement("input",jc.extend(jc.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=jc.createElement("span",{hidden:""});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),jc.is.element(r)&&a.appendChild(r),s.appendChild(a),t.appendChild(s)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&jc.is.element(this.elements.inputs.seek)&&jc.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.inputs.seek.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){jc.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(jc.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!jc.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),Vc.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",jc.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},toggleTab:function(e,t){jc.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(jc.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");jc.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!jc.is.empty(this.options.quality)&&this.options.quality.length>1;if(Uc.toggleTab.call(this,"quality",i),Uc.checkMenu.call(this),i){jc.emptyElement(n);this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){var i=Uc.getLabel.call(t,"quality",e);Uc.createMenuItem.call(t,e,n,"quality",i,function(e){var n="";switch(e){case 2160:n="4K";break;case 1440:case 1080:case 720:n="HD";break;case 576:n="SD"}return n.length?Uc.createBadge.call(t,n):null}(e))}),Uc.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?Rc("normal",this.config):t+"&times;";case"quality":return jc.is.number(t)?t+"p":jc.toTitleCase(t);case"captions":return qc.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,o=t;switch(e){case"captions":r=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(r=jc.is.empty(n)?this[e]:n,jc.is.empty(r)&&(r=this.config[e].default),!jc.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if(jc.is.element(o)||(o=i&&i.querySelector("ul")),jc.is.element(o)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=Uc.getLabel.call(this,e,r);var s=o&&o.querySelector('input[value="'+r+'"]');jc.is.element(s)&&(s.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=qc.getTracks.call(this).length;if(Uc.toggleTab.call(this,"captions",n),jc.emptyElement(t),Uc.checkMenu.call(this),n){var i=qc.getTracks.call(this).map(function(t){return{language:jc.is.empty(t.language)?"enabled":t.language,label:qc.getLabel.call(e,t)}});i.unshift({language:"",label:Rc("disabled",this.config)}),i.forEach(function(n){Uc.createMenuItem.call(e,n.language,t,"language",n.label,"enabled"!==n.language?Uc.createBadge.call(e,n.language.toUpperCase()):null,n.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=i.map(function(e){return e.language}),Uc.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&jc.is.element(this.elements.settings.panes.speed)){jc.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!jc.is.empty(this.options.speed)&&this.options.speed.length>1;if(Uc.toggleTab.call(this,"speed",n),Uc.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector("ul");jc.emptyElement(i),this.options.speed.forEach(function(e){var n=Uc.getLabel.call(t,"speed",e);Uc.createMenuItem.call(t,e,i,"speed",n)}),Uc.updateSetting.call(this,"speed",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!jc.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});jc.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(jc.is.element(t)&&jc.is.element(n)){var i=jc.is.boolean(e)?e:jc.is.element(t)&&t.hasAttribute("hidden");if(jc.is.event(e)){var r=jc.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}jc.is.element(n)&&n.setAttribute("aria-expanded",i),jc.is.element(t)&&(jc.toggleHidden(t,!i),jc.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return jc.removeElement(t),{width:n,height:i}},showTab:function(e){var t=this.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),r=document.getElementById(n.getAttribute("aria-controls"));if(jc.is.element(r)&&"tabpanel"===r.getAttribute("role")){var o=t.querySelector('[role="tabpanel"]:not([hidden])'),s=o.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+o.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),Pc.transitions&&!Pc.reducedMotion){s.style.width=o.scrollWidth+"px",s.style.height=o.scrollHeight+"px";var a=Uc.getTabSize.call(this,r);jc.on(s,jc.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",jc.off(s,jc.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}jc.toggleHidden(o,!0),o.setAttribute("tabindex",-1),jc.toggleHidden(r,!i),n.setAttribute("aria-expanded",i),r.removeAttribute("tabindex"),r.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(jc.is.empty(this.config.controls))return null;var n=jc.createElement("div",jc.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(Uc.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(Uc.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(Uc.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(Uc.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=jc.createElement("div",jc.getAttributesFromSelector(this.config.selectors.progress)),r=Uc.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(Uc.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=jc.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(Uc.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(Uc.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(Uc.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=jc.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=Uc.createRange.call(this,"volume",jc.extend(a,{id:"plyr-volume-"+e.id}));s.appendChild(l.label),s.appendChild(l.input),this.elements.volume=s,n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(Uc.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!jc.is.empty(this.config.settings)){var c=jc.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(Uc.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=jc.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),d=jc.createElement("div"),f=jc.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=jc.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=jc.createElement("li",{role:"tab",hidden:""}),r=jc.createElement("button",jc.extend(jc.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),Rc(n,t.config)),o=jc.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),f.appendChild(h),d.appendChild(f),this.config.settings.forEach(function(n){var i=jc.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1}),r=jc.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},Rc(n,t.config));i.appendChild(r);var o=jc.createElement("ul");i.appendChild(o),d.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(d),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&Pc.pip&&n.appendChild(Uc.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Pc.airplay&&n.appendChild(Uc.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(Uc.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(Uc.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&Uc.setQualityMenu.call(this,Bc.getQualityOptions.call(this)),Uc.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=Uc.getIconUrl.call(this);t.absolute&&jc.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;jc.is.string(this.config.controls)||jc.is.element(this.config.controls)?n=this.config.controls:jc.is.function(this.config.controls)?n=this.config.controls.call(this,i):(n=Uc.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:qc.getLabel.call(this)}),r=!1);var o=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Cc(e,2),i=n[0],r=n[1];t=jc.replaceAll(t,"{"+i+"}",r)}),t};r&&(jc.is.string(this.config.controls)?n=o(n):jc.is.element(n)&&(n.innerHTML=o(n.innerHTML)));var s=void 0;if(jc.is.string(this.config.selectors.controls.container)&&(s=document.querySelector(this.config.selectors.controls.container)),jc.is.element(s)||(s=this.elements.container),jc.is.element(n)?s.appendChild(n):n&&s.insertAdjacentHTML("beforeend",n),jc.is.element(this.elements.controls)||jc.findElements.call(this),window.navigator.userAgent.includes("Edge")&&jc.repaint(s),this.config.tooltips.controls){var a=jc.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(a).forEach(function(t){jc.toggleClass(t,e.config.classNames.hidden,!1),jc.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},Hc=jc.getBrowser(),Wc=function(){function e(t){xc(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Ac(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&jc.is.number(n)){if(i){var o=jc.getFocusElement();if(jc.is.element(o)&&jc.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){Uc.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,jc.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),jc.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&jc.toggleListener(window,"keydown keyup",this.handleKey,e,!1),jc.toggleListener(document.body,"click",this.toggleMenu,e),jc.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&jc.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),jc.on(this.player.elements.container,"focusout",function(t){jc.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),jc.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){jc.toggleClass(jc.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&jc.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(jc.on(this.player.media,"timeupdate seeking",function(t){return Vc.timeUpdate.call(e.player,t)}),jc.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return Vc.durationUpdate.call(e.player,t)}),jc.on(this.player.media,"loadeddata",function(){jc.toggleHidden(e.player.elements.volume,!e.player.hasAudio),jc.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),jc.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.showPosterOnEnd&&(e.player.restart(),e.player.media.load())}),jc.on(this.player.media,"progress playing",function(t){return Vc.updateProgress.call(e.player,t)}),jc.on(this.player.media,"volumechange",function(t){return Vc.updateVolume.call(e.player,t)}),jc.on(this.player.media,"playing play pause ended emptied",function(t){return Vc.checkPlaying.call(e.player,t)}),jc.on(this.player.media,"waiting canplay seeked playing",function(t){return Vc.checkLoading.call(e.player,t)}),jc.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=jc.getElement.call(this.player,"."+this.player.config.classNames.video);if(!jc.is.element(t))return;jc.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&jc.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),jc.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),jc.on(this.player.media,"ratechange",function(){Uc.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),jc.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),jc.on(this.player.media,"qualitychange",function(t){Uc.updateSetting.call(e.player,"quality",null,t.detail.quality)}),jc.on(this.player.media,"languagechange",function(){Uc.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),jc.on(this.player.media,"captionsenabled captionsdisabled",function(){Uc.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),jc.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.player.media.error),jc.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=Hc.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],o=!0;jc.is.function(r)&&(o=r.call(e.player,t)),o&&jc.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=e.player.config.listeners[o],l=jc.is.function(a);jc.on(t,i,function(e){return n(e,r,o)},s&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){Uc.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation(),jc.matches(t.target,e.player.config.selectors.inputs.language)?n(t,function(){e.player.language=t.target.value},"language"):jc.matches(t.target,e.player.config.selectors.inputs.quality)?n(t,function(){e.player.quality=t.target.value},"quality"):jc.matches(t.target,e.player.config.selectors.inputs.speed)?n(t,function(){e.player.speed=parseFloat(t.target.value)},"speed"):Uc.showTab.call(e.player,t)}),i(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!jc.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,Vc.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),Hc.isWebkit&&i(jc.getElements.call(this.player,'input[type="range"]'),"input",function(t){Uc.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return Uc.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),Yc=function(){function e(t){xc(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Ac(e,[{key:"get",value:function(t){if(!e.supported)return null;var n=window.localStorage.getItem(this.key);if(jc.is.empty(n))return null;var i=JSON.parse(n);return jc.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&jc.is.object(t)){var n=this.get();jc.is.empty(n)&&(n={}),jc.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),Gc=function(){function e(t){var n=this;xc(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&jc.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return Ac(e,[{key:"load",value:function(){var e=this;this.enabled&&(jc.is.object(window.google)&&jc.is.object(window.google.ima)?this.ready():jc.loadScript(this.player.config.urls.googleIMA.api).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=jc.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=jc.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=Rc("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),jc.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(jc.is.element(n)){var i=100/t.player.duration*e,r=jc.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();jc.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;jc.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];jc.is.array(o)&&o.forEach(function(e){jc.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return jc.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){jc.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+jc.buildUrlParams(e)}}]),e}();function Kc(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}var Qc={setup:function(){var e=this;jc.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Qc.setAspectRatio.call(this),jc.is.object(window.YT)&&jc.is.function(window.YT.Player)?Qc.ready.call(this):(jc.loadScript(this.config.urls.youtube.api).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Qc.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(jc.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(jc.is.empty(n))return this.config.title=n,void Vc.setTitle.call(this)}var i=this.config.keys.google;if(jc.is.string(i)&&!jc.is.empty(i)){var r="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+i+"&fields=items(snippet(title))&part=snippet";jc.fetch(r).then(function(e){jc.is.object(e)&&(t.config.title=e.items[0].snippet.title,Vc.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(jc.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");jc.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=jc.parseYouTubeId(n),r=jc.generateId(e.provider),o=jc.createElement("div",{id:r});e.media=jc.replaceElement(o,e.media),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!jc.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,jc.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){jc.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),jc.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;Qc.getTitle.call(e,i),e.media.play=function(){n.playVideo()},e.media.pause=function(){n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){var i=e.media.paused;e.media.seeking=!0,jc.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t),i&&e.pause()}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return Kc(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(Kc(i)),jc.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),jc.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=jc.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),jc.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),jc.dispatchEvent.call(e,e.media,"timeupdate"),jc.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&jc.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),jc.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return Vc.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:jc.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),jc.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):jc.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&jc.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&jc.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,jc.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){jc.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),jc.dispatchEvent.call(e,e.media,"durationchange")),Uc.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),jc.is.empty(n)?n:jc.dedupe(n.map(function(e){return Kc(e)}))));break;case 2:e.media.paused=!0,jc.dispatchEvent.call(e,e.media,"pause")}jc.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},Jc={setup:function(){var e=this;jc.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Jc.setAspectRatio.call(this),jc.is.object(window.Vimeo)?Jc.ready.call(this):jc.loadScript(this.config.urls.vimeo.api).then(function(){Jc.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=jc.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-"+i+"%)"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},i=jc.buildUrlParams(n),r=t.media.getAttribute("src");jc.is.empty(r)&&(r=t.media.getAttribute(this.config.attributes.embed.id));var o=jc.parseVimeoId(r),s=jc.createElement("iframe"),a="https://player.vimeo.com/video/"+o+"?"+i;s.setAttribute("src",a),s.setAttribute("allowfullscreen",""),s.setAttribute("allowtransparency",""),s.setAttribute("allow","autoplay");var l=jc.createElement("div");l.appendChild(s),t.media=jc.replaceElement(l,t.media),t.embed=new window.Vimeo.Player(s),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,jc.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e).catch(function(){}),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,jc.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&Uc.setSpeedMenu.call(t,[])})}});var d=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return d},set:function(e){t.embed.setVolume(e).then(function(){d=e,jc.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return f},set:function(e){var n=!!jc.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){f=n,jc.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=jc.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=jc.getAspectRatio(t[0],t[1]);Jc.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,Vc.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,jc.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,jc.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,qc.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=jc.stripHTML(e.cues[0].text)),qc.setText.call(t,n)}),t.embed.on("loaded",function(){jc.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&jc.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,jc.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,jc.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,jc.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,jc.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&jc.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,jc.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,jc.dispatchEvent.call(t,t.media,"seeked"),jc.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,jc.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,jc.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return Vc.build.call(t)},0)}},$c=jc.getBrowser(),Xc={setup:function(){if(this.media)if(jc.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),jc.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&jc.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(jc.toggleClass(this.elements.container,this.config.classNames.pip.supported,Pc.pip&&this.isHTML5&&this.isVideo),jc.toggleClass(this.elements.container,this.config.classNames.airplay.supported,Pc.airplay&&this.isHTML5),jc.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),jc.toggleClass(this.elements.container,this.config.classNames.isIos,$c.isIos),jc.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch)),this.isVideo&&(this.elements.wrapper=jc.createElement("div",{class:this.config.classNames.video}),jc.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":Qc.setup.call(this);break;case"vimeo":Jc.setup.call(this)}else this.isHTML5&&(Vc.setTitle.call(this),Bc.extend.call(this));else this.debug.warn("No media element found!")}},Zc={insertElements:function(e,t){var n=this;jc.is.string(t)?jc.insertElement(e,this.media,{src:t}):jc.is.array(t)&&t.forEach(function(t){jc.insertElement(e,n.media,t)})},change:function(e){var t=this;jc.is.object(e)&&"sources"in e&&e.sources.length?(Bc.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],jc.removeElement(t.media),t.media=null,jc.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=jc.is.empty(e.sources[0].provider)?_c.html5:e.sources[0].provider,t.supported=Pc.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=jc.createElement("video");break;case"html5:audio":t.media=jc.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=jc.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),jc.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),Vc.addStyleHook.call(t),t.isHTML5&&Zc.insertElements.call(t,"source",e.sources),t.config.title=e.title,Xc.setup.call(t),t.isHTML5&&("tracks"in e&&Zc.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&Vc.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,n){var i=this;if(xc(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Pc.touch,this.media=t,jc.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||jc.is.nodeList(this.media)||jc.is.array(this.media))&&(this.media=this.media[0]),this.config=jc.extend({},Tc,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new Lc(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Pc),!jc.is.nullOrUndefined(this.media)&&jc.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Pc.check().api){setTimeout(function(){var e=i.media.cloneNode(!0);e.getAttribute("autoplay")&&e.pause(),i.elements.original=e},0);var r=this.media.tagName.toLowerCase(),o=null,s=null,a=null;switch(r){case"div":if(o=this.media.querySelector("iframe"),jc.is.element(o)){if(s=o.getAttribute("src"),this.provider=jc.getProviderByUrl(s),this.elements.container=this.media,this.media=o,this.elements.container.className="",a=jc.getUrlParams(s),!jc.is.empty(a)){var l=["1","true"];l.includes(a.autoplay)&&(this.config.autoplay=!0),l.includes(a.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=l.includes(a.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(jc.is.empty(this.provider)||!Object.keys(_c).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=kc.video;break;case"video":case"audio":this.type=r,this.provider=_c.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Pc.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new Wc(this),this.storage=new Yc(this),this.media.plyr=this,jc.is.element(this.elements.container)||(this.elements.container=jc.createElement("div"),jc.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),Vc.addStyleHook.call(this),Xc.setup.call(this),this.config.debug&&jc.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&Vc.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new zc(this),this.ads=new Gc(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return Ac(e,[{key:"play",value:function(){return jc.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&jc.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(jc.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():jc.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(jc.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(jc.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(jc.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(jc.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=jc.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,jc.toggleState(this.elements.buttons.captions,this.captions.active),jc.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),jc.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){Pc.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(jc.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(!jc.is.boolean(e))if(jc.is.event(e)){r="enterfullscreen"===e.type;i=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(n=2e3),this.touch||"focusin"!==e.type||(n=3e3,jc.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else i=jc.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),i||this.paused||this.loading){if(jc.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&jc.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=setTimeout(function(){jc.is.element(t.elements.controls)&&((!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&(jc.hasClass(t.elements.container,t.config.classNames.hideControls)||jc.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),jc.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(jc.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!jc.is.empty(t.config.settings)&&Uc.toggleMenu.call(t,!1))))},n))}}},{key:"on",value:function(e,t){jc.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){jc.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(jc.removeElement(t.elements.buttons.play),jc.removeElement(t.elements.captions),jc.removeElement(t.elements.controls),jc.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),jc.is.function(e)&&e()):(t.listeners.clear(),jc.replaceElement(t.elements.original,t.elements.container),jc.dispatchEvent.call(t,t.elements.original,"destroyed",!0),jc.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),Vc.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&jc.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return Pc.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===_c.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===_c.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===_c.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===kc.video)}},{key:"isAudio",get:function(){return Boolean(this.type===kc.audio)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2))}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;jc.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return jc.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;jc.is.string(t)&&(t=Number(t)),jc.is.number(t)||(t=this.storage.get("volume")),jc.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!jc.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;jc.is.boolean(t)||(t=this.storage.get("muted")),jc.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;jc.is.number(e)&&(t=e),jc.is.number(t)||(t=this.storage.get("speed")),jc.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(jc.is.empty(e)||(t=Number(e)),jc.is.number(t)&&0!==t||(t=this.storage.get("quality")),jc.is.number(t)||(t=this.config.quality.selected),jc.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=jc.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+n+" instead"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=jc.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){Zc.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?jc.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=jc.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(jc.is.string(e))if(jc.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,qc.setText.call(this,null),qc.setLanguage.call(this),jc.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(Pc.pip){var i=jc.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Pc.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return Pc.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return jc.loadSprite(e,t)}}]),e}()});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=(i.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),s=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},o=function(e){try{return!!e()}catch(e){return!0}},a=!o(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},d=!a&&!o(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),f=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},h=Object.defineProperty,p={f:a?Object.defineProperty:function(e,t,n){if(s(e),t=f(t,!0),s(n),d)try{return h(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=a?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,s=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,o){var a="function"==typeof r;a&&(v(r,"name")||m(r,"name",i)),e[i]!==r&&(a&&(v(r,t)||m(r,t,e[i]?""+e[i]:s.join(String(i)))),e===n?e[i]=r:o?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),T=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},S=function(e,t,n){if(T(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var s,o,a,l,c=e&A.F,u=e&A.G,d=e&A.S,f=e&A.P,h=e&A.B,p=u?n:d?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),y=g.prototype||(g.prototype={});for(s in u&&(r=t),r)a=((o=!c&&p&&void 0!==p[s])?p:r)[s],l=h&&o?S(a,n):f&&"function"==typeof a?S(Function.call,a):a,p&&k(p,s,a,e&A.U),g[s]!=a&&m(g,s,l),f&&y[s]!=a&&(y[s]=a)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),x=E("view"),M=!(!n.ArrayBuffer||!n.DataView),L=M,N=0,O="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");N<9;)(_=n[O[N++]])?(m(_.prototype,P,!0),m(_.prototype,x,!0)):L=!1;var j={ABV:M,CONSTR:L,TYPED:P,VIEW:x},I=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,q=Math.floor,B=function(e){return isNaN(e=+e)?0:(e>0?q:R)(e)},V=Math.min,D=function(e){return e>0?V(B(e),9007199254740991):0},U=function(e){if(void 0===e)return 0;var t=B(e),n=D(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},z=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},G=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},Y=function(e){return z(G(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=B(e))<0?K(e+t,0):Q(e,t)},$=function(e){return function(t,n,i){var r,s=Y(t),o=D(s.length),a=J(i,o);if(e&&n!=n){for(;o>a;)if((r=s[a++])!=r)return!0}else for(;o>a;a++)if((e||a in s)&&s[a]===n)return e||a||0;return!e&&-1}},X=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return X[e]||(X[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=E(e))},ne=$(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=Y(e),r=0,s=[];for(n in i)n!=ie&&v(i,n)&&s.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~ne(s,n)||s.push(n));return s},se="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),oe=se.concat("length","prototype"),ae={f:Object.getOwnPropertyNames||function(e){return re(e,oe)}},le=function(e){return Object(G(e))},ce=function(e){for(var t=le(this),n=D(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),s=i>2?arguments[2]:void 0,o=void 0===s?n:J(s,n);o>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),de=p.f,fe=ue("toStringTag"),he=function(e,t,n){e&&!v(e=n?e:e.prototype,fe)&&de(e,fe,{configurable:!0,value:t})},pe=t(function(e,t){var i=ae.f,r=p.f,s="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,d=n.Math,f=n.RangeError,h=n.Infinity,g=c,y=d.abs,v=d.pow,b=d.floor,w=d.log,E=d.LN2,k=a?"_b":"buffer",T=a?"_l":"byteLength",S=a?"_o":"byteOffset";function A(e,t,n){var i,r,s,o=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,d=0,f=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===h?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(s=v(2,-i))<1&&(i--,s*=2),(e+=i+c>=1?u/s:u*v(2,1-c))*s>=2&&(i++,s/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*s-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;o[d++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;o[d++]=255&i,i/=256,a-=8);return o[--d]|=128*f,o}function _(e,t,n){var i,r=8*n-t-1,s=(1<<r)-1,o=s>>1,a=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;a>0;u=256*u+e[l],l--,a-=8);for(i=u&(1<<-a)-1,u>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===u)u=1-o;else{if(u===s)return i?NaN:c?-h:h;i+=v(2,t),u-=o}return(c?-1:1)*i*v(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function x(e){return[255&e,e>>8&255]}function M(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return A(e,52,8)}function N(e){return A(e,23,4)}function O(e,t,n){r(e[s],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=U(+n);if(r+t>e[T])throw f(l);var s=e[k]._b,o=r+e[S],a=s.slice(o,o+t);return i?a:a.reverse()}function q(e,t,n,i,r,s){var o=U(+n);if(o+t>e[T])throw f(l);for(var a=e[k]._b,c=o+e[S],u=i(+r),d=0;d<t;d++)a[c+d]=u[s?d:t-d-1]}if(j.ABV){if(!o(function(){c(1)})||!o(function(){new c(-1)})||o(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var V,H=(c=function(e){return F(this,c),new g(U(e))})[s]=g[s],W=i(g),z=0;W.length>z;)(V=W[z++])in c||m(c,V,g[V]);H.constructor=c}var G=new u(new c(2)),Y=u[s].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||I(u[s],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=U(e);this._b=ce.call(new Array(t),0),this[T]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[T],r=B(t);if(r<0||r>i)throw f("Wrong offset!");if(r+(n=void 0===n?i-r:D(n))>i)throw f("Wrong length!");this[k]=e,this[S]=r,this[T]=n},a&&(O(c,"byteLength","_l"),O(u,"buffer","_b"),O(u,"byteLength","_l"),O(u,"byteOffset","_o")),I(u[s],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){q(this,1,e,P,t)},setUint8:function(e,t){q(this,1,e,P,t)},setInt16:function(e,t){q(this,2,e,x,t,arguments[2])},setUint16:function(e,t){q(this,2,e,x,t,arguments[2])},setInt32:function(e,t){q(this,4,e,M,t,arguments[2])},setUint32:function(e,t){q(this,4,e,M,t,arguments[2])},setFloat32:function(e,t){q(this,4,e,N,t,arguments[2])},setFloat64:function(e,t){q(this,8,e,L,t,arguments[2])}});he(c,"ArrayBuffer"),he(u,"DataView"),m(u[s],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),ge=ue("species"),me=function(e,t){var n,i=s(e).constructor;return void 0===i||void 0==(n=s(i)[ge])?t:T(n)},ye=ue("species"),ve=function(e){var t=n[e];a&&t&&!t[ye]&&p.f(t,ye,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,Ee=pe.DataView,ke=j.ABV&&be.isView,Te=we.prototype.slice,Se=j.VIEW;C(C.G+C.W+C.F*(be!==we),{ArrayBuffer:we}),C(C.S+C.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return ke&&ke(e)||r(e)&&Se in e}}),C(C.P+C.U+C.F*o(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Te&&void 0===t)return Te.call(s(this),e);for(var n=s(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),o=new(me(this,we))(D(r-i)),a=new Ee(this),l=new Ee(o),c=0;i<r;)l.setUint8(c++,a.getUint8(i++));return o}}),ve("ArrayBuffer");var Ae=ue("toStringTag"),_e="Arguments"==W(function(){return arguments}()),Ce=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Ae))?n:_e?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Pe={},xe=ue("iterator"),Me=Array.prototype,Le=function(e){return void 0!==e&&(Pe.Array===e||Me[xe]===e)},Ne=Object.keys||function(e){return re(e,se)},Oe=a?Object.defineProperties:function(e,t){s(e);for(var n,i=Ne(t),r=i.length,o=0;r>o;)p.f(e,n=i[o++],t[n]);return e},je=n.document,Ie=je&&je.documentElement,Fe=te("IE_PROTO"),Re=function(){},qe=function(){var e,t=u("iframe"),n=se.length;for(t.style.display="none",Ie.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),qe=e.F;n--;)delete qe.prototype[se[n]];return qe()},Be=Object.create||function(e,t){var n;return null!==e?(Re.prototype=s(e),n=new Re,Re.prototype=null,n[Fe]=e):n=qe(),void 0===t?n:Oe(n,t)},Ve=te("IE_PROTO"),De=Object.prototype,Ue=Object.getPrototypeOf||function(e){return e=le(e),v(e,Ve)?e[Ve]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?De:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(void 0!=e)return e[He]||e["@@iterator"]||Pe[Ce(e)]},ze=Array.isArray||function(e){return"Array"==W(e)},Ge=ue("species"),Ye=function(e,t){return new(function(e){var t;return ze(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!ze(t.prototype)||(t=void 0),r(t)&&null===(t=t[Ge])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ke=function(e,t){var n=1==e,i=2==e,r=3==e,s=4==e,o=6==e,a=5==e||o,l=t||Ye;return function(t,c,u){for(var d,f,h=le(t),p=z(h),g=S(c,u,3),m=D(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((a||y in p)&&(f=g(d=p[y],y,h),e))if(n)v[y]=f;else if(f)switch(e){case 3:return!0;case 5:return d;case 6:return y;case 2:v.push(d)}else if(s)return!1;return o?-1:r||s?s:v}},Qe=ue("unscopables"),Je=Array.prototype;void 0==Je[Qe]&&m(Je,Qe,{});var $e=function(e){Je[Qe][e]=!0},Xe=function(e,t){return{value:t,done:!!e}},Ze={};m(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=Be(Ze,{next:g(1,n)}),he(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,s,o){et(n,t,i);var a,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},d=t+" Iterator",f="values"==r,h=!1,p=e.prototype,g=p[tt]||p["@@iterator"]||r&&p[r],y=!nt&&g||u(r),b=r?f?u("entries"):y:void 0,w="Array"==t&&p.entries||g;if(w&&(c=Ue(w.call(new e)))!==Object.prototype&&c.next&&(he(c,d,!0),v(c,tt)||m(c,tt,it)),f&&g&&"values"!==g.name&&(h=!0,y=function(){return g.call(this)}),(nt||h||!p[tt])&&m(p,tt,y),Pe[t]=y,Pe[d]=it,r)if(a={values:f?y:u("values"),keys:s?y:u("keys"),entries:b},o)for(l in a)l in p||k(p,l,a[l]);else C(C.P+C.F*(nt||h),t,a);return a},st=rt(Array,"Array",function(e,t){this._t=Y(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Xe(1)):Xe(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Pe.Arguments=Pe.Array,$e("keys"),$e("values"),$e("entries");var ot=ue("iterator"),at=!1;try{[7][ot]().return=function(){at=!0}}catch(e){}var lt=function(e,t){if(!t&&!at)return!1;var n=!1;try{var i=[7],r=i[ot]();r.next=function(){return{done:n=!0}},i[ot]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=D(n.length),r=J(e,i),s=J(t,i),o=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===o?i:J(o,i))-s,i-r),l=1;for(s<r&&r<s+a&&(l=-1,s+=a-1,r+=a-1);a-- >0;)s in n?n[r]=n[s]:delete n[r],r+=l,s+=l;return n},ut={f:{}.propertyIsEnumerable},dt=Object.getOwnPropertyDescriptor,ft={f:a?dt:function(e,t){if(e=Y(e),t=f(t,!0),d)try{return dt(e,t)}catch(e){}if(v(e,t))return g(!ut.f.call(e,t),e[t])}},ht=t(function(e){if(a){var t=n,i=o,s=C,l=j,c=pe,u=S,d=F,h=g,y=m,b=I,w=B,k=D,T=U,A=J,_=f,P=v,x=Ce,M=r,L=le,N=Le,O=Be,R=Ue,q=ae.f,V=We,H=E,W=ue,z=Ke,G=$,Y=me,K=st,Q=Pe,X=lt,Z=ve,ee=ce,te=ct,ne=p,ie=ft,re=ne.f,se=ie.f,oe=t.RangeError,de=t.TypeError,fe=t.Uint8Array,he=Array.prototype,ge=c.ArrayBuffer,ye=c.DataView,be=z(0),we=z(2),Ee=z(3),ke=z(4),Te=z(5),Se=z(6),Ae=G(!0),_e=G(!1),xe=K.values,Me=K.keys,Ne=K.entries,Oe=he.lastIndexOf,je=he.reduce,Ie=he.reduceRight,Fe=he.join,Re=he.sort,qe=he.slice,Ve=he.toString,De=he.toLocaleString,He=W("iterator"),ze=W("toStringTag"),Ge=H("typed_constructor"),Ye=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,$e=l.VIEW,Xe=z(1,function(e,t){return it(Y(e,e[Ye]),t)}),Ze=i(function(){return 1===new fe(new Uint16Array([1]).buffer)[0]}),et=!!fe&&!!fe.prototype.set&&i(function(){new fe(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw oe("Wrong offset!");return n},nt=function(e){if(M(e)&&Je in e)return e;throw de(e+" is not a typed array!")},it=function(e,t){if(!(M(e)&&Ge in e))throw de("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return ot(Y(e,e[Ye]),t)},ot=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},at=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,s,o,a=L(e),l=arguments.length,c=l>1?arguments[1]:void 0,d=void 0!==c,f=V(a);if(void 0!=f&&!N(f)){for(o=f.call(a),i=[],t=0;!(s=o.next()).done;t++)i.push(s.value);a=i}for(d&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(a.length),r=it(this,n);n>t;t++)r[t]=d?c(a[t],t):a[t];return r},dt=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},ht=!!fe&&i(function(){De.call(new fe(1))}),pt=function(){return De.apply(ht?qe.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Oe.apply(nt(this),arguments)},map:function(e){return Xe(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(Y(n,n[Ye]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return rt(this,qe.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=L(e),r=k(i.length),s=0;if(r+t>n)throw oe("Wrong length!");for(;s<r;)this[t+s]=i[s++]},vt={entries:function(){return Ne.call(nt(this))},keys:function(){return Me.call(nt(this))},values:function(){return xe.call(nt(this))}},bt=function(e,t){return M(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?h(2,e[t]):se(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&M(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),s(s.S+s.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Ve.call({})})&&(Ve=De=function(){return Fe.call(this)});var kt=b({},gt);b(kt,vt),y(kt,He,vt.values),b(kt,{slice:mt,set:yt,constructor:function(){},toString:Ve,toLocaleString:pt}),at(kt,"buffer","b"),at(kt,"byteOffset","o"),at(kt,"byteLength","l"),at(kt,"length","e"),re(kt,ze,{get:function(){return this[Je]}}),e.exports=function(e,n,r,o){var a=e+((o=!!o)?"Clamped":"")+"Array",c="get"+e,u="set"+e,f=t[a],h=f||{},p=f&&R(f),g=!f||!l.ABV,m={},v=f&&f.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;o&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(f=r(function(e,t,i,r){d(e,f,a,"_d");var s,o,l,c,u=0,h=0;if(M(t)){if(!(t instanceof ge||"ArrayBuffer"==(c=x(t))||"SharedArrayBuffer"==c))return Je in t?ot(f,t):ut.call(f,t);s=t,h=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw oe("Wrong length!");if((o=p-h)<0)throw oe("Wrong length!")}else if((o=k(r)*n)+h>p)throw oe("Wrong length!");l=o/n}else l=T(t),s=new ge(o=l*n);for(y(e,"_d",{b:s,o:h,l:o,e:l,v:new ye(s)});u<l;)b(e,u++)}),v=f.prototype=O(kt),y(v,"constructor",f)):i(function(){f(1)})&&i(function(){new f(-1)})&&X(function(e){new f,new f(null),new f(1.5),new f(e)},!0)||(f=r(function(e,t,i,r){var s;return d(e,f,a),M(t)?t instanceof ge||"ArrayBuffer"==(s=x(t))||"SharedArrayBuffer"==s?void 0!==r?new h(t,tt(i,n),r):void 0!==i?new h(t,tt(i,n)):new h(t):Je in t?ot(f,t):ut.call(f,t):new h(T(t))}),be(p!==Function.prototype?q(h).concat(q(p)):q(h),function(e){e in f||y(f,e,h[e])}),f.prototype=v,v.constructor=f);var w=v[He],E=!!w&&("values"==w.name||void 0==w.name),S=vt.values;y(f,Ge,!0),y(v,Je,a),y(v,$e,!0),y(v,Ye,f),(o?new f(1)[ze]==a:ze in v)||re(v,ze,{get:function(){return a}}),m[a]=f,s(s.G+s.W+s.F*(f!=h),m),s(s.S,a,{BYTES_PER_ELEMENT:n}),s(s.S+s.F*i(function(){h.of.call(f,1)}),a,{from:ut,of:dt}),"BYTES_PER_ELEMENT"in v||y(v,"BYTES_PER_ELEMENT",n),s(s.P,a,gt),Z(a),s(s.P+s.F*et,a,{set:yt}),s(s.P+s.F*!E,a,vt),v.toString!=Ve&&(v.toString=Ve),s(s.P+s.F*i(function(){new f(1).slice()}),a,{slice:mt}),s(s.P+s.F*(i(function(){return[1,2].toLocaleString()!=new f([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),a,{toLocaleString:pt}),Q[a]=E?w:S,E||y(v,He,S)}}else e.exports=function(){}});ht("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ht("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(s(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&s(r.call(e)),t}},gt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,o,a){var l,c,u,d,f=a?function(){return e}:We(e),h=S(r,o,i?2:1),p=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(Le(f)){for(l=D(e.length);l>p;p++)if((d=i?h(s(c=e[p])[0],c[1]):h(e[p]))===t||d===n)return d}else for(u=f.call(e);!(c=u.next()).done;)if((d=pt(u,h,c.value,i))===t||d===n)return d};i.BREAK=t,i.RETURN=n}),mt=t(function(e){var t=E("meta"),n=p.f,i=0,s=Object.isExtensible||function(){return!0},a=!o(function(){return s(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!v(e,t)){if(!s(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!s(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return a&&c.NEED&&s(e)&&!v(e,t)&&l(e),e}}}),yt=(mt.KEY,mt.NEED,mt.fastKey,mt.getWeak,mt.onFreeze,function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}),vt=p.f,bt=mt.fastKey,wt=a?"_s":"size",Et=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},kt={getConstructor:function(e,t,n,i){var r=e(function(e,s){F(e,r,t,"_i"),e._t=t,e._i=Be(null),e._f=void 0,e._l=void 0,e[wt]=0,void 0!=s&&gt(s,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=yt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=yt(this,t),i=Et(n,e);if(i){var r=i.n,s=i.p;delete n._i[i.i],i.r=!0,s&&(s.n=r),r&&(r.p=s),n._f==i&&(n._f=r),n._l==i&&(n._l=s),n[wt]--}return!!i},forEach:function(e){yt(this,t);for(var n,i=S(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!Et(yt(this,t),e)}}),a&&vt(r.prototype,"size",{get:function(){return yt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,s=Et(e,t);return s?s.v=n:(e._l=s={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=s),i&&(i.n=s),e[wt]++,"F"!==r&&(e._i[r]=s)),e},getEntry:Et,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=yt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Xe(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Xe(1))},n?"entries":"values",!n,!0),ve(t)}},Tt=function(e,t){if(s(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},St={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=S(Function.call,ft.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return Tt(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:Tt},At=St.set,_t=function(e,t,i,s,a,l){var c=n[e],u=c,d=a?"set":"add",f=u&&u.prototype,h={},p=function(e){var t=f[e];k(f,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||f.forEach&&!o(function(){(new u).entries().next()}))){var g=new u,m=g[d](l?{}:-0,1)!=g,y=o(function(){g.has(1)}),v=lt(function(e){new u(e)}),b=!l&&o(function(){for(var e=new u,t=5;t--;)e[d](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,s=t.constructor;return s!==n&&"function"==typeof s&&(i=s.prototype)!==n.prototype&&r(i)&&At&&At(e,i),e}(new c,t,u);return void 0!=n&&gt(n,a,i[d],i),i})).prototype=f,f.constructor=u),(y||b)&&(p("delete"),p("has"),a&&p("get")),(b||m)&&p(d),l&&f.clear&&delete f.clear}else u=s.getConstructor(t,e,a,d),I(u.prototype,i),mt.NEED=!0;return he(u,e),h[e]=u,C(C.G+C.W+C.F*(u!=c),h),l||s.setStrong(u,e,a),u},Ct=(_t("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=kt.getEntry(yt(this,"Map"),e);return t&&t.v},set:function(e,t){return kt.def(yt(this,"Map"),0===e?0:e,t)}},kt,!0),_t("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return kt.def(yt(this,"Set"),e=0===e?0:e,e)}},kt),{f:Object.getOwnPropertySymbols}),Pt=Object.assign,xt=!Pt||o(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Pt({},e)[n]||Object.keys(Pt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,s=Ct.f,o=ut.f;i>r;)for(var a,l=z(arguments[r++]),c=s?Ne(l).concat(s(l)):Ne(l),u=c.length,d=0;u>d;)o.call(l,a=c[d++])&&(n[a]=l[a]);return n}:Pt,Mt=mt.getWeak,Lt=Ke(5),Nt=Ke(6),Ot=0,jt=function(e){return e._l||(e._l=new It)},It=function(){this.a=[]},Ft=function(e,t){return Lt(e.a,function(e){return e[0]===t})};It.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Nt(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var s=e(function(e,r){F(e,s,t,"_i"),e._t=t,e._i=Ot++,e._l=void 0,void 0!=r&&gt(r,n,e[i],e)});return I(s.prototype,{delete:function(e){if(!r(e))return!1;var n=Mt(e);return!0===n?jt(yt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=Mt(e);return!0===n?jt(yt(this,t)).has(e):n&&v(n,this._i)}}),s},def:function(e,t,n){var i=Mt(s(t),!0);return!0===i?jt(e).set(t,n):i[e._i]=n,e},ufstore:jt};t(function(e){var t,n=Ke(0),i=mt.getWeak,s=Object.isExtensible,a=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?a(yt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(yt(this,"WeakMap"),e,t)}},d=e.exports=_t("WeakMap",c,u,Rt,!0,!0);o(function(){return 7!=(new d).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),xt(t.prototype,u),mt.NEED=!0,n(["delete","has","get","set"],function(e){var n=d.prototype,i=n[e];k(n,e,function(n,o){if(r(n)&&!s(n)){this._f||(this._f=new t);var a=this._f[e](n,o);return"set"==e?this:a}return i.call(this,n,o)})}))});_t("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(yt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var qt=(n.Reflect||{}).apply,Bt=Function.apply;C(C.S+C.F*!o(function(){qt(function(){})}),"Reflect",{apply:function(e,t,n){var i=T(e),r=s(n);return qt?qt(i,t,r):Bt.call(i,t,r)}});var Vt=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Dt=[].slice,Ut={},Ht=Function.bind||function(e){var t=T(this),n=Dt.call(arguments,1),i=function(){var r=n.concat(Dt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Ut)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Ut[t]=Function("F,a","return new F("+i.join(",")+")")}return Ut[t](e,n)}(t,r.length,r):Vt(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,zt=o(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),Gt=!o(function(){Wt(function(){})});C(C.S+C.F*(zt||Gt),"Reflect",{construct:function(e,t){T(e),s(t);var n=arguments.length<3?e:T(arguments[2]);if(Gt&&!zt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var o=n.prototype,a=Be(r(o)?o:Object.prototype),l=Function.apply.call(e,a,t);return r(l)?l:a}}),C(C.S+C.F*o(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){s(e),t=f(t,!0),s(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Yt=ft.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=Yt(s(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,o,a=arguments.length<3?t:arguments[2];return s(t)===a?t[n]:(i=ft.f(t,n))?v(i,"value")?i.value:void 0!==i.get?i.get.call(a):void 0:r(o=Ue(t))?e(o,n,a):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return ft.f(s(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return Ue(s(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Kt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return s(e),!Kt||Kt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=ae.f(s(e)),n=Ct.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Jt});var $t=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){s(e);try{return $t&&$t(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var o,a,l=arguments.length<4?t:arguments[3],c=ft.f(s(t),n);if(!c){if(r(a=Ue(t)))return e(a,n,i,l);c=g(0)}return v(c,"value")?!(!1===c.writable||!r(l)||((o=ft.f(l,n)||g(0)).value=i,p.f(l,n,o),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),St&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){St.check(e,t);try{return St.set(e,t),!0}catch(e){return!1}}});var Xt,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,sn=n.MessageChannel,on=n.Dispatch,an=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++an]=function(){Vt("function"==typeof e?e:Function(e),t)},Xt(an),an},rn=function(e){delete ln[e]},"process"==W(tn)?Xt=function(e){tn.nextTick(S(cn,e,1))}:on&&on.now?Xt=function(e){on.now(S(cn,e,1))}:sn?(en=(Zt=new sn).port2,Zt.port1.onmessage=un,Xt=S(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?(Xt=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):Xt="onreadystatechange"in u("script")?function(e){Ie.appendChild(u("script")).onreadystatechange=function(){Ie.removeChild(this),cn.call(e)}}:function(e){setTimeout(S(cn,e,1),0)});var dn={set:nn,clear:rn},fn=dn.set,hn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,gn=n.Promise,mn="process"==W(pn);var yn,vn,bn,wn,En={f:function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=T(t),this.reject=T(n)}(e)}},kn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Tn=dn.set,Sn=function(){var e,t,i,r=function(){var n,r;for(mn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(mn)i=function(){pn.nextTick(r)};else if(!hn||n.navigator&&n.navigator.standalone)if(gn&&gn.resolve){var s=gn.resolve();i=function(){s.then(r)}}else i=function(){fn.call(n,r)};else{var o=!0,a=document.createTextNode("");new hn(r).observe(a,{characterData:!0}),i=function(){a.data=o=!o}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),An=n.TypeError,_n=n.process,Cn=n.Promise,Pn="process"==Ce(_n),xn=function(){},Mn=vn=En.f,Ln=!!function(){try{var e=Cn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(xn,xn)};return(Pn||"function"==typeof PromiseRejectionEvent)&&e.then(xn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},On=function(e,t){if(!e._n){e._n=!0;var n=e._c;Sn(function(){for(var i=e._v,r=1==e._s,s=0,o=function(t){var n,s,o=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{o?(r||(2==e._h&&Fn(e),e._h=1),!0===o?n=i:(c&&c.enter(),n=o(i),c&&c.exit()),n===t.promise?l(An("Promise-chain cycle")):(s=Nn(n))?s.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>s;)o(n[s++]);e._c=[],e._n=!1,t&&!e._h&&jn(e)})}},jn=function(e){Tn.call(n,function(){var t,i,r,s=e._v,o=In(e);if(o&&(t=kn(function(){Pn?_n.emit("unhandledRejection",s,e):(i=n.onunhandledrejection)?i({promise:e,reason:s}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",s)}),e._h=Pn||In(e)?2:1),e._a=void 0,o&&t.e)throw t.v})},In=function(e){return 1!==e._h&&0===(e._a||e._c).length},Fn=function(e){Tn.call(n,function(){var t;Pn?_n.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},Rn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),On(t,!0))},qn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw An("Promise can't be resolved itself");(t=Nn(e))?Sn(function(){var i={_w:n,_d:!1};try{t.call(e,S(qn,i,1),S(Rn,i,1))}catch(e){Rn.call(i,e)}}):(n._v=e,n._s=1,On(n,!1))}catch(e){Rn.call({_w:n,_d:!1},e)}}};Ln||(Cn=function(e){F(this,Cn,"Promise","_h"),T(e),yn.call(this);try{e(S(qn,this,1),S(Rn,this,1))}catch(e){Rn.call(this,e)}},(yn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Cn.prototype,{then:function(e,t){var n=Mn(me(this,Cn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Pn?_n.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&On(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),bn=function(){var e=new yn;this.promise=e,this.resolve=S(qn,e,1),this.reject=S(Rn,e,1)},En.f=Mn=function(e){return e===Cn||e===wn?new bn(e):vn(e)}),C(C.G+C.W+C.F*!Ln,{Promise:Cn}),he(Cn,"Promise"),ve("Promise"),wn=i.Promise,C(C.S+C.F*!Ln,"Promise",{reject:function(e){var t=Mn(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!Ln,"Promise",{resolve:function(e){return function(e,t){if(s(e),r(t)&&t.constructor===e)return t;var n=En.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(Ln&&lt(function(e){Cn.all(e).catch(xn)})),"Promise",{all:function(e){var t=this,n=Mn(t),i=n.resolve,r=n.reject,s=kn(function(){var n=[],s=0,o=1;gt(e,!1,function(e){var a=s++,l=!1;n.push(void 0),o++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--o||i(n))},r)}),--o||i(n)});return s.e&&r(s.v),n.promise},race:function(e){var t=this,n=Mn(t),i=n.reject,r=kn(function(){gt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Bn={f:ue},Vn=p.f,Dn=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:Bn.f(e)})},Un=ae.f,Hn={}.toString,Wn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],zn={f:function(e){return Wn&&"[object Window]"==Hn.call(e)?function(e){try{return Un(e)}catch(e){return Wn.slice()}}(e):Un(Y(e))}},Gn=mt.KEY,Yn=ft.f,Kn=p.f,Qn=zn.f,Jn=n.Symbol,$n=n.JSON,Xn=$n&&$n.stringify,Zn=ue("_hidden"),ei=ue("toPrimitive"),ti={}.propertyIsEnumerable,ni=Z("symbol-registry"),ii=Z("symbols"),ri=Z("op-symbols"),si=Object.prototype,oi="function"==typeof Jn,ai=n.QObject,li=!ai||!ai.prototype||!ai.prototype.findChild,ci=a&&o(function(){return 7!=Be(Kn({},"a",{get:function(){return Kn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Yn(si,t);i&&delete si[t],Kn(e,t,n),i&&e!==si&&Kn(si,t,i)}:Kn,ui=function(e){var t=ii[e]=Be(Jn.prototype);return t._k=e,t},di=oi&&"symbol"==typeof Jn.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Jn},fi=function(e,t,n){return e===si&&fi(ri,t,n),s(e),t=f(t,!0),s(n),v(ii,t)?(n.enumerable?(v(e,Zn)&&e[Zn][t]&&(e[Zn][t]=!1),n=Be(n,{enumerable:g(0,!1)})):(v(e,Zn)||Kn(e,Zn,g(1,{})),e[Zn][t]=!0),ci(e,t,n)):Kn(e,t,n)},hi=function(e,t){s(e);for(var n,i=function(e){var t=Ne(e),n=Ct.f;if(n)for(var i,r=n(e),s=ut.f,o=0;r.length>o;)s.call(e,i=r[o++])&&t.push(i);return t}(t=Y(t)),r=0,o=i.length;o>r;)fi(e,n=i[r++],t[n]);return e},pi=function(e){var t=ti.call(this,e=f(e,!0));return!(this===si&&v(ii,e)&&!v(ri,e))&&(!(t||!v(this,e)||!v(ii,e)||v(this,Zn)&&this[Zn][e])||t)},gi=function(e,t){if(e=Y(e),t=f(t,!0),e!==si||!v(ii,t)||v(ri,t)){var n=Yn(e,t);return!n||!v(ii,t)||v(e,Zn)&&e[Zn][t]||(n.enumerable=!0),n}},mi=function(e){for(var t,n=Qn(Y(e)),i=[],r=0;n.length>r;)v(ii,t=n[r++])||t==Zn||t==Gn||i.push(t);return i},yi=function(e){for(var t,n=e===si,i=Qn(n?ri:Y(e)),r=[],s=0;i.length>s;)!v(ii,t=i[s++])||n&&!v(si,t)||r.push(ii[t]);return r};oi||(k((Jn=function(){if(this instanceof Jn)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===si&&t.call(ri,n),v(this,Zn)&&v(this[Zn],e)&&(this[Zn][e]=!1),ci(this,e,g(1,n))};return a&&li&&ci(si,e,{configurable:!0,set:t}),ui(e)}).prototype,"toString",function(){return this._k}),ft.f=gi,p.f=fi,ae.f=zn.f=mi,ut.f=pi,Ct.f=yi,a&&k(si,"propertyIsEnumerable",pi,!0),Bn.f=function(e){return ui(ue(e))}),C(C.G+C.W+C.F*!oi,{Symbol:Jn});for(var vi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),bi=0;vi.length>bi;)ue(vi[bi++]);for(var wi=Ne(ue.store),Ei=0;wi.length>Ei;)Dn(wi[Ei++]);C(C.S+C.F*!oi,"Symbol",{for:function(e){return v(ni,e+="")?ni[e]:ni[e]=Jn(e)},keyFor:function(e){if(!di(e))throw TypeError(e+" is not a symbol!");for(var t in ni)if(ni[t]===e)return t},useSetter:function(){li=!0},useSimple:function(){li=!1}}),C(C.S+C.F*!oi,"Object",{create:function(e,t){return void 0===t?Be(e):hi(Be(e),t)},defineProperty:fi,defineProperties:hi,getOwnPropertyDescriptor:gi,getOwnPropertyNames:mi,getOwnPropertySymbols:yi}),$n&&C(C.S+C.F*(!oi||o(function(){var e=Jn();return"[null]"!=Xn([e])||"{}"!=Xn({a:e})||"{}"!=Xn(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],s=1;arguments.length>s;)i.push(arguments[s++]);if(n=t=i[1],(r(t)||void 0!==e)&&!di(e))return ze(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!di(t))return t}),i[1]=t,Xn.apply($n,i)}}),Jn.prototype[ei]||m(Jn.prototype,ei,Jn.prototype.valueOf),he(Jn,"Symbol"),he(Math,"Math",!0),he(n.JSON,"JSON",!0);var ki=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*o(function(){n(1)}),"Object",r)},Ti=mt.onFreeze;ki("freeze",function(e){return function(t){return e&&r(t)?e(Ti(t)):t}});var Si=mt.onFreeze;ki("seal",function(e){return function(t){return e&&r(t)?e(Si(t)):t}});var Ai=mt.onFreeze;ki("preventExtensions",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}}),ki("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var _i=ft.f;ki("getOwnPropertyDescriptor",function(){return function(e,t){return _i(Y(e),t)}}),ki("getPrototypeOf",function(){return function(e){return Ue(le(e))}}),ki("keys",function(){return function(e){return Ne(le(e))}}),ki("getOwnPropertyNames",function(){return zn.f}),C(C.S+C.F,"Object",{assign:xt});var Ci=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Ci});var Pi=p.f,xi=Function.prototype,Mi=/^\s*function ([^ (]*)/;"name"in xi||a&&Pi(xi,"name",{configurable:!0,get:function(){try{return(""+this).match(Mi)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=Y(e.raw),n=D(t.length),i=arguments.length,r=[],s=0;n>s;)r.push(String(t[s++])),s<i&&r.push(String(arguments[s]));return r.join("")}});var Li=String.fromCharCode,Ni=String.fromCodePoint;C(C.S+C.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Li(t):Li(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Oi,ji=(Oi=!1,function(e,t){var n,i,r=String(G(e)),s=B(t),o=r.length;return s<0||s>=o?Oi?"":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===o||(i=r.charCodeAt(s+1))<56320||i>57343?Oi?r.charAt(s):n:Oi?r.slice(s,s+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return ji(this,e)}});var Ii=function(e){var t=String(G(this)),n="",i=B(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:Ii});var Fi=ue("match"),Ri=function(e){var t;return r(e)&&(void 0!==(t=e[Fi])?!!t:"RegExp"==W(e))},qi=function(e,t,n){if(Ri(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(G(e))},Bi=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Bi]=!1,!"/./"[e](t)}catch(e){}}return!0},Di="".startsWith;C(C.P+C.F*Vi("startsWith"),"String",{startsWith:function(e){var t=qi(this,e,"startsWith"),n=D(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Di?Di.call(t,i,n):t.slice(n,n+i.length)===i}});var Ui="".endsWith;C(C.P+C.F*Vi("endsWith"),"String",{endsWith:function(e){var t=qi(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=D(t.length),r=void 0===n?i:Math.min(D(n),i),s=String(e);return Ui?Ui.call(t,s,r):t.slice(r-s.length,r)===s}});C(C.P+C.F*Vi("includes"),"String",{includes:function(e){return!!~qi(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});a&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=s(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Hi=function(e,t,n){var i=ue(e),r=n(G,i,""[e]),s=r[0],a=r[1];o(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,s),m(RegExp.prototype,i,2==t?function(e,t){return a.call(e,this,t)}:function(e){return a.call(e,this)}))};Hi("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Hi("replace",2,function(e,t,n){return[function(i,r){var s=e(this),o=void 0==i?void 0:i[t];return void 0!==o?o.call(i,s,r):n.call(String(s),i,r)},n]}),Hi("split",2,function(e,t,n){var i=Ri,r=n,s=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var o=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,d,f=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,h+"g");for(o||(a=new RegExp("^"+m.source+"$(?!\\s)",h));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(f.push(n.slice(p,l.index)),!o&&l.length>1&&l[0].replace(a,function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(l[d]=void 0)}),l.length>1&&l.index<n.length&&s.apply(f,l.slice(1)),u=l[0].length,p=c,f.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||f.push(""):f.push(n.slice(p)),f.length>g?f.slice(0,g):f}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var s=e(this),o=void 0==i?void 0:i[t];return void 0!==o?o.call(i,s,r):n.call(String(s),i,r)},n]}),Hi("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var Wi=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,s=le(e),o="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,d=We(s);if(c&&(l=S(l,a>2?arguments[2]:void 0,2)),void 0==d||o==Array&&Le(d))for(n=new o(t=D(s.length));t>u;u++)Wi(n,u,c?l(s[u],u):s[u]);else for(r=d.call(s),n=new o;!(i=r.next()).done;u++)Wi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*o(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)Wi(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:ct}),$e("copyWithin");var zi=Ke(5),Gi=!0;"find"in[]&&Array(1).find(function(){Gi=!1}),C(C.P+C.F*Gi,"Array",{find:function(e){return zi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("find");var Yi=Ke(6),Ki=!0;"findIndex"in[]&&Array(1).findIndex(function(){Ki=!1}),C(C.P+C.F*Ki,"Array",{findIndex:function(e){return Yi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("findIndex"),C(C.P,"Array",{fill:ce}),$e("fill");var Qi=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Qi(e)}});var Ji=Math.floor,$i=function(e){return!r(e)&&isFinite(e)&&Ji(e)===e};C(C.S,"Number",{isInteger:$i});var Xi=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return $i(e)&&Xi(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var Zi=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},er=Math.sqrt,tr=Math.acosh;C(C.S+C.F*!(tr&&710==Math.floor(tr(Number.MAX_VALUE))&&tr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:Zi(e-1+er(e-1)*er(e+1))}});var nr=Math.asinh;C(C.S+C.F*!(nr&&1/nr(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var ir=Math.atanh;C(C.S+C.F*!(ir&&1/ir(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var rr=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return rr(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var sr=Math.exp;C(C.S,"Math",{cosh:function(e){return(sr(e=+e)+sr(-e))/2}});var or=Math.expm1,ar=!or||or(10)>22025.465794806718||or(10)<22025.465794806718||-2e-17!=or(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:or;C(C.S+C.F*(ar!=Math.expm1),"Math",{expm1:ar});var lr=Math.pow,cr=lr(2,-52),ur=lr(2,-23),dr=lr(2,127)*(2-ur),fr=lr(2,-126),hr=Math.fround||function(e){var t,n,i=Math.abs(e),r=rr(e);return i<fr?r*(i/fr/ur+1/cr-1/cr)*fr*ur:(n=(t=(1+ur/cr)*i)-(t-i))>dr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:hr});var pr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,s=0,o=arguments.length,a=0;s<o;)a<(n=pr(arguments[s++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var gr=Math.imul;C(C.S+C.F*o(function(){return-5!=gr(4294967295,5)||2!=gr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,s=65535&i;return 0|r*s+((65535&n>>>16)*s+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:Zi}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:rr});var mr=Math.exp;C(C.S+C.F*o(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(ar(e)-ar(-e))/2:(mr(e-1)-mr(-e-1))*(Math.E/2)}});var yr=Math.exp;C(C.S,"Math",{tanh:function(e){var t=ar(e=+e),n=ar(-e);return t==1/0?1:n==1/0?-1:(t-n)/(yr(e)+yr(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var vr=$(!0);C(C.P,"Array",{includes:function(e){return vr(this,e,arguments.length>1?arguments[1]:void 0)}}),$e("includes");var br=ut.f,wr=function(e){return function(t){for(var n,i=Y(t),r=Ne(i),s=r.length,o=0,a=[];s>o;)br.call(i,n=r[o++])&&a.push(e?[n,i[n]]:i[n]);return a}},Er=wr(!1);C(C.S,"Object",{values:function(e){return Er(e)}});var kr=wr(!0);C(C.S,"Object",{entries:function(e){return kr(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=Y(e),r=ft.f,s=Jt(i),o={},a=0;s.length>a;)void 0!==(n=r(i,t=s[a++]))&&Wi(o,t,n);return o}});var Tr=function(e,t,n,i){var r=String(G(e)),s=r.length,o=void 0===n?" ":String(n),a=D(t);if(a<=s||""==o)return r;var l=a-s,c=Ii.call(o,Math.ceil(l/o.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Sr=n.navigator,Ar=Sr&&Sr.userAgent||"";C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padStart:function(e){return Tr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padEnd:function(e){return Tr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var _r=[].slice,Cr=/MSIE .\./.test(Ar),Pr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&_r.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*Cr,{setTimeout:Pr(n.setTimeout),setInterval:Pr(n.setInterval)}),C(C.G+C.B,{setImmediate:dn.set,clearImmediate:dn.clear});for(var xr=ue("iterator"),Mr=ue("toStringTag"),Lr=Pe.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Or=Ne(Nr),jr=0;jr<Or.length;jr++){var Ir,Fr=Or[jr],Rr=Nr[Fr],qr=n[Fr],Br=qr&&qr.prototype;if(Br&&(Br[xr]||m(Br,xr,Lr),Br[Mr]||m(Br,Mr,Fr),Pe[Fr]=Lr,Rr))for(Ir in st)Br[Ir]||k(Br,Ir,st[Ir],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,s="function"==typeof Symbol?Symbol:{},o=s.iterator||"@@iterator",a=s.asyncIterator||"@@asyncIterator",l=s.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",d="suspendedYield",f="executing",h="completed",p={},g={};g[o]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(M([])));y&&y!==i&&r.call(y,o)&&(g=y);var v=T.prototype=E.prototype=Object.create(g);k.prototype=v.constructor=T,T.constructor=k,T[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,T):(e.__proto__=T,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},S(A.prototype),A.prototype[a]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},S(v),v[l]="Generator",v[o]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=M,x.prototype={constructor:x,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var s=this.tryEntries.length-1;s>=0;--s){var o=this.tryEntries[s],a=o.completion;if("root"===o.tryLoc)return i("end");if(o.tryLoc<=this.prev){var l=r.call(o,"catchLoc"),c=r.call(o,"finallyLoc");if(l&&c){if(this.prev<o.catchLoc)return i(o.catchLoc,!0);if(this.prev<o.finallyLoc)return i(o.finallyLoc)}else if(l){if(this.prev<o.catchLoc)return i(o.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return i(o.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var s=i;break}}s&&("break"===e||"continue"===e)&&s.tryLoc<=t&&t<=s.finallyLoc&&(s=null);var o=s?s.completion:{};return o.type=e,o.arg=t,s?(this.method="next",this.next=s.finallyLoc,p):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:M(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,s=Object.create(r.prototype),o=new x(i||[]);return s._invoke=function(e,t,n){var i=u;return function(r,s){if(i===f)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw s;return L()}for(n.method=r,n.arg=s;;){var o=n.delegate;if(o){var a=_(o,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?h:d,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,o),s}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function T(){}function S(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,s,o){var a=w(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,s,o)},function(e){n("throw",e,s,o)}):Promise.resolve(c).then(function(e){l.value=e,s(l)},o)}o(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var s=r.arg;return s?s.done?(t[e.resultName]=s.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):s:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function x(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function M(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,s=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return s.next=s}}return{next:L}}function L(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Dr=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Dr.prototype=window.Event.prototype,window.CustomEvent=Dr}var Ur,Hr=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function s(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function o(t,n,i,r){var s,a,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,f=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(s=!0,(a=l.createElement("link")).rel="stylesheet",a.href=f):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(a=l.createElement("img")).src=f:((a=l.createElement("script")).src=t,a.async=void 0===c||c),a.onload=a.onerror=a.onbeforeload=function(e){var l=e.type[0];if(s&&"hideFocus"in a)try{a.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return o(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==d(t,a)&&l.head.appendChild(a)}function a(e,n,i){var a,l;if(n&&n.trim&&(a=n),l=(a?i:n)||{},a){if(a in t)throw"LoadJS";t[a]=!0}!function(e,t,n){var i,r,s=(e=e.push?e:[e]).length,a=s,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--s||t(l)},r=0;r<a;r++)o(e[r],i,n)}(e,function(e){s(l,e),r(a,e)},l)}return a.ready=function(e,t){return function(e,t){var r,s,o,a=[],l=(e=e.push?e:[e]).length,c=l;for(r=function(e,n){n.length&&a.push(e),--c||t(a)};l--;)s=e[l],(o=n[s])?r(s,o):(i[s]=i[s]||[]).push(r)}(e,function(e){s(t,e)}),a},a.done=function(e){r(e,[])},a.reset=function(){t={},n={},i={}},a.isDefined=function(e){return e in t},a},e.exports=n()}),Wr={html5:"html5",youtube:"youtube",vimeo:"vimeo"},zr={audio:"audio",video:"video"},Gr=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},Yr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Kr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Qr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(i=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);i=!0);}catch(e){r=!0,s=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw s}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Jr={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e){return new Promise(function(t,n){Hr(e,{success:t,error:n})})},loadSprite:function(e,t){if(Jr.is.string(e)){var n=Jr.is.string(t),i=function(){return document.querySelectorAll("#"+t).length};if(!n||!i()){var r=document.createElement("div");if(Jr.toggleHidden(r,!0),n&&r.setAttribute("id",t),$r.storage){var s=window.localStorage.getItem("cache-"+t);if(null!==s){var o=JSON.parse(s);return void a.call(r,o.content)}}Jr.fetch(e).then(function(e){Jr.is.empty(e)||($r.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),a.call(r,e))}).catch(function(){})}}function a(e){n&&i()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,s=e.nextSibling;i.appendChild(e),s?r.insertBefore(i,s):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Jr.is.object(t)&&Jr.setAttributes(i,t),Jr.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Jr.createElement(e,n,i))},removeElement:function(e){Jr.is.nodeList(e)||Jr.is.array(e)?Array.from(e).forEach(Jr.removeElement):Jr.is.element(e)&&Jr.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Jr.is.element(t)&&Jr.is.element(t.parentNode)&&Jr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Jr.is.element(e)&&!Jr.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Qr(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!Jr.is.string(e)||Jr.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),s=t.replace(/[[\]]/g,"").split("="),o=s[0],a=s.length>1?s[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Jr.is.object(i)&&Jr.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[o]=a}}),n},toggleHidden:function(e,t){if(Jr.is.element(e)){var n=t;Jr.is.boolean(n)||(n=!e.hasAttribute("hidden")),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}},toggleClass:function(e,t,n){if(Jr.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return Jr.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Jr.is.element(e)){var n=Jr.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],s=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Jr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Jr.on(this.elements.container,"keydown",s,!1):Jr.off(this.elements.container,"keydown",s,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!Jr.is.empty(e)&&!Jr.is.empty(t)&&Jr.is.function(n))if(Jr.is.nodeList(e)||Jr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Jr.toggleListener.call(null,e,t,n,i,r,s)});else{var o=t.split(" "),a=s;$r.passiveListeners&&(a={passive:r,capture:s}),o.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Jr.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Jr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(Jr.is.element(e)&&!Jr.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:Jr.is.plyr(this)?this:null})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Jr.is.array(e)||Jr.is.nodeList(e))Array.from(e).forEach(function(e){return Jr.toggleState(e,t)});else if(Jr.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Jr.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},format:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return Jr.is.empty(e)?e:e.toString().replace(/{(\d+)}/g,function(e,t){return Jr.is.string(n[t])?n[t]:""})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Jr.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),s=this.getMinutes(e),o=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(s)+":"+i(o)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Jr.replaceAll(e,"-"," "),e=Jr.replaceAll(e,"_"," "),e=Jr.toTitleCase(e),Jr.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=Jr.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Jr.is.object(r)?(Object.keys(r).forEach(function(t){Jr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Kr({},t,{})),Jr.extend(e[t],r[t])):Object.assign(e,Kr({},t,r[t]))}),Jr.extend.apply(Jr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return Jr.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},closest:function(e,t){return Jr.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?Wr.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?Wr.vimeo:null},parseYouTubeId:function(e){if(Jr.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Jr.is.empty(e))return null;if(Jr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Qr(n,2),r=i[0],s=i[1];return Object.assign(e,Kr({},r,decodeURIComponent(s)))},{})},buildUrlParams:function(e){return Jr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Jr.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Jr.toggleHidden(e,!0),e.offsetHeight,Jr.toggleHidden(e,!1)},0)}},$r={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,s=Jr.getBrowser(),o=s.isIPhone&&n&&$r.playsinline;switch(t+":"+e){case"html5:video":r=(i=$r.video)&&$r.rangeInput&&(!s.isIPhone||o);break;case"html5:audio":r=(i=$r.audio)&&$r.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=$r.rangeInput&&(!s.isIPhone||o);break;default:r=(i=$r.audio&&$r.video)&&$r.rangeInput}return{api:i,ui:r}},pip:!Jr.getBrowser().isIPhone&&Jr.is.function(Jr.createElement("video").webkitSetPresentationMode),airplay:Jr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Jr.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Ur=document.createElement("input"),Ur.type="range","range"===Ur.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Jr.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Xr={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=Xr.getSources.call(this);if(Jr.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!Jr.is.empty(e.getAttribute("size"))});return Jr.is.empty(t)?null:Jr.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=Xr.getSources.call(e);if(Jr.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return Jr.is.empty(n)?null:Number(n[0].getAttribute("size"))},set:function(t){var n=Xr.getSources.call(e);if(!Jr.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute("size"))===t});if(!Jr.is.empty(i)){var r=i.filter(function(t){return $r.mime.call(e,t.getAttribute("type"))});if(!Jr.is.empty(r)){Jr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var s=e.currentTime,o=e.playing;e.media.src=r[0].getAttribute("src"),e.media.load(),o&&e.play(),e.currentTime=s,Jr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(Jr.removeElement(Xr.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},Zr=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Jr.is.empty(e)||Jr.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var n=t.i18n[e],i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Qr(e,2),i=t[0],r=t[1];n=Jr.replaceAll(n,i,r)}),n},es=Jr.getBrowser(),ts={addStyleHook:function(){Jr.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Jr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void ts.toggleNativeControls.call(this,!0);Jr.is.element(this.elements.controls)||(is.inject.call(this),this.listeners.controls()),ts.toggleNativeControls.call(this),rs.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,ts.updateVolume.call(this),ts.timeUpdate.call(this),ts.checkPlaying.call(this),Jr.toggleClass(this.elements.container,this.config.classNames.pip.supported,$r.pip&&this.isHTML5&&this.isVideo),Jr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,$r.airplay&&this.isHTML5),Jr.toggleClass(this.elements.container,this.config.classNames.isIos,es.isIos),Jr.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){Jr.dispatchEvent.call(e,e.media,"ready")},0),ts.setTitle.call(this),ts.setPoster.call(this)},setTitle:function(){var e=Zr("play",this.config);if(Jr.is.string(this.config.title)&&!Jr.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Jr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Jr.getElement.call(this,"iframe");if(!Jr.is.element(t))return;var n=Jr.is.empty(this.config.title)?"video":this.config.title,i=Zr("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},setPoster:function(){if(Jr.is.element(this.elements.poster)&&!Jr.is.empty(this.poster)){var e=this.poster.split(",");this.elements.poster.style.backgroundImage=e.map(function(e){return"url('"+e+"')"}).join(",")}},checkPlaying:function(){Jr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Jr.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),Jr.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),Jr.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Jr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(Jr.toggleClass(this.elements.container,this.config.classNames.loading,!1),Jr.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){Jr.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(Jr.is.element(this.elements.inputs.volume)&&ts.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Jr.is.element(this.elements.buttons.mute)&&Jr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Jr.is.element(e)&&(e.value=t,is.updateRangeFill.call(this,e))},setProgress:function(e,t){var n=Jr.is.number(t)?t:0,i=Jr.is.element(e)?e:this.elements.display.buffer;if(Jr.is.element(i)){i.value=n;var r=i.getElementsByTagName("span")[0];Jr.is.element(r)&&(r.childNodes[0].nodeValue=n)}},updateProgress:function(e){if(this.supported.ui&&Jr.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=Jr.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&ts.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":ts.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Jr.is.element(e)&&Jr.is.number(t)){var i=Jr.getHours(this.duration)>0;e.textContent=Jr.formatTime(t,i,n)}},timeUpdate:function(e){var t=!Jr.is.element(this.elements.display.duration)&&this.config.invertTime;ts.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||ts.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=Jr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&ts.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&ts.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),is.updateSeekTooltip.call(this)}}},ns=Jr.getBrowser(),is={updateRangeFill:function(e){var t=Jr.is.event(e)?e.target:e;Jr.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),ns.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||ns.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=Jr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Jr.getElements.call(this,this.config.selectors.buttons.play),pause:Jr.getElement.call(this,this.config.selectors.buttons.pause),restart:Jr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Jr.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:Jr.getElement.call(this,this.config.selectors.buttons.fastForward),mute:Jr.getElement.call(this,this.config.selectors.buttons.mute),pip:Jr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Jr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Jr.getElement.call(this,this.config.selectors.buttons.settings),captions:Jr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Jr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Jr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Jr.getElement.call(this,this.config.selectors.inputs.seek),volume:Jr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Jr.getElement.call(this,this.config.selectors.display.buffer),currentTime:Jr.getElement.call(this,this.config.selectors.display.currentTime),duration:Jr.getElement.call(this,this.config.selectors.display.duration)},Jr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=is.getIconUrl.call(this),i=(n.cors?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Jr.setAttributes(r,Jr.extend(t,{role:"presentation",focusable:"false"}));var s=document.createElementNS("http://www.w3.org/2000/svg","use"),o=i+"-"+e;return"href"in s?s.setAttributeNS("http://www.w3.org/1999/xlink","href",o):s.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o),r.appendChild(s),r},createLabel:function(e,t){var n=Zr(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Jr.createElement("span",i,n)},createBadge:function(e){if(Jr.is.empty(e))return null;var t=Jr.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Jr.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Jr.createElement("button"),i=Object.assign({},t),r=Jr.toCamelCase(e),s=!1,o=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":s=!0,o="play",l="pause",a="play",c="pause";break;case"mute":s=!0,o="mute",l="unmute",a="volume",c="muted";break;case"captions":s=!0,o="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":s=!0,o="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",o="play",a="play";break;default:o=r,a=e}return s?(n.appendChild(is.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(is.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(is.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(is.createLabel.call(this,o,{class:"label--not-pressed"})),i["aria-pressed"]=!1):(n.appendChild(is.createIcon.call(this,a)),n.appendChild(is.createLabel.call(this,o))),Jr.extend(i,Jr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Jr.setAttributes(n,i),"play"===r?(Jr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Jr.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},Zr(e,this.config)),i=Jr.createElement("input",Jr.extend(Jr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,is.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Jr.createElement("progress",Jr.extend(Jr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(Jr.createElement("span",null,"0"));var i="";switch(e){case"played":i=Zr("played",this.config);break;case"buffer":i=Zr("buffered",this.config)}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Jr.getAttributesFromSelector(this.config.selectors.display[e]),n=Jr.createElement("div",Jr.extend(t,{class:"plyr__time "+t.class,"aria-label":Zr(e,this.config)}),"00:00");return this.elements.display[e]=n,n},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,s=arguments.length>5&&void 0!==arguments[5]&&arguments[5],o=Jr.createElement("li"),a=Jr.createElement("label",{class:this.config.classNames.control}),l=Jr.createElement("input",Jr.extend(Jr.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:s,class:"plyr__sr-only"})),c=Jr.createElement("span",{hidden:""});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),Jr.is.element(r)&&a.appendChild(r),o.appendChild(a),t.appendChild(o)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&Jr.is.element(this.elements.inputs.seek)&&Jr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.inputs.seek.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",s=function(e){Jr.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)s(!1);else{if(Jr.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Jr.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),ts.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",Jr.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&s("mouseenter"===e.type)}}},toggleTab:function(e,t){Jr.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(Jr.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");Jr.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!Jr.is.empty(this.options.quality)&&this.options.quality.length>1;if(is.toggleTab.call(this,"quality",i),is.checkMenu.call(this),i){Jr.emptyElement(n);this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){var i=is.getLabel.call(t,"quality",e);is.createMenuItem.call(t,e,n,"quality",i,function(e){var n="";switch(e){case 2160:n="4K";break;case 1440:case 1080:case 720:n="HD";break;case 576:n="SD"}return n.length?is.createBadge.call(t,n):null}(e))}),is.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?Zr("normal",this.config):t+"&times;";case"quality":return Jr.is.number(t)?t+"p":Jr.toTitleCase(t);case"captions":return rs.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,s=t;switch(e){case"captions":r=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(r=Jr.is.empty(n)?this[e]:n,Jr.is.empty(r)&&(r=this.config[e].default),!Jr.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if(Jr.is.element(s)||(s=i&&i.querySelector("ul")),Jr.is.element(s)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=is.getLabel.call(this,e,r);var o=s&&s.querySelector('input[value="'+r+'"]');Jr.is.element(o)&&(o.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=rs.getTracks.call(this).length;if(is.toggleTab.call(this,"captions",n),Jr.emptyElement(t),is.checkMenu.call(this),n){var i=rs.getTracks.call(this).map(function(t){return{language:Jr.is.empty(t.language)?"enabled":t.language,label:rs.getLabel.call(e,t)}});i.unshift({language:"",label:Zr("disabled",this.config)}),i.forEach(function(n){is.createMenuItem.call(e,n.language,t,"language",n.label,"enabled"!==n.language?is.createBadge.call(e,n.language.toUpperCase()):null,n.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=i.map(function(e){return e.language}),is.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&Jr.is.element(this.elements.settings.panes.speed)){Jr.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!Jr.is.empty(this.options.speed)&&this.options.speed.length>1;if(is.toggleTab.call(this,"speed",n),is.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector("ul");Jr.emptyElement(i),this.options.speed.forEach(function(e){var n=is.getLabel.call(t,"speed",e);is.createMenuItem.call(t,e,i,"speed",n)}),is.updateSetting.call(this,"speed",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!Jr.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});Jr.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(Jr.is.element(t)&&Jr.is.element(n)){var i=Jr.is.boolean(e)?e:Jr.is.element(t)&&t.hasAttribute("hidden");if(Jr.is.event(e)){var r=Jr.is.element(t)&&t.contains(e.target),s=e.target===this.elements.buttons.settings;if(r||!r&&!s&&i)return;s&&e.stopPropagation()}Jr.is.element(n)&&n.setAttribute("aria-expanded",i),Jr.is.element(t)&&(Jr.toggleHidden(t,!i),Jr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Jr.removeElement(t),{width:n,height:i}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.elements.settings.menu,n=document.getElementById(e);if(Jr.is.element(n)&&"tabpanel"===n.getAttribute("role")){var i=t.querySelector('[role="tabpanel"]:not([hidden])'),r=i.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+i.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),$r.transitions&&!$r.reducedMotion){r.style.width=i.scrollWidth+"px",r.style.height=i.scrollHeight+"px";var s=is.getTabSize.call(this,n);Jr.on(r,Jr.transitionEndEvent,function e(t){t.target===r&&["width","height"].includes(t.propertyName)&&(r.style.width="",r.style.height="",Jr.off(r,Jr.transitionEndEvent,e))}),r.style.width=s.width+"px",r.style.height=s.height+"px"}Jr.toggleHidden(i,!0),i.setAttribute("tabindex",-1),Jr.toggleHidden(n,!1);var o=Jr.getElements.call(this,'[aria-controls="'+e+'"]');Array.from(o).forEach(function(e){e.setAttribute("aria-expanded",!0)}),n.removeAttribute("tabindex"),n.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Jr.is.empty(this.config.controls))return null;var n=Jr.createElement("div",Jr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(is.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(is.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(is.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(is.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Jr.createElement("div",Jr.getAttributesFromSelector(this.config.selectors.progress)),r=is.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(is.createProgress.call(this,"buffer")),this.config.tooltips.seek){var s=Jr.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(s),this.elements.display.seekTooltip=s}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(is.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(is.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(is.createButton.call(this,"mute")),this.config.controls.includes("volume")){var o=Jr.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=is.createRange.call(this,"volume",Jr.extend(a,{id:"plyr-volume-"+e.id}));o.appendChild(l.label),o.appendChild(l.input),this.elements.volume=o,n.appendChild(o)}if(this.config.controls.includes("captions")&&n.appendChild(is.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Jr.is.empty(this.config.settings)){var c=Jr.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(is.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Jr.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),d=Jr.createElement("div"),f=Jr.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=Jr.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Jr.createElement("li",{role:"tab",hidden:""}),r=Jr.createElement("button",Jr.extend(Jr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),Zr(n,t.config)),s=Jr.createElement("span",{class:t.config.classNames.menu.value});s.innerHTML=e[n],r.appendChild(s),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),f.appendChild(h),d.appendChild(f),this.config.settings.forEach(function(n){var i=Jr.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,hidden:"","aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1}),r=Jr.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},Zr(n,t.config));i.appendChild(r);var s=Jr.createElement("ul");i.appendChild(s),d.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(d),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&$r.pip&&n.appendChild(is.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&$r.airplay&&n.appendChild(is.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(is.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(is.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&is.setQualityMenu.call(this,Xr.getQualityOptions.call(this)),is.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=is.getIconUrl.call(this);t.cors&&Jr.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;Jr.is.string(this.config.controls)||Jr.is.element(this.config.controls)?n=this.config.controls:Jr.is.function(this.config.controls)?n=this.config.controls.call(this,i):(n=is.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:rs.getLabel.call(this)}),r=!1);var s=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Qr(e,2),i=n[0],r=n[1];t=Jr.replaceAll(t,"{"+i+"}",r)}),t};r&&(Jr.is.string(this.config.controls)?n=s(n):Jr.is.element(n)&&(n.innerHTML=s(n.innerHTML)));var o=void 0;if(Jr.is.string(this.config.selectors.controls.container)&&(o=document.querySelector(this.config.selectors.controls.container)),Jr.is.element(o)||(o=this.elements.container),Jr.is.element(n)?o.appendChild(n):n&&o.insertAdjacentHTML("beforeend",n),Jr.is.element(this.elements.controls)||is.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Jr.repaint(o),this.config.tooltips.controls){var a=Jr.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(a).forEach(function(t){Jr.toggleClass(t,e.config.classNames.hidden,!1),Jr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},rs={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(Jr.is.empty(e)||(this.captions.language=e),Jr.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!Jr.is.boolean(this.captions.active)){var t=this.storage.get("captions");Jr.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!$r.textTracks)Jr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&is.setCaptionsMenu.call(this);else{Jr.is.element(this.elements.captions)||(this.elements.captions=Jr.createElement("div",Jr.getAttributesFromSelector(this.config.selectors.captions)),Jr.insertAfter(this.elements.captions,this.elements.wrapper)),Jr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Jr.is.empty(rs.getTracks.call(this)));var n=rs.getTracks.call(this);if(!Jr.is.empty(n)){if(Jr.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=Jr.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Jr.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Jr.removeElement(e)})})}rs.setLanguage.call(this),rs.show.call(this),Jr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&is.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){rs.getTracks.call(this).forEach(function(t){Jr.on(t,"cuechange",function(t){return rs.setCue.call(e,t)}),t.mode="hidden"});var t=rs.getCurrentTrack.call(this);Jr.is.track(t)&&Array.from(t.activeCues||[]).length&&rs.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return Jr.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=rs.getTracks.call(this);if(!t.length)return null;var n=t.find(function(t){return t.language.toLowerCase()===e.language});(n||(n=Jr.getElement.call(this,"track[default]")),n)||(n=Qr(t,1)[0]);return n},getLabel:function(e){var t=e;return!Jr.is.track(t)&&$r.textTracks&&this.captions.active&&(t=rs.getCurrentTrack.call(this)),Jr.is.track(t)?Jr.is.empty(t.label)?Jr.is.empty(t.language)?Zr("enabled",this.config):e.language.toUpperCase():t.label:Zr("disabled",this.config)},setCue:function(e){var t=Jr.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===rs.getCurrentTrack.call(this)&&(Jr.is.cue(i)?rs.setText.call(this,i.getCueAsHTML()):rs.setText.call(this,null),Jr.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(Jr.is.element(this.elements.captions)){var t=Jr.createElement("span");Jr.emptyElement(this.elements.captions);var n=Jr.is.nullOrUndefined(e)?"":e;Jr.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");Jr.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(Jr.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),Jr.toggleState(this.elements.buttons.captions,!0))}},ss=function(){},os=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Gr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Yr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):ss}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):ss}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):ss}}]),e}(),as={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.3.0/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/v2/video/{0}.json"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet",poster:"https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",poster:"plyr__poster",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},ls=Jr.getBrowser();function cs(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Jr.is.element(e)&&Jr.toggleState(e,this.active),Jr.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),ls.isIos||Jr.trapFocus.call(this.player,this.target,this.active)}}function us(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Jr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),cs.call(this)}var ds=function(){function e(t){var n=this;Gr(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},Jr.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){cs.call(n)}),Jr.on(this.player.elements.container,"dblclick",function(e){Jr.is.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Yr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Jr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(ls.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Jr.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():us.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(ls.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!Jr.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else us.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:Jr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return ls.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(Jr.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!Jr.is.function(document[t+"ExitFullscreen"])&&!Jr.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),fs=Jr.getBrowser(),hs=function(){function e(t){Gr(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Yr(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&Jr.is.number(n)){if(i){var s=Jr.getFocusElement();if(Jr.is.element(s)&&Jr.matches(s,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){is.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,Jr.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),Jr.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&Jr.toggleListener(window,"keydown keyup",this.handleKey,e,!1),Jr.toggleListener(document.body,"click",this.toggleMenu,e),Jr.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&Jr.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),Jr.on(this.player.elements.container,"focusout",function(t){Jr.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),Jr.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Jr.toggleClass(Jr.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&Jr.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(Jr.on(this.player.media,"timeupdate seeking",function(t){return ts.timeUpdate.call(e.player,t)}),Jr.on(this.player.media,"durationchange loadeddata loadedmetadata",function(t){return ts.durationUpdate.call(e.player,t)}),Jr.on(this.player.media,"loadeddata",function(){Jr.toggleHidden(e.player.elements.volume,!e.player.hasAudio),Jr.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),Jr.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),Jr.on(this.player.media,"progress playing",function(t){return ts.updateProgress.call(e.player,t)}),Jr.on(this.player.media,"volumechange",function(t){return ts.updateVolume.call(e.player,t)}),Jr.on(this.player.media,"playing play pause ended emptied timeupdate",function(t){return ts.checkPlaying.call(e.player,t)}),Jr.on(this.player.media,"waiting canplay seeked playing",function(t){return ts.checkLoading.call(e.player,t)}),Jr.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=Jr.getElement.call(this.player,"."+this.player.config.classNames.video);if(!Jr.is.element(t))return;Jr.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&Jr.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),Jr.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),Jr.on(this.player.media,"ratechange",function(){is.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),Jr.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),Jr.on(this.player.media,"qualitychange",function(t){is.updateSetting.call(e.player,"quality",null,t.detail.quality)}),Jr.on(this.player.media,"languagechange",function(){is.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),Jr.on(this.player.media,"captionsenabled captionsdisabled",function(){is.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),Jr.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.player.media.error),Jr.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=fs.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],s=!0;Jr.is.function(r)&&(s=r.call(e.player,t)),s&&Jr.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,s){var o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=e.player.config.listeners[s],l=Jr.is.function(a);Jr.on(t,i,function(e){return n(e,r,s)},o&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){is.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation();var i=function(){var t="plyr-settings-"+e.player.id+"-home";is.showTab.call(e.player,t)};if(Jr.matches(t.target,e.player.config.selectors.inputs.language))n(t,function(){e.player.language=t.target.value,i()},"language");else if(Jr.matches(t.target,e.player.config.selectors.inputs.quality))n(t,function(){e.player.quality=t.target.value,i()},"quality");else if(Jr.matches(t.target,e.player.config.selectors.inputs.speed))n(t,function(){e.player.speed=parseFloat(t.target.value),i()},"speed");else{var r=t.target;is.showTab.call(e.player,r.getAttribute("aria-controls"))}}),i(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!Jr.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,ts.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),fs.isWebkit&&i(Jr.getElements.call(this.player,'input[type="range"]'),"input",function(t){is.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return is.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),ps={setup:function(){var e=this;Jr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),ps.setAspectRatio.call(this),Jr.is.object(window.Vimeo)?ps.ready.call(this):Jr.loadScript(this.config.urls.vimeo.sdk).then(function(){ps.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=Jr.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-"+i+"%)"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},i=Jr.buildUrlParams(n),r=t.media.getAttribute("src");Jr.is.empty(r)&&(r=t.media.getAttribute(t.config.attributes.embed.id));var s=Jr.parseVimeoId(r),o=Jr.createElement("iframe"),a=Jr.format(t.config.urls.vimeo.iframe,s,i);o.setAttribute("src",a),o.setAttribute("allowfullscreen",""),o.setAttribute("allowtransparency",""),o.setAttribute("allow","autoplay");var l=Jr.createElement("div");l.appendChild(o),t.media=Jr.replaceElement(l,t.media),Jr.fetch(Jr.format(t.config.urls.vimeo.api,s),"json").then(function(e){if(!Jr.is.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname=n.pathname.split("_")[0]+".jpg",t.media.setAttribute("poster",n.href),ts.setPoster.call(t)}}),t.embed=new window.Vimeo.Player(o),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,Jr.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e).catch(function(){}),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Jr.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&is.setSpeedMenu.call(t,[])})}});var d=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return d},set:function(e){t.embed.setVolume(e).then(function(){d=e,Jr.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return f},set:function(e){var n=!!Jr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){f=n,Jr.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=Jr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Jr.getAspectRatio(t[0],t[1]);ps.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,ts.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Jr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Jr.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,rs.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=Jr.stripHTML(e.cues[0].text)),rs.setText.call(t,n)}),t.embed.on("loaded",function(){Jr.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&Jr.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,Jr.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,Jr.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Jr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Jr.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Jr.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,Jr.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,Jr.dispatchEvent.call(t,t.media,"seeked"),Jr.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,Jr.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Jr.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return ts.build.call(t)},0)}};function gs(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}var ms={setup:function(){var e=this;Jr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),ms.setAspectRatio.call(this),Jr.is.object(window.YT)&&Jr.is.function(window.YT.Player)?ms.ready.call(this):(Jr.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){ms.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Jr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Jr.is.empty(n))return this.config.title=n,void ts.setTitle.call(this)}var i=this.config.keys.google;if(Jr.is.string(i)&&!Jr.is.empty(i)){var r=Jr.format(this.config.urls.youtube.api,e,i);Jr.fetch(r).then(function(e){Jr.is.object(e)&&(t.config.title=e.items[0].snippet.title,ts.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Jr.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Jr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Jr.parseYouTubeId(n),r=Jr.generateId(e.provider),s=Jr.createElement("div",{id:r});e.media=Jr.replaceElement(s,e.media),e.media.setAttribute("poster",Jr.format(e.config.urls.youtube.poster,i)),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Jr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Jr.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){Jr.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Jr.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;ms.getTitle.call(e,i),e.media.play=function(){n.playVideo()},e.media.pause=function(){n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){var i=e.media.paused;e.media.seeking=!0,Jr.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t),i&&e.pause()}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return gs(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(gs(i)),Jr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Jr.dispatchEvent.call(e,e.media,"volumechange")}});var s=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return s},set:function(t){var i=Jr.is.boolean(t)?t:s;s=i,n[i?"mute":"unMute"](),Jr.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Jr.dispatchEvent.call(e,e.media,"timeupdate"),Jr.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Jr.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),Jr.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return ts.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:Jr.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),Jr.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):Jr.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&Jr.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&Jr.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,Jr.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){Jr.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),Jr.dispatchEvent.call(e,e.media,"durationchange")),is.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),Jr.is.empty(n)?n:Jr.dedupe(n.map(function(e){return gs(e)}))));break;case 2:e.media.paused=!0,Jr.dispatchEvent.call(e,e.media,"pause")}Jr.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},ys={setup:function(){if(this.media)if(Jr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Jr.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Jr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.isVideo&&(this.elements.wrapper=Jr.createElement("div",{class:this.config.classNames.video}),Jr.wrap(this.media,this.elements.wrapper),this.elements.poster=Jr.createElement("span",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case"youtube":ms.setup.call(this);break;case"vimeo":ps.setup.call(this)}else this.isHTML5&&Xr.extend.call(this);else this.debug.warn("No media element found!")}},vs=function(){function e(t){var n=this;Gr(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&Jr.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return Yr(e,[{key:"load",value:function(){var e=this;this.enabled&&(Jr.is.object(window.google)&&Jr.is.object(window.google.ima)?this.ready():Jr.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=Jr.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=Jr.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=Zr("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),Jr.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(Jr.is.element(n)){var i=100/t.player.duration*e,r=Jr.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();Jr.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;Jr.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var s=this.events[e];Jr.is.array(s)&&s.forEach(function(e){Jr.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return Jr.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Jr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+Jr.buildUrlParams(e)}}]),e}(),bs={insertElements:function(e,t){var n=this;Jr.is.string(t)?Jr.insertElement(e,this.media,{src:t}):Jr.is.array(t)&&t.forEach(function(t){Jr.insertElement(e,n.media,t)})},change:function(e){var t=this;Jr.is.object(e)&&"sources"in e&&e.sources.length?(Xr.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],Jr.removeElement(t.media),t.media=null,Jr.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Jr.is.empty(e.sources[0].provider)?Wr.html5:e.sources[0].provider,t.supported=$r.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=Jr.createElement("video");break;case"html5:audio":t.media=Jr.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Jr.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Jr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),ts.addStyleHook.call(t),t.isHTML5&&bs.insertElements.call(t,"source",e.sources),t.config.title=e.title,ys.setup.call(t),t.isHTML5&&("tracks"in e&&bs.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&ts.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},ws=function(){function e(t){Gr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Yr(e,[{key:"get",value:function(t){if(!e.supported)return null;var n=window.localStorage.getItem(this.key);if(Jr.is.empty(n))return null;var i=JSON.parse(n);return Jr.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Jr.is.object(t)){var n=this.get();Jr.is.empty(n)&&(n={}),Jr.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}();return function(){function e(t,n){var i=this;if(Gr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=$r.touch,this.media=t,Jr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Jr.is.nodeList(this.media)||Jr.is.array(this.media))&&(this.media=this.media[0]),this.config=Jr.extend({},as,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new os(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",$r),!Jr.is.nullOrUndefined(this.media)&&Jr.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if($r.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var s=this.media.tagName.toLowerCase(),o=null,a=null,l=null;switch(s){case"div":if(o=this.media.querySelector("iframe"),Jr.is.element(o)){if(a=o.getAttribute("src"),this.provider=Jr.getProviderByUrl(a),this.elements.container=this.media,this.media=o,this.elements.container.className="",l=Jr.getUrlParams(a),!Jr.is.empty(l)){var c=["1","true"];c.includes(l.autoplay)&&(this.config.autoplay=!0),c.includes(l.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=c.includes(l.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Jr.is.empty(this.provider)||!Object.keys(Wr).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=zr.video;break;case"video":case"audio":this.type=s,this.provider=Wr.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=$r.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new hs(this),this.storage=new ws(this),this.media.plyr=this,Jr.is.element(this.elements.container)||(this.elements.container=Jr.createElement("div"),Jr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),ts.addStyleHook.call(this),ys.setup.call(this),this.config.debug&&Jr.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&ts.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new ds(this),this.ads=new vs(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return Yr(e,[{key:"play",value:function(){return Jr.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&Jr.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(Jr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():Jr.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Jr.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Jr.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Jr.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Jr.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=Jr.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,Jr.toggleState(this.elements.buttons.captions,this.captions.active),Jr.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),Jr.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){$r.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(Jr.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(!Jr.is.boolean(e))if(Jr.is.event(e)){r="enterfullscreen"===e.type;i=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(n=2e3),this.touch||"focusin"!==e.type||(n=3e3,Jr.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else i=Jr.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),i||this.paused||this.loading){if(Jr.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&Jr.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=setTimeout(function(){Jr.is.element(t.elements.controls)&&((!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&(Jr.hasClass(t.elements.container,t.config.classNames.hideControls)||Jr.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),Jr.toggleClass(t.elements.container,t.config.classNames.hideControls,t.config.hideControls)&&(Jr.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!Jr.is.empty(t.config.settings)&&is.toggleMenu.call(t,!1))))},n))}}},{key:"on",value:function(e,t){Jr.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Jr.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Jr.removeElement(t.elements.buttons.play),Jr.removeElement(t.elements.captions),Jr.removeElement(t.elements.controls),Jr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Jr.is.function(e)&&e()):(t.listeners.clear(),Jr.replaceElement(t.elements.original,t.elements.container),Jr.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Jr.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),ts.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&Jr.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return $r.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===Wr.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===Wr.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===Wr.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===zr.video)}},{key:"isAudio",get:function(){return Boolean(this.type===zr.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;Jr.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return Jr.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;Jr.is.string(t)&&(t=Number(t)),Jr.is.number(t)||(t=this.storage.get("volume")),Jr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!Jr.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;Jr.is.boolean(t)||(t=this.storage.get("muted")),Jr.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;Jr.is.number(e)&&(t=e),Jr.is.number(t)||(t=this.storage.get("speed")),Jr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(Jr.is.empty(e)||(t=Number(e)),Jr.is.number(t)&&0!==t||(t=this.storage.get("quality")),Jr.is.number(t)||(t=this.config.quality.selected),Jr.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=Jr.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+n+" instead"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Jr.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){bs.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isVideo?Jr.is.string(e)&&(this.media.setAttribute("poster",e),ts.setPoster.call(this)):this.debug.warn("Poster can only be set for video")},get:function(){return this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=Jr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(Jr.is.string(e))if(Jr.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,rs.setText.call(this,null),rs.setLanguage.call(this),Jr.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if($r.pip){var i=Jr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return $r.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return $r.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Jr.loadSprite(e,t)}}]),e}()});
//# sourceMappingURL=plyr.polyfilled.min.js.map
diff --git a/dist/plyr.polyfilled.min.js.map b/dist/plyr.polyfilled.min.js.map
index 128f4f71..0e6dfb31 100644
--- a/dist/plyr.polyfilled.min.js.map
+++ b/dist/plyr.polyfilled.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","types.js","support.js","defaults.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","f","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","f$1","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","LIBRARY","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesConstructor","original","_arraySpeciesCreate","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","f$2","gOPD","getOwnPropertyDescriptor","f$3","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_inheritIfRequired","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","f$4","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","_microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","resolve","promise","then","toggle","node","createTextNode","observe","characterData","task","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","f$5","reject","$$resolve","$$reject","_perform","_promiseResolve","x","promiseCapability","newPromiseCapability","microtask","$Promise","empty","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","promiseResolve","all","remaining","$index","alreadyCalled","race","f$6","_wksDefine","$Symbol","charAt","wksExt","_enumKeys","symbols","windowNames","f$7","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","_stringAt","TO_STRING","pos","charCodeAt","$at","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","_flags","ignoreCase","multiline","unicode","sticky","flags","RegExp","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","providers","types","defaults","language","userLanguage","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","doc","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","href","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","utils","input","instanceof","Plyr","Boolean","nullOrUndefined","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","parse","responseText","response","statusText","send","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","setItem","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","hidden","boolean","hasAttribute","removeAttribute","contains","classList","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","currentTime","duration","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","trap","keyCode","getFocusElement","shiftKey","focus","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","plyr","dispatchEvent","toggleState","pressed","getAttribute","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len","_key","shift","defineProperty$1","extend","toConsumableArray","item","curr","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","toggleClass","fallback","Fullscreen","property","_this","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","i18n","seekTime","title","stored","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","blob","createObjectURL","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","_this2","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","setTitle","isEmbed","stopped","paused","toggleControls","loading","timers","failed","networkState","_this3","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","forceHours","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","suffix","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","touch","pageX","parseFloat","setting","tabs","panes","toggleTab","checkMenu","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","lang","default","unshift","_this4","tab","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","findElements","repaint","labels","_this6","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","base","buildUrlParams","mapQualityUnit","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","levels","getAvailableQualityLevels","level","Vimeo","padding","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","insertElement","attribute","cancelRequests","crossorigin","poster","addStyleHook","insertElements","jQuery","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","unload","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline"],"mappings":"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CExD,OAAOC,eAAeuD,KAAM,oBAC1BtD,IAAK,WACH,OAAO,KAGX,MAAML,GACN2D,KAAKw/B,kBAAmB,IAGrBE,GAGTJ,GAAYv/B,UAAYzE,OAAO2kC,MAAMlgC,UACrCzE,OAAOgkC,YAAcA,GCtCvB,IC4IcY,GD5IDC,UACF,gBACE,gBACF,SAGEC,UACF,cACA,SERLC,aAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,gDAGG,wDAIC,aAEL,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,YACG3Z,UAAU4Z,UAAY5Z,UAAU6Z,cAAchhC,MAAM,KAAK,yBAK3D,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,oBACM,+BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAG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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.4/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.4\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","support.js","../../node_modules/loadjs/dist/loadjs.umd.js","types.js","utils.js","html5.js","i18n.js","ui.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","storage.js","plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","resolve","reject","promise","$$resolve","$$reject","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","doc","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","href","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","providers","types","utils","input","instanceof","Plyr","Boolean","nullOrUndefined","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","parse","responseText","response","statusText","send","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","setItem","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","hidden","boolean","hasAttribute","removeAttribute","contains","classList","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","focused","activeElement","focusable","getElements","trap","keyCode","getFocusElement","shiftKey","focus","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","plyr","dispatchEvent","toggleState","pressed","getAttribute","_len","_key","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len2","_key2","shift","defineProperty$1","extend","toConsumableArray","item","curr","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","html5","getSources","sizes","dedupe","player","mime","currentTime","playing","load","play","config","blankVideo","debug","i18n","seekTime","title","toggleClass","selectors","classNames","uiSupported","listeners","warn","toggleNativeControls","controls","inject","setup","volume","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","pip","airplay","isIos","isTouch","touch","_this","setTitle","setPoster","label","buttons","button","isEmbed","getElement","poster","posters","backgroundImage","paused","stopped","toggleControls","loading","timers","_this2","failed","networkState","_this3","inputs","setRange","mute","updateRangeFill","progress","getElementsByTagName","nodeValue","getPercentage","duration","seek","setProgress","buffered","forceHours","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","isWebkit","setProperty","cors","URL","iconUrl","location","host","isIE","svg4everybody","pause","restart","rewind","fastForward","settings","captions","fullscreen","seekTooltip","tooltip","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","pageX","hasClass","parseFloat","setting","tabs","panes","toggleTab","checkMenu","emptyElement","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","pane","active","lang","language","default","getTracks","tracks","track","unshift","isVimeo","_this4","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","update","findElements","repaint","labels","_this6","stored","isYouTube","textTracks","setCaptionsMenu","insertAfter","enabled","hostname","protocol","blob","createObjectURL","setLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","defaults","userLanguage","onChange","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","transform","autoplay","buildUrlParams","parseVimeoId","replaceElement","thumbnail_large","pathname","Player","disableTextTrack","setCurrentTime","selected","setPlaybackRate","setVolume","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","seconds","build","mapQualityUnit","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","message","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","seekTo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","levels","getAvailableQualityLevels","level","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","base","insertElement","attribute","cancelRequests","crossorigin","addStyleHook","insertElements","Storage","json","removeItem","jQuery","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","unload","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline"],"mappings":"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gDACG,6CACH,wDAGA,yCACA,+GACG,gHAGH,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,2BACC,mBACH,oBACI,qBACH,qBACI,oBACD,uBACD,uBACC,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,KC/XfysC,GAAU/J,GAAMgK,aAEtB,SAASuO,QACAx6C,KAAKm5C,aAKJtJ,EAAS7vC,KAAKqtC,OAAOvI,SAAS8K,QAAQoD,WACxC/Q,GAAMplC,GAAGmoC,QAAQ6K,OACXrH,YAAYqH,EAAQ7vC,KAAKg2C,WAI7BzN,cAAcvoC,KAAKyB,OAAQzB,KAAKg2C,OAAS,kBAAoB,kBAAkB,GAGhFhK,GAAQqD,UACHoL,UAAUj9C,KAAKwC,KAAKqtC,OAAQrtC,KAAKyB,OAAQzB,KAAKg2C,SAI5D,SAAS0E,SAAezzB,EAAgBxmB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAEhCwmB,OACK0zB,kBACEr/C,OAAOs/C,SAAW,IAClBt/C,OAAOu/C,SAAW,UAGlBC,SAAS96C,KAAK26C,eAAe7wB,EAAG9pB,KAAK26C,eAAe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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => utils.is.string(args[i]) ? args[i] : '');\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Set the poster image\n ui.setPoster.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Set the poster image\n setPoster() {\n if (!utils.is.element(this.elements.poster) || utils.is.empty(this.poster)) {\n return;\n }\n\n // Set the inline style\n const posters = this.poster.split(',');\n this.elements.poster.style.backgroundImage = posters.map(p => `url('${p}')`).join(',');\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const forceHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, forceHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const attributes = utils.getAttributesFromSelector(this.config.selectors.display[type]);\n\n const container = utils.createElement('div', utils.extend(attributes, {\n class: `plyr__time ${attributes.class}`,\n 'aria-label': i18n.get(type, this.config),\n }), '00:00');\n\n // Reference for updates\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n utils.toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n case 'quality':\n if (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.hasAttribute('hidden');\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n utils.toggleHidden(form, !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n utils.toggleHidden(current, true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n utils.toggleHidden(pane, false);\n\n const tabs = utils.getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n\n Object.entries(props).forEach(([\n key,\n value,\n ]) => {\n result = utils.replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (utils.is.string(this.config.controls)) {\n container = replace(container);\n } else if (utils.is.element(container)) {\n container.innerHTML = replace(container.innerHTML);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.3.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/v2/video/{0}.json',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n poster: 'https://img.youtube.com/vi/{0}/maxresdefault.jpg,https://img.youtube.com/vi/{0}/hqdefault.jpg',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n poster: 'plyr__poster',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (utils.is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadeddata loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n showHomeTab();\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set attribute\n player.media.setAttribute('poster', url.href);\n\n // Update\n ui.setPoster.call(player);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Set poster image\n player.media.setAttribute('poster', utils.format(player.config.urls.youtube.poster, videoId));\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport utils from './utils';\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n\n // Faux poster container\n this.elements.poster = utils.createElement('span', {\n class: this.config.classNames.poster,\n });\n\n this.elements.wrapper.appendChild(this.elements.poster);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport i18n from '../i18n';\nimport utils from '../utils';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.sdk)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n // Mute based on current state\n request.setAdWillPlayMuted(!this.player.muted);\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.3.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport Console from './console';\nimport controls from './controls';\nimport defaults from './defaults';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport { providers, types } from './types';\nimport ui from './ui';\nimport utils from './utils';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n const clone = this.media.cloneNode(true);\n clone.autoplay = false;\n this.elements.original = clone;\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended);\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get stopped state\n */\n get stopped() {\n return Boolean(this.paused && this.currentTime === 0);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isVideo) {\n this.debug.warn('Poster can only be set for video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n ui.setPoster.call(this);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Set hideControls class\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, this.config.hideControls);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file