From dbd2136bac1ba3f80c438284628a018f880dc033 Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Thu, 7 Feb 2019 23:45:19 +1100 Subject: [PATCH] Fix for cue points missing --- demo/dist/demo.js | 133 ++++++++++------------ demo/dist/demo.min.js | 2 +- demo/dist/demo.min.js.map | 2 +- dist/plyr.js | 133 ++++++++++------------ dist/plyr.min.js | 2 +- dist/plyr.min.js.map | 2 +- dist/plyr.min.mjs | 2 +- dist/plyr.min.mjs.map | 2 +- dist/plyr.mjs | 133 ++++++++++------------ dist/plyr.polyfilled.js | 182 +++++++++++++++---------------- dist/plyr.polyfilled.min.js | 2 +- dist/plyr.polyfilled.min.js.map | 2 +- dist/plyr.polyfilled.min.mjs | 2 +- dist/plyr.polyfilled.min.mjs.map | 2 +- dist/plyr.polyfilled.mjs | 182 +++++++++++++++---------------- package.json | 8 +- src/js/plugins/ads.js | 37 ++++--- yarn.lock | 37 +++++-- 18 files changed, 408 insertions(+), 457 deletions(-) diff --git a/demo/dist/demo.js b/demo/dist/demo.js index 52a2947a..7c8d1bb2 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -4796,28 +4796,6 @@ typeof navigator === "object" && (function () { ui: ui }; }, - // Detect support for autoplay - - /* autoplay: (() => { - const video = document.createElement('video'); - video.src = 'https://cdn.plyr.io/static/blank.mp4'; - const promise = video.play(); - if (is.promise(promise)) { - console.warn('PROMISE', promise); - promise - .then(() => { - console.warn('supported'); - return true; - }) - .catch(() => { - console.warn('not supported'); - return false; - }); - } else { - console.warn('supported - no promise'); - return true; - } - })(), */ // Picture-in-picture support // Safari & Chrome only currently pip: function () { @@ -10288,25 +10266,7 @@ typeof navigator === "object" && (function () { this.manager = event.getAdsManager(this.player, settings); // Get the cue points for any mid-rolls by filtering out the pre- and post-roll - this.cuePoints = this.manager.getCuePoints(); // Add advertisement cue's within the time line if available - - if (!is.empty(this.cuePoints)) { - this.cuePoints.forEach(function (cuePoint) { - if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < _this6.player.duration) { - var seekElement = _this6.player.elements.progress; - - if (is.element(seekElement)) { - var cuePercentage = 100 / _this6.player.duration * cuePoint; - var cue = createElement('span', { - class: _this6.player.config.classNames.cues - }); - cue.style.left = "".concat(cuePercentage.toString(), "%"); - seekElement.appendChild(cue); - } - } - }); - } // Set volume to match player - + this.cuePoints = this.manager.getCuePoints(); // Set volume to match player this.manager.setVolume(this.player.volume); // Add listeners to the required events // Advertisement error events @@ -10323,6 +10283,29 @@ typeof navigator === "object" && (function () { this.trigger('loaded'); } + }, { + key: "addCuePoints", + value: function addCuePoints() { + var _this7 = this; + + // Add advertisement cue's within the time line if available + if (!is.empty(this.cuePoints)) { + this.cuePoints.forEach(function (cuePoint) { + if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < _this7.player.duration) { + var seekElement = _this7.player.elements.progress; + + if (is.element(seekElement)) { + var cuePercentage = 100 / _this7.player.duration * cuePoint; + var cue = createElement('span', { + class: _this7.player.config.classNames.cues + }); + cue.style.left = "".concat(cuePercentage.toString(), "%"); + seekElement.appendChild(cue); + } + } + }); + } + } /** * This is where all the event handling takes place. Retrieve the ad from the event. Some * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated @@ -10333,7 +10316,7 @@ typeof navigator === "object" && (function () { }, { key: "onAdEvent", value: function onAdEvent(event) { - var _this7 = this; + var _this8 = this; var container = this.player.elements.container; // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED) // don't have ad object associated @@ -10343,7 +10326,7 @@ typeof navigator === "object" && (function () { var dispatchEvent = function dispatchEvent(type) { var event = "ads".concat(type.replace(/_/g, '').toLowerCase()); - triggerEvent.call(_this7.player, _this7.player.media, event); + triggerEvent.call(_this8.player, _this8.player.media, event); }; switch (event.type) { @@ -10452,37 +10435,39 @@ typeof navigator === "object" && (function () { }, { key: "listeners", value: function listeners() { - var _this8 = this; + var _this9 = this; var container = this.player.elements.container; - var time; // Add listeners to the required events - + var time; + this.player.on('canplay', function () { + _this9.addCuePoints(); + }); this.player.on('ended', function () { - _this8.loader.contentComplete(); + _this9.loader.contentComplete(); }); this.player.on('timeupdate', function () { - time = _this8.player.currentTime; + time = _this9.player.currentTime; }); this.player.on('seeked', function () { - var seekedTime = _this8.player.currentTime; + var seekedTime = _this9.player.currentTime; - if (is.empty(_this8.cuePoints)) { + if (is.empty(_this9.cuePoints)) { return; } - _this8.cuePoints.forEach(function (cuePoint, index) { + _this9.cuePoints.forEach(function (cuePoint, index) { if (time < cuePoint && cuePoint < seekedTime) { - _this8.manager.discardAdBreak(); + _this9.manager.discardAdBreak(); - _this8.cuePoints.splice(index, 1); + _this9.cuePoints.splice(index, 1); } }); }); // Listen to the resizing of the window. And resize ad accordingly // TODO: eventually implement ResizeObserver window.addEventListener('resize', function () { - if (_this8.manager) { - _this8.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL); + if (_this9.manager) { + _this9.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL); } }); } @@ -10493,7 +10478,7 @@ typeof navigator === "object" && (function () { }, { key: "play", value: function play() { - var _this9 = this; + var _this10 = this; var container = this.player.elements.container; @@ -10504,23 +10489,23 @@ typeof navigator === "object" && (function () { this.managerPromise.then(function () { // Initialize the container. Must be done via a user action on mobile devices - _this9.elements.displayContainer.initialize(); + _this10.elements.displayContainer.initialize(); try { - if (!_this9.initialized) { + if (!_this10.initialized) { // Initialize the ads manager. Ad rules playlist will start at this time - _this9.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will + _this10.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules - _this9.manager.start(); + _this10.manager.start(); } - _this9.initialized = true; + _this10.initialized = true; } catch (adError) { // An error may be thrown if there was a problem with the // VAST response - _this9.onAdError(adError); + _this10.onAdError(adError); } }).catch(function () {}); } @@ -10579,23 +10564,23 @@ typeof navigator === "object" && (function () { }, { key: "loadAds", value: function loadAds() { - var _this10 = this; + var _this11 = this; // Tell our adsManager to go bye bye this.managerPromise.then(function () { // Destroy our adsManager - if (_this10.manager) { - _this10.manager.destroy(); + if (_this11.manager) { + _this11.manager.destroy(); } // Re-set our adsManager promises - _this10.managerPromise = new Promise(function (resolve) { - _this10.on('loaded', resolve); + _this11.managerPromise = new Promise(function (resolve) { + _this11.on('loaded', resolve); - _this10.player.debug.log(_this10.manager); + _this11.player.debug.log(_this11.manager); }); // Now request some new advertisements - _this10.requestAds(); + _this11.requestAds(); }).catch(function () {}); } /** @@ -10606,7 +10591,7 @@ typeof navigator === "object" && (function () { }, { key: "trigger", value: function trigger(event) { - var _this11 = this; + var _this12 = this; for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; @@ -10617,7 +10602,7 @@ typeof navigator === "object" && (function () { if (is.array(handlers)) { handlers.forEach(function (handler) { if (is.function(handler)) { - handler.apply(_this11, args); + handler.apply(_this12, args); } }); } @@ -10651,13 +10636,13 @@ typeof navigator === "object" && (function () { }, { key: "startSafetyTimer", value: function startSafetyTimer(time, from) { - var _this12 = this; + var _this13 = this; this.player.debug.log("Safety timer invoked from: ".concat(from)); this.safetyTimer = setTimeout(function () { - _this12.cancel(); + _this13.cancel(); - _this12.clearSafetyTimer('startSafetyTimer()'); + _this13.clearSafetyTimer('startSafetyTimer()'); }, time); } /** diff --git a/demo/dist/demo.min.js b/demo/dist/demo.min.js index 31faf754..1ea79cda 100644 --- a/demo/dist/demo.min.js +++ b/demo/dist/demo.min.js @@ -1,2 +1,2 @@ -"object"==typeof navigator&&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,t){function n(e,t){for(var n=0;n0){var o=n(i,this);~o?i.splice(o+1):i.push(this),~o?r.splice(o,1/0,a):r.push(a),~n(i,s)&&(s=t.call(this,a,s))}else i.push(s);return null==e?s instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}(s):s:e.call(this,a,s)}}(e.exports=function(e,t,n,r){return JSON.stringify(e,i(t,r),n)}).getSerialize=i}),i=(n.getSerialize,"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{});function r(e){return void 0===e}function a(e){return"[object Object]"===Object.prototype.toString.call(e)}function s(e){return"[object String]"===Object.prototype.toString.call(e)}function o(e){return"[object Array]"===Object.prototype.toString.call(e)}function l(){if(!("fetch"in i))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function c(e,t){var n,i;if(r(e.length))for(n in e)d(e,n)&&t.call(null,n,e[n]);else if(i=e.length)for(n=0;n ".length;e&&i++<5&&!("html"===(t=p(e))||i>1&&r+n.length*a+t.length>=80);)n.push(t),r+=t.length,e=e.parentNode;return n.reverse().join(" > ")},htmlElementAsString:p,isSameException:function(e,t){return!m(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(n=e.stacktrace,i=t.stacktrace,(!r(n)||!r(i))&&f(e.stacktrace,t.stacktrace)));var n,i},isSameStacktrace:f,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),n=t[6]||"",i=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+n+i}},fill:function(e,t,n,i){if(null!=e){var r=e[t];e[t]=n(r),e[t].__raven__=!0,e[t].__orig__=r,i&&i.push([e,t,r])}},safeJoin:function(e,t){if(!o(e))return"";for(var n=[],i=0;ir?e(t,i-1):s},serializeKeysForMessage:function(e,t){if("number"==typeof e||"string"==typeof e)return e.toString();if(!Array.isArray(e))return"";if(0===(e=e.filter(function(e){return"string"==typeof e})).length)return"[object has no keys]";if(t="number"!=typeof t?y:t,e[0].length>=t)return e[0];for(var n=e.length;n>0;n--){var i=e.slice(0,n).join(", ");if(!(i.length>t))return n===e.length?i:i+"…"}return""},sanitize:function(e,t){if(!o(t)||o(t)&&0===t.length)return e;var i,r=h(t),s="********";try{i=JSON.parse(n(e))}catch(t){return e}return function e(t){return o(t)?t.map(function(t){return e(t)}):a(t)?Object.keys(t).reduce(function(n,i){return r.test(i)?n[i]=s:n[i]=e(t[i]),n},{}):t}(i)}},_={collectWindowErrors:!0,debug:!1},T="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},E=[].slice,C="?",S=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function x(){return"undefined"==typeof document||null==document.location?"":document.location.href}_.report=function(){var e,t,n=[],i=null,r=null,a=null;function s(e,t){var i=null;if(!t||_.collectWindowErrors){for(var r in n)if(n.hasOwnProperty(r))try{n[r].apply(null,[e].concat(E.call(arguments,2)))}catch(e){i=e}if(i)throw i}}function o(t,n,i,r,o){var c=w.isErrorEvent(o)?o.error:o,u=w.isErrorEvent(t)?t.message:t;if(a)_.computeStackTrace.augmentStackTraceWithInitialElement(a,n,i,u),l();else if(c&&w.isError(c))s(_.computeStackTrace(c),!0);else{var d,h={url:n,line:i,column:r},p=void 0;if("[object String]"==={}.toString.call(u))(d=u.match(S))&&(p=d[1],u=d[2]);h.func=C,s({name:p,message:u,url:x(),stack:[h]},!0)}return!!e&&e.apply(this,arguments)}function l(){var e=a,t=i;i=null,a=null,r=null,s.apply(null,[e,!1].concat(t))}function c(e,t){var n=E.call(arguments,1);if(a){if(r===e)return;l()}var s=_.computeStackTrace(e);if(a=s,r=e,i=n,setTimeout(function(){r===e&&l()},s.incomplete?2e3:0),!1!==t)throw e}return c.subscribe=function(i){t||(e=T.onerror,T.onerror=o,t=!0),n.push(i)},c.unsubscribe=function(e){for(var t=n.length-1;t>=0;--t)n[t]===e&&n.splice(t,1)},c.uninstall=function(){t&&(T.onerror=e,t=!1,e=void 0),n=[]},c}(),_.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,n,i,r=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,a=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,o=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,c=e.stack.split("\n"),u=[],d=(/^(.*) is undefined$/.exec(e.message),0),h=c.length;d eval")>-1&&(t=o.exec(n[3]))?(n[3]=t[1],n[4]=t[2],n[5]=null):0!==d||n[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),i={url:n[3],func:n[1]||C,args:n[2]?n[2].split(","):[],line:n[4]?+n[4]:null,column:n[5]?+n[5]:null}}if(!i.func&&i.line&&(i.func=C),i.url&&"blob:"===i.url.substr(0,5)){var m=new XMLHttpRequest;if(m.open("GET",i.url,!1),m.send(null),200===m.status){var f=m.responseText||"",g=(f=f.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(g){var v=g[1];"~"===v.charAt(0)&&(v=("undefined"==typeof document||null==document.location?"":document.location.origin?document.location.origin:document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:""))+v.slice(1)),i.url=v.slice(0,-4)}}}u.push(i)}return u.length?{name:e.name,message:e.message,url:x(),stack:u}:null}}function t(e,t,n,i){var r={url:t,line:n};if(r.url&&r.line){if(e.incomplete=!1,r.func||(r.func=C),e.stack.length>0&&e.stack[0].url===r.url){if(e.stack[0].line===r.line)return!1;if(!e.stack[0].line&&e.stack[0].func===r.func)return e.stack[0].line=r.line,!1}return e.stack.unshift(r),e.partial=!0,!0}return e.incomplete=!0,!1}function n(e,r){for(var a,s,o=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],c={},u=!1,d=n.caller;d&&!u;d=d.caller)if(d!==i&&d!==_.report){if(s={url:null,func:C,line:null,column:null},d.name?s.func=d.name:(a=o.exec(d.toString()))&&(s.func=a[1]),void 0===s.func)try{s.func=a.input.substring(0,a.input.indexOf("{"))}catch(e){}c[""+d]?u=!0:c[""+d]=!0,l.push(s)}r&&l.splice(0,r);var h={name:e.name,message:e.message,url:x(),stack:l};return t(h,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),h}function i(t,i){var r=null;i=null==i?0:+i;try{if(r=e(t))return r}catch(e){if(_.debug)throw e}try{if(r=n(t,i+1))return r}catch(e){if(_.debug)throw e}return{name:t.name,message:t.message,url:x()}}return i.augmentStackTraceWithInitialElement=t,i.computeStackTraceFromStackProp=e,i}();var A=_;function P(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function O(e,t,n,i,r,a){return P((s=P(P(t,e),P(i,a)))<<(o=r)|s>>>32-o,n);var s,o}function M(e,t,n,i,r,a,s){return O(t&n|~t&i,e,t,r,a,s)}function N(e,t,n,i,r,a,s){return O(t&i|n&~i,e,t,r,a,s)}function L(e,t,n,i,r,a,s){return O(t^n^i,e,t,r,a,s)}function I(e,t,n,i,r,a,s){return O(n^(t|~i),e,t,r,a,s)}function j(e,t){var n,i,r,a,s;e[t>>5]|=128<>>9<<4)]=t;var o=1732584193,l=-271733879,c=-1732584194,u=271733878;for(n=0;n>5]>>>t%32&255);return n}function D(e){var t,n=[];for(n[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<>>4&15)+"0123456789abcdef".charAt(15&t);return i}function H(e){return unescape(encodeURIComponent(e))}function B(e){return function(e){return R(j(D(e),8*e.length))}(H(e))}function q(e,t){return function(e,t){var n,i,r=D(e),a=[],s=[];for(a[15]=s[15]=void 0,r.length>16&&(r=j(r,8*e.length)),n=0;n<16;n+=1)a[n]=909522486^r[n],s[n]=1549556828^r[n];return i=j(a.concat(D(t)),512+8*t.length),R(j(s.concat(i),640))}(H(e),H(t))}var U=function(e,t,n){return t?n?q(t,e):F(q(t,e)):n?B(e):F(B(e))};function V(e){this.name="RavenConfigError",this.message=e}V.prototype=new Error,V.prototype.constructor=V;var z=V,W=function(e,t,n){var i=e[t],r=e;if(t in e){var a="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),s=w.safeJoin(e," "),o={level:a,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(s="Assertion failed: "+(w.safeJoin(e.slice(1)," ")||"console.assert"),o.extra.arguments=e.slice(1),n&&n(s,o)):n&&n(s,o),i&&Function.prototype.apply.call(i,r,e)}}},K=w.isErrorEvent,X=w.isDOMError,Y=w.isDOMException,J=w.isError,$=w.isObject,G=w.isPlainObject,Q=w.isUndefined,Z=w.isFunction,ee=w.isString,te=w.isArray,ne=w.isEmptyObject,ie=w.each,re=w.objectMerge,ae=w.truncate,se=w.objectFrozen,oe=w.hasKey,le=w.joinRegExp,ce=w.urlencode,ue=w.uuid4,de=w.htmlTreeAsString,he=w.isSameException,pe=w.isSameStacktrace,me=w.parseUrl,fe=w.fill,ge=w.supportsFetch,ve=w.supportsReferrerPolicy,ye=w.serializeKeysForMessage,be=w.serializeException,ke=w.sanitize,we=W,_e="source protocol user pass host port path".split(" "),Te=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function Ee(){return+new Date}var Ce="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Se=Ce.document,xe=Ce.navigator;function Ae(e,t){return Z(t)?function(n){return t(n,e)}:t}function Pe(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Q(Se),this._hasNavigator=!Q(xe),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:Ce.SENTRY_RELEASE&&Ce.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this._fetchDefaults={method:"POST",referrerPolicy:ve()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Ce.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=Ee(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=Ce.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}Pe.prototype={VERSION:"3.27.0",debug:!1,TraceKit:A,config:function(e,t){var n=this;if(n._globalServer)return this._logDebug("error","Error: Raven has already been configured"),n;if(!e)return n;var i=n._globalOptions;t&&ie(t,function(e,t){"tags"===e||"extra"===e||"user"===e?n._globalContext[e]=t:i[e]=t}),n.setDSN(e),i.ignoreErrors.push(/^Script error\.?$/),i.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),i.ignoreErrors=le(i.ignoreErrors),i.ignoreUrls=!!i.ignoreUrls.length&&le(i.ignoreUrls),i.whitelistUrls=!!i.whitelistUrls.length&&le(i.whitelistUrls),i.includePaths=le(i.includePaths),i.maxBreadcrumbs=Math.max(0,Math.min(i.maxBreadcrumbs||100,100));var r={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},a=i.autoBreadcrumbs;"[object Object]"==={}.toString.call(a)?a=re(r,a):!1!==a&&(a=r),i.autoBreadcrumbs=a;var s={tryCatch:!0},o=i.instrument;return"[object Object]"==={}.toString.call(o)?o=re(s,o):!1!==o&&(o=s),i.instrument=o,A.collectWindowErrors=!!i.collectWindowErrors,n},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(A.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.captureUnhandledRejections&&e._attachPromiseRejectionHandler(),e._patchFunctionToString(),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),n=t.path.lastIndexOf("/"),i=t.path.substr(1,n);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(n+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+i+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,n){return Z(e)&&(n=t||[],t=e,e={}),this.wrap(e,t).apply(this,n)},wrap:function(e,t,n){var i=this;if(Q(t)&&!Z(e))return e;if(Z(e)&&(t=e,e=void 0),!Z(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function r(){var r=[],a=arguments.length,s=!e||e&&!1!==e.deep;for(n&&Z(n)&&n.apply(this,arguments);a--;)r[a]=s?i.wrap(e,arguments[a]):arguments[a];try{return t.apply(this,r)}catch(t){throw i._ignoreNextOnError(),i.captureException(t,e),t}}for(var a in t)oe(t,a)&&(r[a]=t[a]);return r.prototype=t.prototype,t.__raven_wrapper__=r,r.__raven__=!0,r.__orig__=t,r},uninstall:function(){return A.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(e){this._logDebug("debug","Raven caught unhandled promise rejection:",e),this.captureException(e.reason,{mechanism:{type:"onunhandledrejection",handled:!1}})},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),Ce.addEventListener&&Ce.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return Ce.removeEventListener&&Ce.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=re({trimHeadFrames:0},t||{}),K(e)&&e.error)e=e.error;else{if(X(e)||Y(e)){var n=e.name||(X(e)?"DOMError":"DOMException"),i=e.message?n+": "+e.message:n;return this.captureMessage(i,re(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}))}if(J(e))e=e;else{if(!G(e))return this.captureMessage(e,re(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}}this._lastCapturedException=e;try{var r=A.computeStackTrace(e);this._handleStackInfo(r,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var n=Object.keys(t).sort(),i=re(e,{message:"Non-Error exception captured with keys: "+ye(n),fingerprint:[U(n)],extra:e.extra||{}});return i.extra.__serialized__=be(t),i},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var n,i=re({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){n=e}n.name=null;var r=A.computeStackTrace(n),a=te(r.stack)&&r.stack[1];a&&"Raven.captureException"===a.func&&(a=r.stack[2]);var s=a&&a.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(s))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(s))){if(this._globalOptions.stacktrace||t.stacktrace||""===i.message){i.fingerprint=null==i.fingerprint?e:i.fingerprint,(t=re({trimHeadFrames:0},t)).trimHeadFrames+=1;var o=this._prepareFrames(r,t);i.stacktrace={frames:o.reverse()}}return i.fingerprint&&(i.fingerprint=te(i.fingerprint)?i.fingerprint:[i.fingerprint]),this._send(i),this}}},captureBreadcrumb:function(e){var t=re({timestamp:Ee()/1e3},e);if(Z(this._globalOptions.breadcrumbCallback)){var n=this._globalOptions.breadcrumbCallback(t);if($(n)&&!ne(n))t=n;else if(!1===n)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(n(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=Ae(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Ae(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Ae(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=Ce.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(Se){if(!(e=re({eventId:this.lastEventId(),dsn:this._dsn,user:this._globalContext.user||{}},e)).eventId)throw new z("Missing eventId");if(!e.dsn)throw new z("Missing DSN");var t=encodeURIComponent,n=[];for(var i in e)if("user"===i){var r=e.user;r.name&&n.push("name="+t(r.name)),r.email&&n.push("email="+t(r.email))}else n.push(t(i)+"="+t(e[i]));var a=this._getGlobalServer(this._parseDSN(e.dsn)),s=Se.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/?"+n.join("&"),(Se.head||Se.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var n,i;if(this._hasDocument){for(i in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),Se.createEvent?(n=Se.createEvent("HTMLEvents")).initEvent(e,!0,!0):(n=Se.createEventObject()).eventType=e,t)oe(t,i)&&(n[i]=t[i]);if(Se.createEvent)Se.dispatchEvent(n);else try{Se.fireEvent("on"+n.eventType.toLowerCase(),n)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(n){if(t._keypressTimeout=null,t._lastCapturedEvent!==n){var i;t._lastCapturedEvent=n;try{i=de(n.target)}catch(e){i=""}t.captureBreadcrumb({category:"ui."+e,message:i})}}},_keypressEventHandler:function(){var e=this;return function(t){var n;try{n=t.target}catch(e){return}var i=n&&n.tagName;if(i&&("INPUT"===i||"TEXTAREA"===i||n.isContentEditable)){var r=e._keypressTimeout;r||e._breadcrumbEventHandler("input")(t),clearTimeout(r),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var n=me(this._location.href),i=me(t),r=me(e);this._lastHref=t,n.protocol===i.protocol&&n.host===i.host&&(t=i.relative),n.protocol===r.protocol&&n.host===r.host&&(e=r.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_patchFunctionToString:function(){var e=this;e._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?e._originalFunctionToString.apply(this.__orig__,arguments):e._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function n(t){return function(n,i){for(var r=new Array(arguments.length),a=0;a"}}},s)),t.apply?t.apply(this,r):t(r[0],r[1])}}var i=this._globalOptions.autoBreadcrumbs;function r(n){var r=Ce[n]&&Ce[n].prototype;r&&r.hasOwnProperty&&r.hasOwnProperty("addEventListener")&&(fe(r,"addEventListener",function(t){return function(r,a,s,o){try{a&&a.handleEvent&&(a.handleEvent=e.wrap({mechanism:{type:"instrument",data:{target:n,function:"handleEvent",handler:a&&a.name||""}}},a.handleEvent))}catch(e){}var l,c,u;return i&&i.dom&&("EventTarget"===n||"Node"===n)&&(c=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),l=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?c(e):"keypress"===t?u(e):void 0}}),t.call(this,r,e.wrap({mechanism:{type:"instrument",data:{target:n,function:"addEventListener",handler:a&&a.name||""}}},a,l),s,o)}},t),fe(r,"removeEventListener",function(e){return function(t,n,i,r){try{n=n&&(n.__raven_wrapper__?n.__raven_wrapper__:n)}catch(e){}return e.call(this,t,n,i,r)}},t))}fe(Ce,"setTimeout",n,t),fe(Ce,"setInterval",n,t),Ce.requestAnimationFrame&&fe(Ce,"requestAnimationFrame",function(t){return function(n){return t(e.wrap({mechanism:{type:"instrument",data:{function:"requestAnimationFrame",handler:t&&t.name||""}}},n))}},t);for(var a=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],s=0;s"}}},n)})}if(t.xhr&&"XMLHttpRequest"in Ce){var r=Ce.XMLHttpRequest&&Ce.XMLHttpRequest.prototype;fe(r,"open",function(t){return function(n,i){return ee(i)&&-1===i.indexOf(e._globalKey)&&(this.__raven_xhr={method:n,url:i,status_code:null}),t.apply(this,arguments)}},n),fe(r,"send",function(t){return function(){var n=this;function r(){if(n.__raven_xhr&&4===n.readyState){try{n.__raven_xhr.status_code=n.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:n.__raven_xhr})}}for(var a=["onload","onerror","onprogress"],s=0;s"}}},t,r)}):n.onreadystatechange=r,t.apply(this,arguments)}},n)}t.xhr&&ge()&&fe(Ce,"fetch",function(t){return function(){for(var n=new Array(arguments.length),i=0;i2?arguments[2]:void 0;return n&&e._captureUrlChange(e._lastHref,n+""),t.apply(this,arguments)}};fe(Ce.history,"pushState",l,n),fe(Ce.history,"replaceState",l,n)}if(t.console&&"console"in Ce&&console.log){var c=function(t,n){e.captureBreadcrumb({message:t,level:n.level,category:"console"})};ie(["debug","info","warn","error","log"],function(e,t){we(console,t,c)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],n=e[1],i=e[2];t[n]=i}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ie(this._plugins,function(t,n){var i=n[0],r=n[1];i.apply(e,[e].concat(r))})},_parseDSN:function(e){var t=Te.exec(e),n={},i=7;try{for(;i--;)n[_e[i]]=t[i]||""}catch(t){throw new z("Invalid DSN: "+e)}if(n.pass&&!this._globalOptions.allowSecretKey)throw new z("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return n},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(e,t){(t=t||{}).mechanism=t.mechanism||{type:"onerror",handled:!1},this._ignoreOnError||this._handleStackInfo(e,t)},_handleStackInfo:function(e,t){var n=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,n,t)},_prepareFrames:function(e,t){var n=this,i=[];if(e.stack&&e.stack.length&&(ie(e.stack,function(t,r){var a=n._normalizeFrame(r,e.url);a&&i.push(a)}),t&&t.trimHeadFrames))for(var r=0;r0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),e=this._sanitizeData(e),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||ne(e[t]))&&delete e[t]}),Z(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!ne(e)&&(Z(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()3&&void 0!==arguments[3]&&arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!$e.empty(t)&&$e.function(n)){var o=t.split(" "),l=s;Ge&&(l={passive:a,capture:s}),o.forEach(function(t){i&&i.eventListeners&&r&&i.eventListeners.push({element:e,type:t,callback:n,options:l}),e[r?"addEventListener":"removeEventListener"](t,n,l)})}}function Ze(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Qe.call(this,e,t,n,!0,i,r)}function et(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Qe.call(this,e,t,n,!1,i,r)}function tt(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Qe.call(this,e,n,function s(){et(e,n,s,r,a);for(var o=arguments.length,l=new Array(o),c=0;c1&&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($e.element(e)&&!$e.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}}function it(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,a=e.nextSibling;i.appendChild(e),a?r.insertBefore(i,a):r.appendChild(i)})}function rt(e,t){$e.element(e)&&!$e.empty(t)&&Object.entries(t).filter(function(e){var t=Be(e,2)[1];return!$e.nullOrUndefined(t)}).forEach(function(t){var n=Be(t,2),i=n[0],r=n[1];return e.setAttribute(i,r)})}function at(e,t,n){var i=document.createElement(e);return $e.object(t)&&rt(i,t),$e.string(n)&&(i.innerText=n),i}function st(e,t,n,i){$e.element(t)&&t.appendChild(at(e,n,i))}function ot(e){$e.nodeList(e)||$e.array(e)?Array.from(e).forEach(ot):$e.element(e)&&$e.element(e.parentNode)&&e.parentNode.removeChild(e)}function lt(e){if($e.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function ct(e,t){return $e.element(t)&&$e.element(t.parentNode)&&$e.element(e)?(t.parentNode.replaceChild(e,t),e):null}function ut(e,t){if(!$e.string(e)||$e.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),s=a[0],o=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":$e.object(i)&&$e.string(i.class)&&(i.class+=" ".concat(r)),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=o}}),n}function dt(e,t){if($e.element(e)){var n=t;$e.boolean(n)||(n=!e.hidden),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function ht(e,t,n){if($e.nodeList(e))return Array.from(e).map(function(e){return ht(e,t,n)});if($e.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function pt(e,t){return $e.element(e)&&e.classList.contains(t)}function mt(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}function ft(e){return this.elements.container.querySelectorAll(e)}function gt(e){return this.elements.container.querySelector(e)}function vt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];$e.element(e)&&(e.focus({preventScroll:!0}),t&&ht(e,this.config.classNames.tabFocus))}var yt,bt,kt,wt=(yt=document.createElement("span"),bt={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},kt=Object.keys(bt).find(function(e){return void 0!==yt.style[e]}),!!$e.string(kt)&&bt[kt]);function _t(e){setTimeout(function(){try{dt(e,!0),e.offsetHeight,dt(e,!1)}catch(e){}},0)}var Tt,Et={isIE:!!document.documentMode,isEdge:window.navigator.userAgent.includes("Edge"),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)},Ct={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},St={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=Et.isIPhone&&n&&St.playsinline,r=St[e]||"html5"!==t;return{api:r,ui:r&&St.rangeInput&&("video"!==e||!Et.isIPhone||i)}},pip:!(Et.isIPhone||!$e.function(at("video").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||at("video").disablePictureInPicture)),airplay:$e.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){if($e.empty(e))return!1;var t=Be(e.split("/"),1)[0],n=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(Ct).includes(n)&&(n+='; codecs="'.concat(Ct[e],'"'));try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(Tt=document.createElement("input"),Tt.type="range","range"===Tt.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==wt,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},xt={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){var n=t.getAttribute("type");return!!$e.empty(n)||St.mime.call(e,n)}):[]},getQualityOptions:function(){return xt.getSources.call(this).map(function(e){return Number(e.getAttribute("size"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=xt.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("size"))},set:function(t){var n=xt.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(n){var i=e.media,r=i.currentTime,a=i.paused,s=i.preload,o=i.readyState;e.media.src=n.getAttribute("src"),("none"!==s||o)&&(e.once("loadedmetadata",function(){e.currentTime=r,a||e.play()}),e.media.load()),nt.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(ot(xt.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function At(e){return $e.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e}function Pt(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function Ot(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=new Array(t>1?t-1:0),i=1;i1?t-1:0),i=1;i0&&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())}function Lt(){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()})}function It(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Nt(e,"-"," "),e=Nt(e,"_"," "),Nt(e=Lt(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function jt(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var Rt={pip:"PIP",airplay:"AirPlay",html5:"HTML5",vimeo:"Vimeo",youtube:"YouTube"},Dt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if($e.empty(e)||$e.empty(t))return"";var n=Pt(t.i18n,e);if($e.empty(n))return Object.keys(Rt).includes(e)?Rt[e]:"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Be(e,2),i=t[0],r=t[1];n=Nt(n,i,r)}),n},Ft=function(){function e(t){Re(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Fe(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if($e.empty(n))return null;var i=JSON.parse(n);return $e.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&$e.object(t)){var n=this.get();$e.empty(n)&&(n={}),Ot(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}();function Ht(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.status)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})}function Bt(e,t){if($e.string(e)){var n=$e.string(t),i=function(){return null!==document.getElementById(t)},r=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement("afterbegin",e)};if(!n||!i()){var a=Ft.supported,s=document.createElement("div");if(s.setAttribute("hidden",""),n&&s.setAttribute("id",t),a){var o=window.localStorage.getItem("".concat("cache","-").concat(t));if(null!==o){var l=JSON.parse(o);r(s,l.content)}}Ht(e).then(function(e){$e.empty(e)||(a&&window.localStorage.setItem("".concat("cache","-").concat(t),JSON.stringify({content:e})),r(s,e))}).catch(function(){})}}}var qt=function(e){return Math.trunc(e/60/60%60,10)},Ut=function(e){return Math.trunc(e/60%60,10)},Vt=function(e){return Math.trunc(e%60,10)};function zt(){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(!$e.number(e))return zt(null,t,n);var i=function(e){return"0".concat(e).slice(-2)},r=qt(e),a=Ut(e),s=Vt(e);return r=t||r>0?"".concat(r,":"):"","".concat(n&&e>0?"-":"").concat(r).concat(i(a),":").concat(i(s))}var Wt={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||Et.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=gt.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:ft.call(this,this.config.selectors.buttons.play),pause:gt.call(this,this.config.selectors.buttons.pause),restart:gt.call(this,this.config.selectors.buttons.restart),rewind:gt.call(this,this.config.selectors.buttons.rewind),fastForward:gt.call(this,this.config.selectors.buttons.fastForward),mute:gt.call(this,this.config.selectors.buttons.mute),pip:gt.call(this,this.config.selectors.buttons.pip),airplay:gt.call(this,this.config.selectors.buttons.airplay),settings:gt.call(this,this.config.selectors.buttons.settings),captions:gt.call(this,this.config.selectors.buttons.captions),fullscreen:gt.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=gt.call(this,this.config.selectors.progress),this.elements.inputs={seek:gt.call(this,this.config.selectors.inputs.seek),volume:gt.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:gt.call(this,this.config.selectors.display.buffer),currentTime:gt.call(this,this.config.selectors.display.currentTime),duration:gt.call(this,this.config.selectors.display.duration)},$e.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(".".concat(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=Wt.getIconUrl.call(this),i="".concat(n.cors?"":n.url,"#").concat(this.config.iconPrefix),r=document.createElementNS("http://www.w3.org/2000/svg","svg");rt(r,Ot(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),s="".concat(i,"-").concat(e);return"href"in a&&a.setAttributeNS("http://www.w3.org/1999/xlink","href",s),a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(a),r},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Dt(e,this.config);return at("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),n)},createBadge:function(e){if($e.empty(e))return null;var t=at("span",{class:this.config.classNames.menu.value});return t.appendChild(at("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Object.assign({},t),i=It(e),r={element:"button",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch(["element","icon","label"].forEach(function(e){Object.keys(n).includes(e)&&(r[e]=n[e],delete n[e])}),"button"!==r.element||Object.keys(n).includes("type")||(n.type="button"),Object.keys(n).includes("class")?n.class.includes(this.config.classNames.control)||(n.class+=" ".concat(this.config.classNames.control)):n.class=this.config.classNames.control,e){case"play":r.toggle=!0,r.label="play",r.labelPressed="pause",r.icon="play",r.iconPressed="pause";break;case"mute":r.toggle=!0,r.label="mute",r.labelPressed="unmute",r.icon="volume",r.iconPressed="muted";break;case"captions":r.toggle=!0,r.label="enableCaptions",r.labelPressed="disableCaptions",r.icon="captions-off",r.iconPressed="captions-on";break;case"fullscreen":r.toggle=!0,r.label="enterFullscreen",r.labelPressed="exitFullscreen",r.icon="enter-fullscreen",r.iconPressed="exit-fullscreen";break;case"play-large":n.class+=" ".concat(this.config.classNames.control,"--overlaid"),i="play",r.label="play",r.icon="play";break;default:$e.empty(r.label)&&(r.label=i),$e.empty(r.icon)&&(r.icon=e)}var a=at(r.element);return r.toggle?(a.appendChild(Wt.createIcon.call(this,r.iconPressed,{class:"icon--pressed"})),a.appendChild(Wt.createIcon.call(this,r.icon,{class:"icon--not-pressed"})),a.appendChild(Wt.createLabel.call(this,r.labelPressed,{class:"label--pressed"})),a.appendChild(Wt.createLabel.call(this,r.label,{class:"label--not-pressed"}))):(a.appendChild(Wt.createIcon.call(this,r.icon)),a.appendChild(Wt.createLabel.call(this,r.label))),Ot(n,ut(this.config.selectors.buttons[i],n)),rt(a,n),"play"===i?($e.array(this.elements.buttons[i])||(this.elements.buttons[i]=[]),this.elements.buttons[i].push(a)):this.elements.buttons[i]=a,a},createRange:function(e,t){var n=at("input",Ot(ut(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":Dt(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,Wt.updateRangeFill.call(this,n),n},createProgress:function(e,t){var n=at("progress",Ot(ut(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(at("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],r=i?Dt(i,this.config):"";n.innerText="% ".concat(r.toLowerCase())}return this.elements.display[e]=n,n},createTime:function(e){var t=ut(this.config.selectors.display[e]),n=at("div",Ot(t,{class:"".concat(this.config.classNames.display.time," ").concat(t.class?t.class:"").trim(),"aria-label":Dt(e,this.config)}),"00:00");return this.elements.display[e]=n,n},bindMenuItemShortcuts:function(e,t){var n=this;Ze(e,"keydown keyup",function(i){if([32,38,39,40].includes(i.which)&&(i.preventDefault(),i.stopPropagation(),"keydown"!==i.type)){var r,a=mt(e,'[role="menuitemradio"]');if(!a&&[32,39].includes(i.which))Wt.showMenuPanel.call(n,t,!0);else 32!==i.which&&(40===i.which||a&&39===i.which?(r=e.nextElementSibling,$e.element(r)||(r=e.parentNode.firstElementChild)):(r=e.previousElementSibling,$e.element(r)||(r=e.parentNode.lastElementChild)),vt.call(n,r,!0))}},!1),Ze(e,"keyup",function(e){13===e.which&&Wt.focusFirstMenuItem.call(n,null,!0)})},createMenuItem:function(e){var t=this,n=e.value,i=e.list,r=e.type,a=e.title,s=e.badge,o=void 0===s?null:s,l=e.checked,c=void 0!==l&&l,u=ut(this.config.selectors.inputs[r]),d=at("button",Ot(u,{type:"button",role:"menuitemradio",class:"".concat(this.config.classNames.control," ").concat(u.class?u.class:"").trim(),"aria-checked":c,value:n})),h=at("span");h.innerHTML=a,$e.element(o)&&h.appendChild(o),d.appendChild(h),Object.defineProperty(d,"checked",{enumerable:!0,get:function(){return"true"===d.getAttribute("aria-checked")},set:function(e){e&&Array.from(d.parentNode.children).filter(function(e){return mt(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),d.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(d,"click keyup",function(e){if(!$e.keyboardEvent(e)||32===e.which){switch(e.preventDefault(),e.stopPropagation(),d.checked=!0,r){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}Wt.showMenuPanel.call(t,"home",$e.keyboardEvent(e))}},r,!1),Wt.bindMenuItemShortcuts.call(this,d,r),i.appendChild(d)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return $e.number(e)?zt(e,qt(this.duration)>0,t):e},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];$e.element(e)&&$e.number(t)&&(e.innerText=Wt.formatTime(t,n))},updateVolume:function(){this.supported.ui&&($e.element(this.elements.inputs.volume)&&Wt.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),$e.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;$e.element(e)&&(e.value=t,Wt.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&$e.event(e)){var n,i,r=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,r=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&Wt.setRange.call(this,this.elements.inputs.seek,r);break;case"playing":case"progress":!function(e,n){var i=$e.number(n)?n:0,r=$e.element(e)?e:t.elements.display.buffer;if($e.element(r)){r.value=i;var a=r.getElementsByTagName("span")[0];$e.element(a)&&(a.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=$e.event(e)?e.target:e;if($e.element(t)&&"range"===t.getAttribute("type")){if(mt(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=Wt.formatTime(this.currentTime),i=Wt.formatTime(this.duration),r=Dt("seekLabel",this.config);t.setAttribute("aria-valuetext",r.replace("{currentTime}",n).replace("{duration}",i))}else if(mt(t,this.config.selectors.inputs.volume)){var a=100*t.value;t.setAttribute("aria-valuenow",a),t.setAttribute("aria-valuetext","".concat(a.toFixed(1),"%"))}else t.setAttribute("aria-valuenow",t.value);Et.isWebkit&&t.style.setProperty("--value","".concat(t.value/t.max*100,"%"))}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&$e.element(this.elements.inputs.seek)&&$e.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r="".concat(this.config.classNames.tooltip,"--visible"),a=function(e){ht(t.elements.display.seekTooltip,r,e)};if(this.touch)a(!1);else{if($e.event(e))n=100/i.width*(e.pageX-i.left);else{if(!pt(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),Wt.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left="".concat(n,"%"),$e.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!$e.element(this.elements.display.duration)&&this.config.invertTime;Wt.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Wt.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return dt(this.elements.display.currentTime,!0),void dt(this.elements.progress,!0);$e.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=$e.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Wt.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Wt.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),Wt.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){dt(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],r=null,a=t;if("captions"===e)r=this.currentTrack;else{if(r=$e.empty(n)?this[e]:n,$e.empty(r)&&(r=this.config[e].default),!$e.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '".concat(r,"' for ").concat(e));if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '".concat(r,"' for ").concat(e))}if($e.element(a)||(a=i&&i.querySelector('[role="menu"]')),$e.element(a)){this.elements.settings.buttons[e].querySelector(".".concat(this.config.classNames.menu.value)).innerHTML=Wt.getLabel.call(this,e,r);var s=a&&a.querySelector('[value="'.concat(r,'"]'));$e.element(s)&&(s.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?Dt("normal",this.config):"".concat(t,"×");case"quality":if($e.number(t)){var n=Dt("qualityLabel.".concat(t),this.config);return n.length?n:"".concat(t,"p")}return Lt(t);case"captions":return Yt.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if($e.element(this.elements.settings.panels.quality)){var n=this.elements.settings.panels.quality.querySelector('[role="menu"]');$e.array(e)&&(this.options.quality=At(e).filter(function(e){return t.config.quality.options.includes(e)}));var i=!$e.empty(this.options.quality)&&this.options.quality.length>1;if(Wt.toggleMenuButton.call(this,"quality",i),lt(n),Wt.checkMenu.call(this),i){var r=function(e){var n=Dt("qualityBadge.".concat(e),t.config);return n.length?Wt.createBadge.call(t,n):null};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){Wt.createMenuItem.call(t,{value:e,list:n,type:"quality",title:Wt.getLabel.call(t,"quality",e),badge:r(e)})}),Wt.updateSetting.call(this,"quality",n)}}},setCaptionsMenu:function(){var e=this;if($e.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),n=Yt.getTracks.call(this),i=Boolean(n.length);if(Wt.toggleMenuButton.call(this,"captions",i),lt(t),Wt.checkMenu.call(this),i){var r=n.map(function(n,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:Yt.getLabel.call(e,n),badge:n.language&&Wt.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});r.unshift({value:-1,checked:!this.captions.toggled,title:Dt("disabled",this.config),list:t,type:"language"}),r.forEach(Wt.createMenuItem.bind(this)),Wt.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if($e.element(this.elements.settings.panels.speed)){var n=this.elements.settings.panels.speed.querySelector('[role="menu"]');$e.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=!$e.empty(this.options.speed)&&this.options.speed.length>1;Wt.toggleMenuButton.call(this,"speed",i),lt(n),Wt.checkMenu.call(this),i&&(this.options.speed.forEach(function(e){Wt.createMenuItem.call(t,{value:e,list:n,type:"speed",title:Wt.getLabel.call(t,"speed",e)})}),Wt.updateSetting.call(this,"speed",n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!$e.empty(e)&&Object.values(e).some(function(e){return!e.hidden});dt(this.elements.settings.menu,!t)},focusFirstMenuItem:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.elements.settings.popup.hidden){var n=e;$e.element(n)||(n=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}));var i=n.querySelector('[role^="menuitem"]');vt.call(this,i,t)}},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if($e.element(t)&&$e.element(n)){var i=t.hidden,r=i;if($e.boolean(e))r=e;else if($e.keyboardEvent(e)&&27===e.which)r=!1;else if($e.event(e)){var a=t.contains(e.target);if(a||!a&&e.target!==n&&r)return}n.setAttribute("aria-expanded",r),dt(t,!r),ht(this.elements.container,this.config.classNames.menu.open,r),r&&$e.keyboardEvent(e)?Wt.focusFirstMenuItem.call(this,null,!0):r||i||vt.call(this,n,$e.keyboardEvent(e))}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return ot(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=document.getElementById("plyr-settings-".concat(this.id,"-").concat(t));if($e.element(i)){var r=i.parentNode,a=Array.from(r.children).find(function(e){return!e.hidden});if(St.transitions&&!St.reducedMotion){r.style.width="".concat(a.scrollWidth,"px"),r.style.height="".concat(a.scrollHeight,"px");var s=Wt.getMenuSize.call(this,i);Ze.call(this,r,wt,function t(n){n.target===r&&["width","height"].includes(n.propertyName)&&(r.style.width="",r.style.height="",et.call(e,r,wt,t))}),r.style.width="".concat(s.width,"px"),r.style.height="".concat(s.height,"px")}dt(a,!0),dt(i,!1),Wt.focusFirstMenuItem.call(this,i,n)}},setDownloadLink:function(){var e=this.elements.buttons.download;$e.element(e)&&e.setAttribute("href",this.download)},create:function(e){var t=this,n=at("div",ut(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(Wt.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(Wt.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(Wt.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(Wt.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=at("div",ut(this.config.selectors.progress));if(i.appendChild(Wt.createRange.call(this,"seek",{id:"plyr-seek-".concat(e.id)})),i.appendChild(Wt.createProgress.call(this,"buffer")),this.config.tooltips.seek){var r=at("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(r),this.elements.display.seekTooltip=r}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(Wt.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(Wt.createTime.call(this,"duration")),this.config.controls.includes("mute")||this.config.controls.includes("volume")){var a=at("div",{class:"plyr__volume"});if(this.config.controls.includes("mute")&&a.appendChild(Wt.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s={max:1,step:.05,value:this.config.volume};a.appendChild(Wt.createRange.call(this,"volume",Ot(s,{id:"plyr-volume-".concat(e.id)}))),this.elements.volume=a}n.appendChild(a)}if(this.config.controls.includes("captions")&&n.appendChild(Wt.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!$e.empty(this.config.settings)){var o=at("div",{class:"plyr__menu",hidden:""});o.appendChild(Wt.createButton.call(this,"settings",{"aria-haspopup":!0,"aria-controls":"plyr-settings-".concat(e.id),"aria-expanded":!1}));var l=at("div",{class:"plyr__menu__container",id:"plyr-settings-".concat(e.id),hidden:""}),c=at("div"),u=at("div",{id:"plyr-settings-".concat(e.id,"-home")}),d=at("div",{role:"menu"});u.appendChild(d),c.appendChild(u),this.elements.settings.panels.home=u,this.config.settings.forEach(function(n){var i=at("button",Ot(ut(t.config.selectors.buttons.settings),{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--forward"),role:"menuitem","aria-haspopup":!0,hidden:""}));Wt.bindMenuItemShortcuts.call(t,i,n),Ze(i,"click",function(){Wt.showMenuPanel.call(t,n,!1)});var r=at("span",null,Dt(n,t.config)),a=at("span",{class:t.config.classNames.menu.value});a.innerHTML=e[n],r.appendChild(a),i.appendChild(r),d.appendChild(i);var s=at("div",{id:"plyr-settings-".concat(e.id,"-").concat(n),hidden:""}),o=at("button",{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--back")});o.appendChild(at("span",{"aria-hidden":!0},Dt(n,t.config))),o.appendChild(at("span",{class:t.config.classNames.hidden},Dt("menuBack",t.config))),Ze(s,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),Wt.showMenuPanel.call(t,"home",!0))},!1),Ze(o,"click",function(){Wt.showMenuPanel.call(t,"home",!1)}),s.appendChild(o),s.appendChild(at("div",{role:"menu"})),c.appendChild(s),t.elements.settings.buttons[n]=i,t.elements.settings.panels[n]=s}),l.appendChild(c),o.appendChild(l),n.appendChild(o),this.elements.settings.popup=l,this.elements.settings.menu=o}if(this.config.controls.includes("pip")&&St.pip&&n.appendChild(Wt.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&St.airplay&&n.appendChild(Wt.createButton.call(this,"airplay")),this.config.controls.includes("download")){var h={element:"a",href:this.download,target:"_blank"},p=this.config.urls.download;!$e.url(p)&&this.isEmbed&&Ot(h,{icon:"logo-".concat(this.provider),label:this.provider}),n.appendChild(Wt.createButton.call(this,"download",h))}return this.config.controls.includes("fullscreen")&&n.appendChild(Wt.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(Wt.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&Wt.setQualityMenu.call(this,xt.getQualityOptions.call(this)),Wt.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=Wt.getIconUrl.call(this);t.cors&&Bt(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;$e.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this,i)),this.config.controls||(this.config.controls=[]),$e.element(this.config.controls)||$e.string(this.config.controls)?n=this.config.controls:(n=Wt.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:Yt.getLabel.call(this)}),r=!1);var a,s=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Be(e,2),i=n[0],r=n[1];t=Nt(t,"{".concat(i,"}"),r)}),t};if(r&&($e.string(this.config.controls)?n=s(n):$e.element(n)&&(n.innerHTML=s(n.innerHTML))),$e.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),$e.element(a)||(a=this.elements.container),a[$e.element(n)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",n),$e.element(this.elements.controls)||Wt.findElements.call(this),!$e.empty(this.elements.buttons)){var o=function(t){var n=e.config.classNames.controlPressed;Object.defineProperty(t,"pressed",{enumerable:!0,get:function(){return pt(t,n)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];ht(t,n,e)}})};Object.values(this.elements.buttons).filter(Boolean).forEach(function(e){$e.array(e)||$e.nodeList(e)?Array.from(e).filter(Boolean).forEach(o):o(e)})}if(Et.isEdge&&_t(a),this.config.tooltips.controls){var l=this.config,c=l.classNames,u=l.selectors,d="".concat(u.controls.wrapper," ").concat(u.labels," .").concat(c.hidden),h=ft.call(this,d);Array.from(h).forEach(function(t){ht(t,e.config.classNames.hidden,!1),ht(t,e.config.classNames.tooltip,!0)})}}};function Kt(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=document.createElement("a");n.href=t,t=n.href}try{return new URL(t)}catch(e){return null}}function Xt(e){var t=new URLSearchParams;return $e.object(e)&&Object.entries(e).forEach(function(e){var n=Be(e,2),i=n[0],r=n[1];t.set(i,r)}),t}var Yt={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!St.textTracks)$e.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Wt.setCaptionsMenu.call(this);else{var e,t;if($e.element(this.elements.captions)||(this.elements.captions=at("div",ut(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,$e.element(e)&&$e.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),Et.isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),n=Kt(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Ht(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){ot(e)})})}var i=At((navigator.languages||[navigator.language||navigator.userLanguage||"en"]).map(function(e){return e.split("-")[0]})),r=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===r)r=Be(i,1)[0];var a=this.storage.get("captions");if($e.boolean(a)||(a=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:a,language:r,languages:i}),this.isHTML5){var s=this.config.captions.update?"addtrack removetrack":"removetrack";Ze.call(this,this.media.textTracks,s,Yt.update.bind(this))}setTimeout(Yt.update.bind(this),0)}},update:function(){var e=this,t=Yt.getTracks.call(this,!0),n=this.captions,i=n.active,r=n.language,a=n.meta,s=n.currentTrackNode,o=Boolean(t.find(function(e){return e.language===r}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!a.get(e)}).forEach(function(t){e.debug.log("Track added",t),a.set(t,{default:"showing"===t.mode}),t.mode="hidden",Ze.call(e,t,"cuechange",function(){return Yt.updateCues.call(e)})}),(o&&this.language!==r||!t.includes(s))&&(Yt.setLanguage.call(this,r),Yt.toggle.call(this,i&&o)),ht(this.elements.container,this.config.classNames.captions.enabled,!$e.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&Wt.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var n=this.captions.toggled,i=this.config.classNames.captions.active,r=$e.nullOrUndefined(e)?!n:e;if(r!==n){if(t||(this.captions.active=r,this.storage.set({captions:r})),!this.language&&r&&!t){var a=Yt.getTracks.call(this),s=Yt.findTrack.call(this,[this.captions.language].concat(qe(this.captions.languages)),!0);return this.captions.language=s.language,void Yt.set.call(this,a.indexOf(s))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=r),ht(this.elements.container,i,r),this.captions.toggled=r,Wt.updateSetting.call(this,"captions"),nt.call(this,this.media,r?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=Yt.getTracks.call(this);if(-1!==e)if($e.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],r=(i||{}).language;this.captions.currentTrackNode=i,Wt.updateSetting.call(this,"captions"),t||(this.captions.language=r,this.storage.set({language:r})),this.isVimeo&&this.embed.enableTextTrack(r),nt.call(this,this.media,"languagechange")}Yt.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&Yt.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else Yt.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if($e.string(e)){var n=e.toLowerCase();this.captions.language=n;var i=Yt.getTracks.call(this),r=Yt.findTrack.call(this,[n]);Yt.set.call(this,i.indexOf(r),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t,n=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=Yt.getTracks.call(this),a=function(e){return Number((n.captions.meta.get(e)||{}).default)},s=Array.from(r).sort(function(e,t){return a(t)-a(e)});return e.every(function(e){return!(t=s.find(function(t){return t.language===e}))}),t||(i?s[0]:void 0)},getCurrentTrack:function(){return Yt.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!$e.track(t)&&St.textTracks&&this.captions.toggled&&(t=Yt.getCurrentTrack.call(this)),$e.track(t)?$e.empty(t.label)?$e.empty(t.language)?Dt("enabled",this.config):e.language.toUpperCase():t.label:Dt("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if($e.element(this.elements.captions))if($e.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=Yt.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(jt)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){lt(this.elements.captions);var r=at("span",ut(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),nt.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},Jt={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!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.5.0-beta.3/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240]},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:"auto",update:!1},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}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",download:"Download",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{download:null,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"},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,download: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","download","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","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"]',download:'[data-plyr="download"]',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",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",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",display:{time:"plyr__time"},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",previewThumbnails:{thumbContainer:"plyr__preview-thumb",thumbContainerShown:"plyr__preview-thumb--is-shown",imageContainer:"plyr__preview-thumb__image-container",timeContainer:"plyr__preview-thumb__time-container",scrubbingContainer:"plyr__preview-scrubbing",scrubbingContainerShown:"plyr__preview-scrubbing--is-shown"}},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:"",tagUrl:""},previewThumbnails:{enabled:!1,src:""},vimeo:{byline:!1,portrait:!1,title:!1,speed:!0,transparent:!1},youtube:{noCookie:!1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1}},$t="picture-in-picture",Gt="inline",Qt={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Zt={audio:"audio",video:"video"};var en=function(){},tn=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Re(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Fe(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):en}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):en}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):en}}]),e}();function nn(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;$e.element(e)&&(e.pressed=this.active),nt.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Et.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if($e.element(e)){var n=ft.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1];Qe.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function rn(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=t?"hidden":"",ht(this.target,this.player.config.classNames.fullscreen.fallback,t),Et.isIos){var n=document.head.querySelector('meta[name="viewport"]'),i="viewport-fit=cover";n||(n=document.createElement("meta")).setAttribute("name","viewport");var r=$e.string(n.content)&&n.content.includes(i);t?(this.cleanupViewport=!r,r||(n.content+=",".concat(i))):this.cleanupViewport&&(n.content=n.content.split(",").filter(function(e){return e.trim()!==i}).join(",")),setTimeout(function(){return _t(e.target)},100)}nn.call(this)}var an=function(){function e(t){var n=this;Re(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},this.forceFallback="force"===t.config.fullscreen.fallback,Ze.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":"".concat(this.prefix,"fullscreenchange"),function(){nn.call(n)}),Ze.call(this.player,this.player.elements.container,"dblclick",function(e){$e.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Fe(e,[{key:"update",value:function(){var t;this.enabled?(t=this.forceFallback?"Fallback (forced)":e.native?"Native":"Fallback",this.player.debug.log("".concat(t," fullscreen enabled"))):this.player.debug.log("Fullscreen not supported and fallback disabled");ht(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Et.isIos&&this.player.config.fullscreen.iosNative?this.target.webkitEnterFullscreen():!e.native||this.forceFallback?rn.call(this,!0):this.prefix?$e.empty(this.prefix)||this.target["".concat(this.prefix,"Request").concat(this.property)]():this.target.requestFullscreen())}},{key:"exit",value:function(){if(this.enabled)if(Et.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(!e.native||this.forceFallback)rn.call(this,!1);else if(this.prefix){if(!$e.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document["".concat(this.prefix).concat(t).concat(this.property)]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"usingNative",get:function(){return e.native&&!this.forceFallback}},{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.forceFallback?pt(this.target,this.player.config.classNames.fullscreen.fallback):(this.prefix?document["".concat(this.prefix).concat(this.property,"Element")]:document.fullscreenElement)===this.target)}},{key:"target",get:function(){return Et.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($e.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!$e.function(document["".concat(t,"ExitFullscreen")])&&!$e.function(document["".concat(t,"CancelFullScreen")]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}();function sn(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,a=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:a,onerror:a,src:e})})}var on={addStyleHook:function(){ht(this.elements.container,this.config.selectors.container.replace(".",""),!0),ht(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 ".concat(this.provider," ").concat(this.type)),void on.toggleNativeControls.call(this,!0);$e.element(this.elements.controls)||(Wt.inject.call(this),this.listeners.controls()),on.toggleNativeControls.call(this),this.isHTML5&&Yt.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,Wt.updateVolume.call(this),Wt.timeUpdate.call(this),on.checkPlaying.call(this),ht(this.elements.container,this.config.classNames.pip.supported,St.pip&&this.isHTML5&&this.isVideo),ht(this.elements.container,this.config.classNames.airplay.supported,St.airplay&&this.isHTML5),ht(this.elements.container,this.config.classNames.isIos,Et.isIos),ht(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){nt.call(e,e.media,"ready")},0),on.setTitle.call(this),this.poster&&on.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&Wt.durationUpdate.call(this)},setTitle:function(){var e=Dt("play",this.config);if($e.string(this.config.title)&&!$e.empty(this.config.title)&&(e+=", ".concat(this.config.title)),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=gt.call(this,"iframe");if(!$e.element(t))return;var n=$e.empty(this.config.title)?"video":this.config.title,i=Dt("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){ht(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):Ze.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return sn(e)}).catch(function(n){throw e===t.poster&&on.togglePoster.call(t,!1),n}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('".concat(e,"')"),backgroundSize:""}),on.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;ht(this.elements.container,this.config.classNames.playing,this.playing),ht(this.elements.container,this.config.classNames.paused,this.paused),ht(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),$e.event(e)&&"timeupdate"===e.type||on.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){ht(t.elements.container,t.config.classNames.loading,t.loading),on.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;if(t&&this.config.hideControls){var n=this.touch&&this.lastSeekTime+2e3>Date.now();this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover||n))}}};function ln(e){var t=e;$e.string(t)||$e.nullOrUndefined(this.embed)||(t=this.embed.ratio),$e.string(t)||(t=this.config.ratio);var n=Be(t.split(":").map(Number),2),i=100/n[0]*n[1];if(this.elements.wrapper.style.paddingBottom="".concat(i,"%"),this.isVimeo&&this.supported.ui){var r=(240-i)/4.8;this.media.style.transform="translateY(-".concat(r,"%)")}return{padding:i,ratio:t}}var cn=function(){function e(t){Re(this,e),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Fe(e,[{key:"handleKey",value:function(e){var t=this.player,n=t.elements,i=e.keyCode?e.keyCode:e.which,r="keydown"===e.type,a=r&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&$e.number(i)){if(r){var s=document.activeElement;if($e.element(s)){var o=t.config.selectors.editable;if(s!==n.inputs.seek&&mt(s,o))return;if(32===e.which&&mt(s,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,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:a||(t.currentTime=t.duration/10*(i-48));break;case 32:case 75:a||t.togglePlay();break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:a||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:a||t.toggleCaptions();break;case 76:t.loop=!t.loop}27===i&&!t.fullscreen.usingNative&&t.fullscreen.active&&t.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){Wt.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player,t=e.elements;e.touch=!0,ht(t.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player,n=t.elements;if(clearTimeout(this.focusTimer),"keydown"!==e.type||9===e.which){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,r=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||r)i=t.config.classNames.tabFocus,ht(ft.call(t,".".concat(i)),i,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;n.container.contains(e)&&ht(document.activeElement,t.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&Qe.call(t,window,"keydown keyup",this.handleKey,e,!1),Qe.call(t,document.body,"click",this.toggleMenu,e),tt.call(t,document.body,"touchstart",this.firstTouch),Qe.call(t,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player,t=e.config,n=e.elements,i=e.timers;!t.keyboard.global&&t.keyboard.focused&&Ze.call(e,n.container,"keydown keyup",this.handleKey,!1),Ze.call(e,n.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var r=n.controls;r&&"enterfullscreen"===t.type&&(r.pressed=!1,r.hover=!1);var a=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(on.toggleControls.call(e,!0),a=e.touch?3e3:2e3),clearTimeout(i.controls),i.controls=setTimeout(function(){return on.toggleControls.call(e,!1)},a)});var r=function(t){if(!t)return ln.call(e);var i=n.container.getBoundingClientRect(),r=i.width,a=i.height;return ln.call(e,"".concat(r,":").concat(a))},a=function(){window.clearTimeout(i.resized),i.resized=window.setTimeout(r,50)};Ze.call(e,n.container,"enterfullscreen exitfullscreen",function(t){var i=e.fullscreen,s=i.target,o=i.usingNative;if(e.isEmbed&&s===n.container){var l="enterfullscreen"===t.type,c=r(l);c.padding;!function(t,n,i){if(e.isVimeo){var r=e.elements.wrapper.firstChild,a=Be(t.split(":").map(Number),2)[1],s=Be(e.embed.ratio.split(":").map(Number),2),o=s[0],l=s[1];r.style.maxWidth=i?"".concat(a/l*o,"px"):null,r.style.margin=i?"0 auto":null}}(c.ratio,0,l),o||(l?Ze.call(e,window,"resize",a):et.call(e,window,"resize",a))}})}},{key:"media",value:function(){var e=this,t=this.player,n=t.elements;if(Ze.call(t,t.media,"timeupdate seeking seeked",function(e){return Wt.timeUpdate.call(t,e)}),Ze.call(t,t.media,"durationchange loadeddata loadedmetadata",function(e){return Wt.durationUpdate.call(t,e)}),Ze.call(t,t.media,"canplay loadeddata",function(){dt(n.volume,!t.hasAudio),dt(n.buttons.mute,!t.hasAudio)}),Ze.call(t,t.media,"ended",function(){t.isHTML5&&t.isVideo&&t.config.resetOnEnd&&t.restart()}),Ze.call(t,t.media,"progress playing seeking seeked",function(e){return Wt.updateProgress.call(t,e)}),Ze.call(t,t.media,"volumechange",function(e){return Wt.updateVolume.call(t,e)}),Ze.call(t,t.media,"playing play pause ended emptied timeupdate",function(e){return on.checkPlaying.call(t,e)}),Ze.call(t,t.media,"waiting canplay seeked playing",function(e){return on.checkLoading.call(t,e)}),t.supported.ui&&t.config.clickToPlay&&!t.isAudio){var i=gt.call(t,".".concat(t.config.classNames.video));if(!$e.element(i))return;Ze.call(t,n.container,"click",function(r){([n.container,i].includes(r.target)||i.contains(r.target))&&(t.touch&&t.config.hideControls||(t.ended?(e.proxy(r,t.restart,"restart"),e.proxy(r,t.play,"play")):e.proxy(r,t.togglePlay,"play")))})}t.supported.ui&&t.config.disableContextMenu&&Ze.call(t,n.wrapper,"contextmenu",function(e){e.preventDefault()},!1),Ze.call(t,t.media,"volumechange",function(){t.storage.set({volume:t.volume,muted:t.muted})}),Ze.call(t,t.media,"ratechange",function(){Wt.updateSetting.call(t,"speed"),t.storage.set({speed:t.speed})}),Ze.call(t,t.media,"qualitychange",function(e){Wt.updateSetting.call(t,"quality",null,e.detail.quality)}),Ze.call(t,t.media,"ready qualitychange",function(){Wt.setDownloadLink.call(t)});var r=t.config.events.concat(["keyup","keydown"]).join(" ");Ze.call(t,t.media,r,function(e){var i=e.detail,r=void 0===i?{}:i;"error"===e.type&&(r=t.media.error),nt.call(t,n.container,e.type,!0,r)})}},{key:"proxy",value:function(e,t,n){var i=this.player,r=i.config.listeners[n],a=!0;$e.function(r)&&(a=r.call(i,e)),a&&$e.function(t)&&t.call(i,e)}},{key:"bind",value:function(e,t,n,i){var r=this,a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=this.player,o=s.config.listeners[i],l=$e.function(o);Ze.call(s,e,t,function(e){return r.proxy(e,n,i)},a&&!l)}},{key:"controls",value:function(){var e=this,t=this.player,n=t.elements,i=Et.isIE?"change":"input";if(n.buttons.play&&Array.from(n.buttons.play).forEach(function(n){e.bind(n,"click",t.togglePlay,"play")}),this.bind(n.buttons.restart,"click",t.restart,"restart"),this.bind(n.buttons.rewind,"click",t.rewind,"rewind"),this.bind(n.buttons.fastForward,"click",t.forward,"fastForward"),this.bind(n.buttons.mute,"click",function(){t.muted=!t.muted},"mute"),this.bind(n.buttons.captions,"click",function(){return t.toggleCaptions()}),this.bind(n.buttons.download,"click",function(){nt.call(t,t.media,"download")},"download"),this.bind(n.buttons.fullscreen,"click",function(){t.fullscreen.toggle()},"fullscreen"),this.bind(n.buttons.pip,"click",function(){t.pip="toggle"},"pip"),this.bind(n.buttons.airplay,"click",t.airplay,"airplay"),this.bind(n.buttons.settings,"click",function(e){e.stopPropagation(),Wt.toggleMenu.call(t,e)}),this.bind(n.buttons.settings,"keyup",function(e){var n=e.which;[13,32].includes(n)&&(13!==n?(e.preventDefault(),e.stopPropagation(),Wt.toggleMenu.call(t,e)):Wt.focusFirstMenuItem.call(t,null,!0))},null,!1),this.bind(n.settings.menu,"keydown",function(e){27===e.which&&Wt.toggleMenu.call(t,e)}),this.bind(n.inputs.seek,"mousedown mousemove",function(e){var t=n.progress.getBoundingClientRect(),i=100/t.width*(e.pageX-t.left);e.currentTarget.setAttribute("seek-value",i)}),this.bind(n.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(e){var n=e.currentTarget,i=e.keyCode?e.keyCode:e.which;if(!$e.keyboardEvent(e)||39===i||37===i){t.lastSeekTime=Date.now();var r=n.hasAttribute("play-on-seeked"),a=["mouseup","touchend","keyup"].includes(e.type);r&&a?(n.removeAttribute("play-on-seeked"),t.play()):!a&&t.playing&&(n.setAttribute("play-on-seeked",""),t.pause())}}),Et.isIos){var r=ft.call(t,'input[type="range"]');Array.from(r).forEach(function(t){return e.bind(t,i,function(e){return _t(e.target)})})}this.bind(n.inputs.seek,i,function(e){var n=e.currentTarget,i=n.getAttribute("seek-value");$e.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),t.currentTime=i/n.max*t.duration},"seek"),this.bind(n.progress,"mouseenter mouseleave mousemove",function(e){return Wt.updateSeekTooltip.call(t,e)}),this.bind(n.progress,"mousemove touchmove",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.startMove(e)}),this.bind(n.progress,"mouseleave click",function(){var e=t.previewThumbnails;e&&e.loaded&&e.endMove(!1,!0)}),this.bind(n.progress,"mousedown touchstart",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.startScrubbing(e)}),this.bind(n.progress,"mouseup touchend",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.endScrubbing(e)}),Et.isWebkit&&Array.from(ft.call(t,'input[type="range"]')).forEach(function(n){e.bind(n,"input",function(e){return Wt.updateRangeFill.call(t,e.target)})}),t.config.toggleInvert&&!$e.element(n.display.duration)&&this.bind(n.display.currentTime,"click",function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,Wt.timeUpdate.call(t))}),this.bind(n.inputs.volume,i,function(e){t.volume=e.target.value},"volume"),this.bind(n.controls,"mouseenter mouseleave",function(e){n.controls.hover=!t.touch&&"mouseenter"===e.type}),this.bind(n.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){n.controls.pressed=["mousedown","touchstart"].includes(e.type)}),this.bind(n.controls,"focusin",function(){var n=t.config,i=t.elements,r=t.timers;ht(i.controls,n.classNames.noTransition,!0),on.toggleControls.call(t,!0),setTimeout(function(){ht(i.controls,n.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(r.controls),r.controls=setTimeout(function(){return on.toggleControls.call(t,!1)},a)}),this.bind(n.inputs.volume,"wheel",function(e){var n=e.webkitDirectionInvertedFromDevice,i=Be([e.deltaX,-e.deltaY].map(function(e){return n?-e:e}),2),r=i[0],a=i[1],s=Math.sign(Math.abs(r)>Math.abs(a)?r:a);t.increaseVolume(s/50);var o=t.media.volume;(1===s&&o<1||-1===s&&o>0)&&e.preventDefault()},"volume",!1)}}]),e}(),un=t(function(e,t){e.exports=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 a(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function s(t,n,i,r){var a,o,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(a=!0,(o=l.createElement("link")).rel="stylesheet",o.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(o=l.createElement("img")).src=h:((o=l.createElement("script")).src=t,o.async=void 0===c||c),o.onload=o.onerror=o.onbeforeload=function(e){var l=e.type[0];if(a&&"hideFocus"in o)try{o.sheet.cssText.length||(l="e")}catch(e){18!=e.code&&(l="e")}if("e"==l&&(r+=1)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=zt(Math.max(e.manager.getRemainingTime(),0)),n="".concat(Dt("advertisement",e.player.config)," - ").concat(t);e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this;if(this.enabled){var n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),$e.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e1?n-1:0),r=1;r ?)([0-9]{2}):([0-9]{2}):([0-9]{2}).([0-9]{2,3})/);a&&(t.startTime=60*Number(a[1])*60+60*Number(a[2])+Number(a[3])+Number("0.".concat(a[4])),t.endTime=60*Number(a[6])*60+60*Number(a[7])+Number(a[8])+Number("0.".concat(a[9])))}}),t.text&&a.push(t)}),a),height:null,urlPrefix:""};s.frames[0].text.startsWith("/")||(s.urlPrefix=e.substring(0,e.lastIndexOf("/")+1));var o=new Image;o.onload=function(){s.height=o.naturalHeight,s.width=o.naturalWidth,t.thumbnails.push(s),n()},o.src=s.urlPrefix+s.frames[0].text})})}},{key:"startMove",value:function(e){if(this.loaded&&$e.event(e)&&["touchmove","mousemove"].includes(e.type)&&this.player.media.duration){if("touchmove"===e.type)this.seekTime=this.player.media.duration*(this.player.elements.inputs.seek.value/100);else{var t=this.player.elements.progress.getBoundingClientRect(),n=100/t.width*(e.pageX-t.left);this.seekTime=this.player.media.duration*(n/100),this.seekTime<0&&(this.seekTime=0),this.seekTime>this.player.media.duration-1&&(this.seekTime=this.player.media.duration-1),this.mousePosX=e.pageX,this.elements.thumb.time.innerText=zt(this.seekTime)}this.showImageAtCurrentTime()}}},{key:"endMove",value:function(){this.toggleThumbContainer(!1,!0)}},{key:"startScrubbing",value:function(e){!1!==e.button&&0!==e.button||(this.mouseDown=!0,this.player.media.duration&&(this.toggleScrubbingContainer(!0),this.toggleThumbContainer(!1,!0),this.showImageAtCurrentTime()))}},{key:"endScrubbing",value:function(){var e=this;this.mouseDown=!1,Math.ceil(this.lastTime)===Math.ceil(this.player.media.currentTime)?this.toggleScrubbingContainer(!1):tt.call(this.player,this.player.media,"timeupdate",function(){e.mouseDown||e.toggleScrubbingContainer(!1)})}},{key:"listeners",value:function(){var e=this;this.player.on("play",function(){e.toggleThumbContainer(!1,!0)}),this.player.on("seeked",function(){e.toggleThumbContainer(!1)}),this.player.on("timeupdate",function(){e.lastTime=e.player.media.currentTime})}},{key:"render",value:function(){this.elements.thumb.container=at("div",{class:this.player.config.classNames.previewThumbnails.thumbContainer}),this.elements.thumb.imageContainer=at("div",{class:this.player.config.classNames.previewThumbnails.imageContainer}),this.elements.thumb.container.appendChild(this.elements.thumb.imageContainer);var e=at("div",{class:this.player.config.classNames.previewThumbnails.timeContainer});this.elements.thumb.time=at("span",{},"00:00"),e.appendChild(this.elements.thumb.time),this.elements.thumb.container.appendChild(e),this.player.elements.progress.appendChild(this.elements.thumb.container),this.elements.scrubbing.container=at("div",{class:this.player.config.classNames.previewThumbnails.scrubbingContainer}),this.player.elements.wrapper.appendChild(this.elements.scrubbing.container)}},{key:"showImageAtCurrentTime",value:function(){var e=this;this.mouseDown?this.setScrubbingContainerSize():(this.toggleThumbContainer(!0),this.setThumbContainerSizeAndPos());var t=this.thumbnails[0].frames.findIndex(function(t){return e.seekTime>=t.startTime&&e.seekTime<=t.endTime}),n=t>=0,i=0;this.toggleThumbContainer(n),n&&(this.thumbnails.forEach(function(n,r){e.loadedImages.includes(n.frames[t].text)&&(i=r)}),t!==this.showingThumb&&(this.showingThumb=t,this.loadImage(i)))}},{key:"loadImage",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=this.showingThumb,i=this.thumbnails[t],r=i.urlPrefix,a=i.frames[n],s=i.frames[n].text,o=r+s;if(this.currentImageElement&&this.currentImageElement.dataset.filename===s)this.showImage(this.currentImageElement,a,t,n,s,!1),this.currentImageElement.dataset.index=n,this.removeOldImages(this.currentImageElement);else{this.loadingImage&&this.usingSprites&&(this.loadingImage.onload=null);var l=new Image;l.src=o,l.dataset.index=n,l.dataset.filename=s,this.showingThumbFilename=s,this.player.debug.log("Loading image: ".concat(o)),l.onload=function(){return e.showImage(l,a,t,n,s,!0)},this.loadingImage=l,this.removeOldImages(l)}}},{key:"showImage",value:function(e,t,n,i,r){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];this.player.debug.log("Showing thumb: ".concat(r,". num: ").concat(i,". qual: ").concat(n,". newimg: ").concat(a)),this.setImageSizeAndOffset(e,t),a&&(this.currentImageContainer.appendChild(e),this.currentImageElement=e,this.loadedImages.includes(r)||this.loadedImages.push(r)),this.preloadNearby(i,!0).then(this.preloadNearby(i,!1)).then(this.getHigherQuality(n,e,t,r))}},{key:"removeOldImages",value:function(e){var t=this;Array.from(this.currentImageContainer.children).forEach(function(n){if("img"===n.tagName.toLowerCase()){var i=t.usingSprites?500:1e3;if(n.dataset.index!==e.dataset.index&&!n.dataset.deleting){n.dataset.deleting=!0;var r=t.currentImageContainer;setTimeout(function(){r.removeChild(n),t.player.debug.log("Removing thumb: ".concat(n.dataset.filename))},i)}}})}},{key:"preloadNearby",value:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return new Promise(function(i){setTimeout(function(){var r=t.thumbnails[0].frames[e].text;if(t.showingThumbFilename===r){var a;a=n?t.thumbnails[0].frames.slice(e):t.thumbnails[0].frames.slice(0,e).reverse();var s=!1;a.forEach(function(e){var n=e.text;if(n!==r&&!t.loadedImages.includes(n)){s=!0,t.player.debug.log("Preloading thumb filename: ".concat(n));var a=t.thumbnails[0].urlPrefix+n,o=new Image;o.src=a,o.onload=function(){t.player.debug.log("Preloaded thumb filename: ".concat(n)),t.loadedImages.includes(n)||t.loadedImages.push(n),i()}}}),s||i()}},300)})}},{key:"getHigherQuality",value:function(e,t,n,i){var r=this;if(e0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.player.config.classNames.previewThumbnails.thumbContainerShown;this.elements.thumb.container.classList.toggle(n,e),!e&&t&&(this.showingThumb=null,this.showingThumbFilename=null)}},{key:"toggleScrubbingContainer",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.player.config.classNames.previewThumbnails.scrubbingContainerShown;this.elements.scrubbing.container.classList.toggle(t,e),e||(this.showingThumb=null,this.showingThumbFilename=null)}},{key:"determineContainerAutoSizing",value:function(){this.elements.thumb.imageContainer.clientHeight>20&&(this.sizeSpecifiedInCSS=!0)}},{key:"setThumbContainerSizeAndPos",value:function(){if(!this.sizeSpecifiedInCSS){var e=Math.floor(this.thumbContainerHeight*this.thumbAspectRatio);this.elements.thumb.imageContainer.style.height="".concat(this.thumbContainerHeight,"px"),this.elements.thumb.imageContainer.style.width="".concat(e,"px")}this.setThumbContainerPos()}},{key:"setThumbContainerPos",value:function(){var e=this.player.elements.progress.getBoundingClientRect(),t=this.player.elements.container.getBoundingClientRect(),n=this.elements.thumb.container,i=t.left-e.left+10,r=t.right-e.left-n.clientWidth-10,a=this.mousePosX-e.left-n.clientWidth/2;ar&&(a=r),n.style.left="".concat(a,"px")}},{key:"setScrubbingContainerSize",value:function(){this.elements.scrubbing.container.style.width="".concat(this.player.media.clientWidth,"px"),this.elements.scrubbing.container.style.height="".concat(this.player.media.clientWidth/this.thumbAspectRatio,"px")}},{key:"setImageSizeAndOffset",value:function(e,t){if(this.usingSprites){var n=this.thumbContainerHeight/t.h;e.style.height="".concat(Math.floor(e.naturalHeight*n),"px"),e.style.width="".concat(Math.floor(e.naturalWidth*n),"px"),e.style.left="-".concat(t.x*n,"px"),e.style.top="-".concat(t.y*n,"px")}}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.previewThumbnails.enabled}},{key:"currentImageContainer",get:function(){return this.mouseDown?this.elements.scrubbing.container:this.elements.thumb.imageContainer}},{key:"usingSprites",get:function(){return Object.keys(this.thumbnails[0].frames[0]).includes("w")}},{key:"thumbAspectRatio",get:function(){return this.usingSprites?this.thumbnails[0].frames[0].w/this.thumbnails[0].frames[0].h:this.thumbnails[0].width/this.thumbnails[0].height}},{key:"thumbContainerHeight",get:function(){return this.mouseDown?Math.floor(this.player.media.clientWidth/this.thumbAspectRatio):Math.floor(this.player.media.clientWidth/this.thumbAspectRatio/4)}},{key:"currentImageElement",get:function(){return this.mouseDown?this.currentScrubbingImageElement:this.currentThumbnailImageElement},set:function(e){this.mouseDown?this.currentScrubbingImageElement=e:this.currentThumbnailImageElement=e}}]),e}(),_n={insertElements:function(e,t){var n=this;$e.string(t)?st(e,this.media,{src:t}):$e.array(t)&&t.forEach(function(t){st(e,n.media,t)})},change:function(e){var t=this;Pt(e,"sources.length")?(xt.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],ot(t.media),t.media=null,$e.element(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,r=Be(n,1)[0],a=r.provider,s=void 0===a?Qt.html5:a,o=r.src,l="html5"===s?i:"div",c="html5"===s?{}:{src:o};Object.assign(t,{provider:s,type:i,supported:St.check(i,s,t.config.playsinline),media:at(l,c)}),t.elements.container.appendChild(t.media),$e.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),$e.empty(e.poster)||(t.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","")),on.addStyleHook.call(t),t.isHTML5&&_n.insertElements.call(t,"source",n),t.config.title=e.title,bn.setup.call(t),t.isHTML5&&Object.keys(e).includes("tracks")&&_n.insertElements.call(t,"track",e.tracks),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&on.build.call(t),t.isHTML5&&t.media.load(),t.previewThumbnails&&t.previewThumbnails.load(),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},Tn=function(){function e(t,n){var i=this;if(Re(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=St.touch,this.media=t,$e.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||$e.nodeList(this.media)||$e.array(this.media))&&(this.media=this.media[0]),this.config=Ot({},Jt,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new tn(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",St),!$e.nullOrUndefined(this.media)&&$e.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(St.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var a=this.media.tagName.toLowerCase(),s=null,o=null;switch(a){case"div":if(s=this.media.querySelector("iframe"),$e.element(s)){if(o=Kt(s.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtube-nocookie\.com|youtu\.?be)\/.+$/.test(e)?Qt.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?Qt.vimeo:null}(o.toString()),this.elements.container=this.media,this.media=s,this.elements.container.className="",o.search.length){var l=["1","true"];l.includes(o.searchParams.get("autoplay"))&&(this.config.autoplay=!0),l.includes(o.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?(this.config.playsinline=l.includes(o.searchParams.get("playsinline")),this.config.youtube.hl=o.searchParams.get("hl")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if($e.empty(this.provider)||!Object.keys(Qt).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Zt.video;break;case"video":case"audio":this.type=a,this.provider=Qt.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-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=St.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new cn(this),this.storage=new Ft(this),this.media.plyr=this,$e.element(this.elements.container)||(this.elements.container=at("div",{tabindex:0}),it(this.media,this.elements.container)),on.addStyleHook.call(this),bn.setup.call(this),this.config.debug&&Ze.call(this,this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: ".concat(e.type))}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&on.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new an(this),this.config.ads.enabled&&(this.ads=new kn(this)),this.config.autoplay&&this.play(),this.lastSeekTime=0,this.config.previewThumbnails.enabled&&(this.previewThumbnails=new wn(this))):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 Fe(e,[{key:"play",value:function(){var e=this;return $e.function(this.media.play)?(this.ads&&this.ads.enabled&&this.ads.managerPromise.then(function(){return e.ads.play()}).catch(function(){return e.media.play()}),this.media.play()):null}},{key:"pause",value:function(){this.playing&&$e.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){($e.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):$e.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-($e.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+($e.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+($e.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){Yt.toggle.call(this,e,!1)}},{key:"airplay",value:function(){St.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=pt(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=ht(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!$e.empty(this.config.settings)&&Wt.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";nt.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){Ze.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){tt.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){et(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&&(ot(t.elements.buttons.play),ot(t.elements.captions),ot(t.elements.controls),ot(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),$e.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,n=e.type,i=e.callback,r=e.options;t.removeEventListener(n,i,r)}),this.eventListeners=[])}.call(t),ct(t.elements.original,t.elements.container),nt.call(t,t.elements.original,"destroyed",!0),$e.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),on.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&$e.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return St.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===Qt.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===Qt.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===Qt.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===Zt.video)}},{key:"isAudio",get:function(){return Boolean(this.type===Zt.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){if(this.duration){var t=$e.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to ".concat(this.currentTime," seconds"))}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return $e.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||{}).duration,n=$e.number(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;$e.string(t)&&(t=Number(t)),$e.number(t)||(t=this.storage.get("volume")),$e.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!$e.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;$e.boolean(t)||(t=this.storage.get("muted")),$e.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;$e.number(e)&&(t=e),$e.number(t)||(t=this.storage.get("speed")),$e.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 (".concat(t,")"))},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!$e.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find($e.number),r=!0;if(!n.includes(i)){var a=function(e,t){return $e.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)1&&void 0!==arguments[1]?arguments[1]:{},i=null;return $e.string(t)?i=Array.from(document.querySelectorAll(t)):$e.nodeList(t)?i=Array.from(t):$e.array(t)&&(i=t.filter($e.element)),$e.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();Tn.defaults=(fn=Jt,JSON.parse(JSON.stringify(fn))),gn=window.location.host,vn="plyr.io"===gn,document.addEventListener("DOMContentLoaded",function(){Ie.context(function(){var e=document.getElementById("container");window.shr&&window.shr.setup({count:{classname:"button__count"}}),document.addEventListener("focusout",function(t){t.target.classList&&!e.contains(t.target)&&t.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(t){9===t.keyCode&&setTimeout(function(){var t=document.activeElement;t&&t.classList&&!e.contains(t)&&t.classList.add("tab-focus")},10)});var t="https://pubads.g.doubleclick.net/gampad/live/ads?sz=640x360&iu=/21736521837/ovo/web&impl=s&gdfp_req=1&env=vp&output=vast&cust_params=usergroup%3D".concat("annon","%26content-type%3D").concat("on-demand","&cmsid=").concat(2490180,"&vid=").concat(3788),n=new Tn("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0,tagUrl:t},previewThumbnails:{enabled:!0,src:["https://cdn.plyr.io/static/demo/thumbs/100p.vtt","https://cdn.plyr.io/static/demo/thumbs/240p.vtt"]}});window.player=n;var i=document.querySelectorAll("[data-source]"),r={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},a=window.location.hash.replace("#",""),s=window.history&&window.history.pushState;function o(e,t,n){e&&e.classList[n?"add":"remove"](t)}function l(e,t){if(e in r&&(t||e!==a)&&(a.length||e!==r.video)){switch(e){case r.video:n.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",type:"video/mp4",size:576},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4",type:"video/mp4",size:720},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4",type:"video/mp4",size:1080},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4",type:"video/mp4",size:1440}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case r.audio:n.source={type:"audio",title:"Kishi Bashi – “It All Began With A Burst”",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case r.youtube:n.source={type:"video",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case r.vimeo:n.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}a=e,Array.from(i).forEach(function(e){return o(e.parentElement,"active",!1)}),o(document.querySelector('[data-source="'.concat(e,'"]')),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--".concat(e)).removeAttribute("hidden")}}if(Array.from(i).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");l(t),s&&window.history.pushState({type:t},"","#".concat(t))})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&l(e.state.type)}),s){var c=!a.length;c&&(a=r.video),a in r&&window.history.replaceState({type:a},"",c?"":"#".concat(a)),a!==r.video&&l(a,!0)}})}),vn&&Ie.config("https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555").install()}(); +"object"==typeof navigator&&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,t){function n(e,t){for(var n=0;n0){var o=n(i,this);~o?i.splice(o+1):i.push(this),~o?r.splice(o,1/0,a):r.push(a),~n(i,s)&&(s=t.call(this,a,s))}else i.push(s);return null==e?s instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}(s):s:e.call(this,a,s)}}(e.exports=function(e,t,n,r){return JSON.stringify(e,i(t,r),n)}).getSerialize=i}),i=(n.getSerialize,"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{});function r(e){return void 0===e}function a(e){return"[object Object]"===Object.prototype.toString.call(e)}function s(e){return"[object String]"===Object.prototype.toString.call(e)}function o(e){return"[object Array]"===Object.prototype.toString.call(e)}function l(){if(!("fetch"in i))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function c(e,t){var n,i;if(r(e.length))for(n in e)d(e,n)&&t.call(null,n,e[n]);else if(i=e.length)for(n=0;n ".length;e&&i++<5&&!("html"===(t=p(e))||i>1&&r+n.length*a+t.length>=80);)n.push(t),r+=t.length,e=e.parentNode;return n.reverse().join(" > ")},htmlElementAsString:p,isSameException:function(e,t){return!m(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(n=e.stacktrace,i=t.stacktrace,(!r(n)||!r(i))&&f(e.stacktrace,t.stacktrace)));var n,i},isSameStacktrace:f,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),n=t[6]||"",i=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+n+i}},fill:function(e,t,n,i){if(null!=e){var r=e[t];e[t]=n(r),e[t].__raven__=!0,e[t].__orig__=r,i&&i.push([e,t,r])}},safeJoin:function(e,t){if(!o(e))return"";for(var n=[],i=0;ir?e(t,i-1):s},serializeKeysForMessage:function(e,t){if("number"==typeof e||"string"==typeof e)return e.toString();if(!Array.isArray(e))return"";if(0===(e=e.filter(function(e){return"string"==typeof e})).length)return"[object has no keys]";if(t="number"!=typeof t?y:t,e[0].length>=t)return e[0];for(var n=e.length;n>0;n--){var i=e.slice(0,n).join(", ");if(!(i.length>t))return n===e.length?i:i+"…"}return""},sanitize:function(e,t){if(!o(t)||o(t)&&0===t.length)return e;var i,r=h(t),s="********";try{i=JSON.parse(n(e))}catch(t){return e}return function e(t){return o(t)?t.map(function(t){return e(t)}):a(t)?Object.keys(t).reduce(function(n,i){return r.test(i)?n[i]=s:n[i]=e(t[i]),n},{}):t}(i)}},_={collectWindowErrors:!0,debug:!1},T="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},E=[].slice,C="?",S=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function x(){return"undefined"==typeof document||null==document.location?"":document.location.href}_.report=function(){var e,t,n=[],i=null,r=null,a=null;function s(e,t){var i=null;if(!t||_.collectWindowErrors){for(var r in n)if(n.hasOwnProperty(r))try{n[r].apply(null,[e].concat(E.call(arguments,2)))}catch(e){i=e}if(i)throw i}}function o(t,n,i,r,o){var c=w.isErrorEvent(o)?o.error:o,u=w.isErrorEvent(t)?t.message:t;if(a)_.computeStackTrace.augmentStackTraceWithInitialElement(a,n,i,u),l();else if(c&&w.isError(c))s(_.computeStackTrace(c),!0);else{var d,h={url:n,line:i,column:r},p=void 0;if("[object String]"==={}.toString.call(u))(d=u.match(S))&&(p=d[1],u=d[2]);h.func=C,s({name:p,message:u,url:x(),stack:[h]},!0)}return!!e&&e.apply(this,arguments)}function l(){var e=a,t=i;i=null,a=null,r=null,s.apply(null,[e,!1].concat(t))}function c(e,t){var n=E.call(arguments,1);if(a){if(r===e)return;l()}var s=_.computeStackTrace(e);if(a=s,r=e,i=n,setTimeout(function(){r===e&&l()},s.incomplete?2e3:0),!1!==t)throw e}return c.subscribe=function(i){t||(e=T.onerror,T.onerror=o,t=!0),n.push(i)},c.unsubscribe=function(e){for(var t=n.length-1;t>=0;--t)n[t]===e&&n.splice(t,1)},c.uninstall=function(){t&&(T.onerror=e,t=!1,e=void 0),n=[]},c}(),_.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,n,i,r=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,a=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,o=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,c=e.stack.split("\n"),u=[],d=(/^(.*) is undefined$/.exec(e.message),0),h=c.length;d eval")>-1&&(t=o.exec(n[3]))?(n[3]=t[1],n[4]=t[2],n[5]=null):0!==d||n[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),i={url:n[3],func:n[1]||C,args:n[2]?n[2].split(","):[],line:n[4]?+n[4]:null,column:n[5]?+n[5]:null}}if(!i.func&&i.line&&(i.func=C),i.url&&"blob:"===i.url.substr(0,5)){var m=new XMLHttpRequest;if(m.open("GET",i.url,!1),m.send(null),200===m.status){var f=m.responseText||"",g=(f=f.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(g){var v=g[1];"~"===v.charAt(0)&&(v=("undefined"==typeof document||null==document.location?"":document.location.origin?document.location.origin:document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:""))+v.slice(1)),i.url=v.slice(0,-4)}}}u.push(i)}return u.length?{name:e.name,message:e.message,url:x(),stack:u}:null}}function t(e,t,n,i){var r={url:t,line:n};if(r.url&&r.line){if(e.incomplete=!1,r.func||(r.func=C),e.stack.length>0&&e.stack[0].url===r.url){if(e.stack[0].line===r.line)return!1;if(!e.stack[0].line&&e.stack[0].func===r.func)return e.stack[0].line=r.line,!1}return e.stack.unshift(r),e.partial=!0,!0}return e.incomplete=!0,!1}function n(e,r){for(var a,s,o=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],c={},u=!1,d=n.caller;d&&!u;d=d.caller)if(d!==i&&d!==_.report){if(s={url:null,func:C,line:null,column:null},d.name?s.func=d.name:(a=o.exec(d.toString()))&&(s.func=a[1]),void 0===s.func)try{s.func=a.input.substring(0,a.input.indexOf("{"))}catch(e){}c[""+d]?u=!0:c[""+d]=!0,l.push(s)}r&&l.splice(0,r);var h={name:e.name,message:e.message,url:x(),stack:l};return t(h,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),h}function i(t,i){var r=null;i=null==i?0:+i;try{if(r=e(t))return r}catch(e){if(_.debug)throw e}try{if(r=n(t,i+1))return r}catch(e){if(_.debug)throw e}return{name:t.name,message:t.message,url:x()}}return i.augmentStackTraceWithInitialElement=t,i.computeStackTraceFromStackProp=e,i}();var A=_;function P(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function O(e,t,n,i,r,a){return P((s=P(P(t,e),P(i,a)))<<(o=r)|s>>>32-o,n);var s,o}function M(e,t,n,i,r,a,s){return O(t&n|~t&i,e,t,r,a,s)}function N(e,t,n,i,r,a,s){return O(t&i|n&~i,e,t,r,a,s)}function L(e,t,n,i,r,a,s){return O(t^n^i,e,t,r,a,s)}function I(e,t,n,i,r,a,s){return O(n^(t|~i),e,t,r,a,s)}function j(e,t){var n,i,r,a,s;e[t>>5]|=128<>>9<<4)]=t;var o=1732584193,l=-271733879,c=-1732584194,u=271733878;for(n=0;n>5]>>>t%32&255);return n}function D(e){var t,n=[];for(n[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<>>4&15)+"0123456789abcdef".charAt(15&t);return i}function H(e){return unescape(encodeURIComponent(e))}function B(e){return function(e){return R(j(D(e),8*e.length))}(H(e))}function q(e,t){return function(e,t){var n,i,r=D(e),a=[],s=[];for(a[15]=s[15]=void 0,r.length>16&&(r=j(r,8*e.length)),n=0;n<16;n+=1)a[n]=909522486^r[n],s[n]=1549556828^r[n];return i=j(a.concat(D(t)),512+8*t.length),R(j(s.concat(i),640))}(H(e),H(t))}var U=function(e,t,n){return t?n?q(t,e):F(q(t,e)):n?B(e):F(B(e))};function V(e){this.name="RavenConfigError",this.message=e}V.prototype=new Error,V.prototype.constructor=V;var z=V,W=function(e,t,n){var i=e[t],r=e;if(t in e){var a="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),s=w.safeJoin(e," "),o={level:a,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(s="Assertion failed: "+(w.safeJoin(e.slice(1)," ")||"console.assert"),o.extra.arguments=e.slice(1),n&&n(s,o)):n&&n(s,o),i&&Function.prototype.apply.call(i,r,e)}}},K=w.isErrorEvent,X=w.isDOMError,Y=w.isDOMException,J=w.isError,$=w.isObject,G=w.isPlainObject,Q=w.isUndefined,Z=w.isFunction,ee=w.isString,te=w.isArray,ne=w.isEmptyObject,ie=w.each,re=w.objectMerge,ae=w.truncate,se=w.objectFrozen,oe=w.hasKey,le=w.joinRegExp,ce=w.urlencode,ue=w.uuid4,de=w.htmlTreeAsString,he=w.isSameException,pe=w.isSameStacktrace,me=w.parseUrl,fe=w.fill,ge=w.supportsFetch,ve=w.supportsReferrerPolicy,ye=w.serializeKeysForMessage,be=w.serializeException,ke=w.sanitize,we=W,_e="source protocol user pass host port path".split(" "),Te=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function Ee(){return+new Date}var Ce="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Se=Ce.document,xe=Ce.navigator;function Ae(e,t){return Z(t)?function(n){return t(n,e)}:t}function Pe(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Q(Se),this._hasNavigator=!Q(xe),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:Ce.SENTRY_RELEASE&&Ce.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this._fetchDefaults={method:"POST",referrerPolicy:ve()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Ce.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=Ee(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=Ce.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}Pe.prototype={VERSION:"3.27.0",debug:!1,TraceKit:A,config:function(e,t){var n=this;if(n._globalServer)return this._logDebug("error","Error: Raven has already been configured"),n;if(!e)return n;var i=n._globalOptions;t&&ie(t,function(e,t){"tags"===e||"extra"===e||"user"===e?n._globalContext[e]=t:i[e]=t}),n.setDSN(e),i.ignoreErrors.push(/^Script error\.?$/),i.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),i.ignoreErrors=le(i.ignoreErrors),i.ignoreUrls=!!i.ignoreUrls.length&&le(i.ignoreUrls),i.whitelistUrls=!!i.whitelistUrls.length&&le(i.whitelistUrls),i.includePaths=le(i.includePaths),i.maxBreadcrumbs=Math.max(0,Math.min(i.maxBreadcrumbs||100,100));var r={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},a=i.autoBreadcrumbs;"[object Object]"==={}.toString.call(a)?a=re(r,a):!1!==a&&(a=r),i.autoBreadcrumbs=a;var s={tryCatch:!0},o=i.instrument;return"[object Object]"==={}.toString.call(o)?o=re(s,o):!1!==o&&(o=s),i.instrument=o,A.collectWindowErrors=!!i.collectWindowErrors,n},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(A.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.captureUnhandledRejections&&e._attachPromiseRejectionHandler(),e._patchFunctionToString(),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),n=t.path.lastIndexOf("/"),i=t.path.substr(1,n);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(n+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+i+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,n){return Z(e)&&(n=t||[],t=e,e={}),this.wrap(e,t).apply(this,n)},wrap:function(e,t,n){var i=this;if(Q(t)&&!Z(e))return e;if(Z(e)&&(t=e,e=void 0),!Z(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function r(){var r=[],a=arguments.length,s=!e||e&&!1!==e.deep;for(n&&Z(n)&&n.apply(this,arguments);a--;)r[a]=s?i.wrap(e,arguments[a]):arguments[a];try{return t.apply(this,r)}catch(t){throw i._ignoreNextOnError(),i.captureException(t,e),t}}for(var a in t)oe(t,a)&&(r[a]=t[a]);return r.prototype=t.prototype,t.__raven_wrapper__=r,r.__raven__=!0,r.__orig__=t,r},uninstall:function(){return A.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(e){this._logDebug("debug","Raven caught unhandled promise rejection:",e),this.captureException(e.reason,{mechanism:{type:"onunhandledrejection",handled:!1}})},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),Ce.addEventListener&&Ce.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return Ce.removeEventListener&&Ce.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=re({trimHeadFrames:0},t||{}),K(e)&&e.error)e=e.error;else{if(X(e)||Y(e)){var n=e.name||(X(e)?"DOMError":"DOMException"),i=e.message?n+": "+e.message:n;return this.captureMessage(i,re(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}))}if(J(e))e=e;else{if(!G(e))return this.captureMessage(e,re(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}}this._lastCapturedException=e;try{var r=A.computeStackTrace(e);this._handleStackInfo(r,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var n=Object.keys(t).sort(),i=re(e,{message:"Non-Error exception captured with keys: "+ye(n),fingerprint:[U(n)],extra:e.extra||{}});return i.extra.__serialized__=be(t),i},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var n,i=re({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){n=e}n.name=null;var r=A.computeStackTrace(n),a=te(r.stack)&&r.stack[1];a&&"Raven.captureException"===a.func&&(a=r.stack[2]);var s=a&&a.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(s))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(s))){if(this._globalOptions.stacktrace||t.stacktrace||""===i.message){i.fingerprint=null==i.fingerprint?e:i.fingerprint,(t=re({trimHeadFrames:0},t)).trimHeadFrames+=1;var o=this._prepareFrames(r,t);i.stacktrace={frames:o.reverse()}}return i.fingerprint&&(i.fingerprint=te(i.fingerprint)?i.fingerprint:[i.fingerprint]),this._send(i),this}}},captureBreadcrumb:function(e){var t=re({timestamp:Ee()/1e3},e);if(Z(this._globalOptions.breadcrumbCallback)){var n=this._globalOptions.breadcrumbCallback(t);if($(n)&&!ne(n))t=n;else if(!1===n)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(n(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=Ae(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Ae(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Ae(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=Ce.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(Se){if(!(e=re({eventId:this.lastEventId(),dsn:this._dsn,user:this._globalContext.user||{}},e)).eventId)throw new z("Missing eventId");if(!e.dsn)throw new z("Missing DSN");var t=encodeURIComponent,n=[];for(var i in e)if("user"===i){var r=e.user;r.name&&n.push("name="+t(r.name)),r.email&&n.push("email="+t(r.email))}else n.push(t(i)+"="+t(e[i]));var a=this._getGlobalServer(this._parseDSN(e.dsn)),s=Se.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/?"+n.join("&"),(Se.head||Se.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var n,i;if(this._hasDocument){for(i in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),Se.createEvent?(n=Se.createEvent("HTMLEvents")).initEvent(e,!0,!0):(n=Se.createEventObject()).eventType=e,t)oe(t,i)&&(n[i]=t[i]);if(Se.createEvent)Se.dispatchEvent(n);else try{Se.fireEvent("on"+n.eventType.toLowerCase(),n)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(n){if(t._keypressTimeout=null,t._lastCapturedEvent!==n){var i;t._lastCapturedEvent=n;try{i=de(n.target)}catch(e){i=""}t.captureBreadcrumb({category:"ui."+e,message:i})}}},_keypressEventHandler:function(){var e=this;return function(t){var n;try{n=t.target}catch(e){return}var i=n&&n.tagName;if(i&&("INPUT"===i||"TEXTAREA"===i||n.isContentEditable)){var r=e._keypressTimeout;r||e._breadcrumbEventHandler("input")(t),clearTimeout(r),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var n=me(this._location.href),i=me(t),r=me(e);this._lastHref=t,n.protocol===i.protocol&&n.host===i.host&&(t=i.relative),n.protocol===r.protocol&&n.host===r.host&&(e=r.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_patchFunctionToString:function(){var e=this;e._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?e._originalFunctionToString.apply(this.__orig__,arguments):e._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function n(t){return function(n,i){for(var r=new Array(arguments.length),a=0;a"}}},s)),t.apply?t.apply(this,r):t(r[0],r[1])}}var i=this._globalOptions.autoBreadcrumbs;function r(n){var r=Ce[n]&&Ce[n].prototype;r&&r.hasOwnProperty&&r.hasOwnProperty("addEventListener")&&(fe(r,"addEventListener",function(t){return function(r,a,s,o){try{a&&a.handleEvent&&(a.handleEvent=e.wrap({mechanism:{type:"instrument",data:{target:n,function:"handleEvent",handler:a&&a.name||""}}},a.handleEvent))}catch(e){}var l,c,u;return i&&i.dom&&("EventTarget"===n||"Node"===n)&&(c=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),l=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?c(e):"keypress"===t?u(e):void 0}}),t.call(this,r,e.wrap({mechanism:{type:"instrument",data:{target:n,function:"addEventListener",handler:a&&a.name||""}}},a,l),s,o)}},t),fe(r,"removeEventListener",function(e){return function(t,n,i,r){try{n=n&&(n.__raven_wrapper__?n.__raven_wrapper__:n)}catch(e){}return e.call(this,t,n,i,r)}},t))}fe(Ce,"setTimeout",n,t),fe(Ce,"setInterval",n,t),Ce.requestAnimationFrame&&fe(Ce,"requestAnimationFrame",function(t){return function(n){return t(e.wrap({mechanism:{type:"instrument",data:{function:"requestAnimationFrame",handler:t&&t.name||""}}},n))}},t);for(var a=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],s=0;s"}}},n)})}if(t.xhr&&"XMLHttpRequest"in Ce){var r=Ce.XMLHttpRequest&&Ce.XMLHttpRequest.prototype;fe(r,"open",function(t){return function(n,i){return ee(i)&&-1===i.indexOf(e._globalKey)&&(this.__raven_xhr={method:n,url:i,status_code:null}),t.apply(this,arguments)}},n),fe(r,"send",function(t){return function(){var n=this;function r(){if(n.__raven_xhr&&4===n.readyState){try{n.__raven_xhr.status_code=n.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:n.__raven_xhr})}}for(var a=["onload","onerror","onprogress"],s=0;s"}}},t,r)}):n.onreadystatechange=r,t.apply(this,arguments)}},n)}t.xhr&&ge()&&fe(Ce,"fetch",function(t){return function(){for(var n=new Array(arguments.length),i=0;i2?arguments[2]:void 0;return n&&e._captureUrlChange(e._lastHref,n+""),t.apply(this,arguments)}};fe(Ce.history,"pushState",l,n),fe(Ce.history,"replaceState",l,n)}if(t.console&&"console"in Ce&&console.log){var c=function(t,n){e.captureBreadcrumb({message:t,level:n.level,category:"console"})};ie(["debug","info","warn","error","log"],function(e,t){we(console,t,c)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],n=e[1],i=e[2];t[n]=i}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ie(this._plugins,function(t,n){var i=n[0],r=n[1];i.apply(e,[e].concat(r))})},_parseDSN:function(e){var t=Te.exec(e),n={},i=7;try{for(;i--;)n[_e[i]]=t[i]||""}catch(t){throw new z("Invalid DSN: "+e)}if(n.pass&&!this._globalOptions.allowSecretKey)throw new z("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return n},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(e,t){(t=t||{}).mechanism=t.mechanism||{type:"onerror",handled:!1},this._ignoreOnError||this._handleStackInfo(e,t)},_handleStackInfo:function(e,t){var n=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,n,t)},_prepareFrames:function(e,t){var n=this,i=[];if(e.stack&&e.stack.length&&(ie(e.stack,function(t,r){var a=n._normalizeFrame(r,e.url);a&&i.push(a)}),t&&t.trimHeadFrames))for(var r=0;r0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),e=this._sanitizeData(e),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||ne(e[t]))&&delete e[t]}),Z(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!ne(e)&&(Z(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()3&&void 0!==arguments[3]&&arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!$e.empty(t)&&$e.function(n)){var o=t.split(" "),l=s;Ge&&(l={passive:a,capture:s}),o.forEach(function(t){i&&i.eventListeners&&r&&i.eventListeners.push({element:e,type:t,callback:n,options:l}),e[r?"addEventListener":"removeEventListener"](t,n,l)})}}function Ze(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Qe.call(this,e,t,n,!0,i,r)}function et(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Qe.call(this,e,t,n,!1,i,r)}function tt(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Qe.call(this,e,n,function s(){et(e,n,s,r,a);for(var o=arguments.length,l=new Array(o),c=0;c1&&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($e.element(e)&&!$e.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}}function it(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,a=e.nextSibling;i.appendChild(e),a?r.insertBefore(i,a):r.appendChild(i)})}function rt(e,t){$e.element(e)&&!$e.empty(t)&&Object.entries(t).filter(function(e){var t=Be(e,2)[1];return!$e.nullOrUndefined(t)}).forEach(function(t){var n=Be(t,2),i=n[0],r=n[1];return e.setAttribute(i,r)})}function at(e,t,n){var i=document.createElement(e);return $e.object(t)&&rt(i,t),$e.string(n)&&(i.innerText=n),i}function st(e,t,n,i){$e.element(t)&&t.appendChild(at(e,n,i))}function ot(e){$e.nodeList(e)||$e.array(e)?Array.from(e).forEach(ot):$e.element(e)&&$e.element(e.parentNode)&&e.parentNode.removeChild(e)}function lt(e){if($e.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function ct(e,t){return $e.element(t)&&$e.element(t.parentNode)&&$e.element(e)?(t.parentNode.replaceChild(e,t),e):null}function ut(e,t){if(!$e.string(e)||$e.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),s=a[0],o=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":$e.object(i)&&$e.string(i.class)&&(i.class+=" ".concat(r)),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=o}}),n}function dt(e,t){if($e.element(e)){var n=t;$e.boolean(n)||(n=!e.hidden),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function ht(e,t,n){if($e.nodeList(e))return Array.from(e).map(function(e){return ht(e,t,n)});if($e.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function pt(e,t){return $e.element(e)&&e.classList.contains(t)}function mt(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}function ft(e){return this.elements.container.querySelectorAll(e)}function gt(e){return this.elements.container.querySelector(e)}function vt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];$e.element(e)&&(e.focus({preventScroll:!0}),t&&ht(e,this.config.classNames.tabFocus))}var yt,bt,kt,wt=(yt=document.createElement("span"),bt={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},kt=Object.keys(bt).find(function(e){return void 0!==yt.style[e]}),!!$e.string(kt)&&bt[kt]);function _t(e){setTimeout(function(){try{dt(e,!0),e.offsetHeight,dt(e,!1)}catch(e){}},0)}var Tt,Et={isIE:!!document.documentMode,isEdge:window.navigator.userAgent.includes("Edge"),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)},Ct={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},St={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=Et.isIPhone&&n&&St.playsinline,r=St[e]||"html5"!==t;return{api:r,ui:r&&St.rangeInput&&("video"!==e||!Et.isIPhone||i)}},pip:!(Et.isIPhone||!$e.function(at("video").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||at("video").disablePictureInPicture)),airplay:$e.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){if($e.empty(e))return!1;var t=Be(e.split("/"),1)[0],n=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(Ct).includes(n)&&(n+='; codecs="'.concat(Ct[e],'"'));try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(Tt=document.createElement("input"),Tt.type="range","range"===Tt.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==wt,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},xt={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){var n=t.getAttribute("type");return!!$e.empty(n)||St.mime.call(e,n)}):[]},getQualityOptions:function(){return xt.getSources.call(this).map(function(e){return Number(e.getAttribute("size"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=xt.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("size"))},set:function(t){var n=xt.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(n){var i=e.media,r=i.currentTime,a=i.paused,s=i.preload,o=i.readyState;e.media.src=n.getAttribute("src"),("none"!==s||o)&&(e.once("loadedmetadata",function(){e.currentTime=r,a||e.play()}),e.media.load()),nt.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(ot(xt.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function At(e){return $e.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e}function Pt(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function Ot(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=new Array(t>1?t-1:0),i=1;i1?t-1:0),i=1;i0&&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())}function Lt(){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()})}function It(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Nt(e,"-"," "),e=Nt(e,"_"," "),Nt(e=Lt(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function jt(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var Rt={pip:"PIP",airplay:"AirPlay",html5:"HTML5",vimeo:"Vimeo",youtube:"YouTube"},Dt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if($e.empty(e)||$e.empty(t))return"";var n=Pt(t.i18n,e);if($e.empty(n))return Object.keys(Rt).includes(e)?Rt[e]:"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Be(e,2),i=t[0],r=t[1];n=Nt(n,i,r)}),n},Ft=function(){function e(t){Re(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Fe(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if($e.empty(n))return null;var i=JSON.parse(n);return $e.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&$e.object(t)){var n=this.get();$e.empty(n)&&(n={}),Ot(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}();function Ht(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.status)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})}function Bt(e,t){if($e.string(e)){var n=$e.string(t),i=function(){return null!==document.getElementById(t)},r=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement("afterbegin",e)};if(!n||!i()){var a=Ft.supported,s=document.createElement("div");if(s.setAttribute("hidden",""),n&&s.setAttribute("id",t),a){var o=window.localStorage.getItem("".concat("cache","-").concat(t));if(null!==o){var l=JSON.parse(o);r(s,l.content)}}Ht(e).then(function(e){$e.empty(e)||(a&&window.localStorage.setItem("".concat("cache","-").concat(t),JSON.stringify({content:e})),r(s,e))}).catch(function(){})}}}var qt=function(e){return Math.trunc(e/60/60%60,10)},Ut=function(e){return Math.trunc(e/60%60,10)},Vt=function(e){return Math.trunc(e%60,10)};function zt(){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(!$e.number(e))return zt(null,t,n);var i=function(e){return"0".concat(e).slice(-2)},r=qt(e),a=Ut(e),s=Vt(e);return r=t||r>0?"".concat(r,":"):"","".concat(n&&e>0?"-":"").concat(r).concat(i(a),":").concat(i(s))}var Wt={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||Et.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=gt.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:ft.call(this,this.config.selectors.buttons.play),pause:gt.call(this,this.config.selectors.buttons.pause),restart:gt.call(this,this.config.selectors.buttons.restart),rewind:gt.call(this,this.config.selectors.buttons.rewind),fastForward:gt.call(this,this.config.selectors.buttons.fastForward),mute:gt.call(this,this.config.selectors.buttons.mute),pip:gt.call(this,this.config.selectors.buttons.pip),airplay:gt.call(this,this.config.selectors.buttons.airplay),settings:gt.call(this,this.config.selectors.buttons.settings),captions:gt.call(this,this.config.selectors.buttons.captions),fullscreen:gt.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=gt.call(this,this.config.selectors.progress),this.elements.inputs={seek:gt.call(this,this.config.selectors.inputs.seek),volume:gt.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:gt.call(this,this.config.selectors.display.buffer),currentTime:gt.call(this,this.config.selectors.display.currentTime),duration:gt.call(this,this.config.selectors.display.duration)},$e.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(".".concat(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=Wt.getIconUrl.call(this),i="".concat(n.cors?"":n.url,"#").concat(this.config.iconPrefix),r=document.createElementNS("http://www.w3.org/2000/svg","svg");rt(r,Ot(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),s="".concat(i,"-").concat(e);return"href"in a&&a.setAttributeNS("http://www.w3.org/1999/xlink","href",s),a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(a),r},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Dt(e,this.config);return at("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),n)},createBadge:function(e){if($e.empty(e))return null;var t=at("span",{class:this.config.classNames.menu.value});return t.appendChild(at("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Object.assign({},t),i=It(e),r={element:"button",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch(["element","icon","label"].forEach(function(e){Object.keys(n).includes(e)&&(r[e]=n[e],delete n[e])}),"button"!==r.element||Object.keys(n).includes("type")||(n.type="button"),Object.keys(n).includes("class")?n.class.includes(this.config.classNames.control)||(n.class+=" ".concat(this.config.classNames.control)):n.class=this.config.classNames.control,e){case"play":r.toggle=!0,r.label="play",r.labelPressed="pause",r.icon="play",r.iconPressed="pause";break;case"mute":r.toggle=!0,r.label="mute",r.labelPressed="unmute",r.icon="volume",r.iconPressed="muted";break;case"captions":r.toggle=!0,r.label="enableCaptions",r.labelPressed="disableCaptions",r.icon="captions-off",r.iconPressed="captions-on";break;case"fullscreen":r.toggle=!0,r.label="enterFullscreen",r.labelPressed="exitFullscreen",r.icon="enter-fullscreen",r.iconPressed="exit-fullscreen";break;case"play-large":n.class+=" ".concat(this.config.classNames.control,"--overlaid"),i="play",r.label="play",r.icon="play";break;default:$e.empty(r.label)&&(r.label=i),$e.empty(r.icon)&&(r.icon=e)}var a=at(r.element);return r.toggle?(a.appendChild(Wt.createIcon.call(this,r.iconPressed,{class:"icon--pressed"})),a.appendChild(Wt.createIcon.call(this,r.icon,{class:"icon--not-pressed"})),a.appendChild(Wt.createLabel.call(this,r.labelPressed,{class:"label--pressed"})),a.appendChild(Wt.createLabel.call(this,r.label,{class:"label--not-pressed"}))):(a.appendChild(Wt.createIcon.call(this,r.icon)),a.appendChild(Wt.createLabel.call(this,r.label))),Ot(n,ut(this.config.selectors.buttons[i],n)),rt(a,n),"play"===i?($e.array(this.elements.buttons[i])||(this.elements.buttons[i]=[]),this.elements.buttons[i].push(a)):this.elements.buttons[i]=a,a},createRange:function(e,t){var n=at("input",Ot(ut(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":Dt(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,Wt.updateRangeFill.call(this,n),n},createProgress:function(e,t){var n=at("progress",Ot(ut(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(at("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],r=i?Dt(i,this.config):"";n.innerText="% ".concat(r.toLowerCase())}return this.elements.display[e]=n,n},createTime:function(e){var t=ut(this.config.selectors.display[e]),n=at("div",Ot(t,{class:"".concat(this.config.classNames.display.time," ").concat(t.class?t.class:"").trim(),"aria-label":Dt(e,this.config)}),"00:00");return this.elements.display[e]=n,n},bindMenuItemShortcuts:function(e,t){var n=this;Ze(e,"keydown keyup",function(i){if([32,38,39,40].includes(i.which)&&(i.preventDefault(),i.stopPropagation(),"keydown"!==i.type)){var r,a=mt(e,'[role="menuitemradio"]');if(!a&&[32,39].includes(i.which))Wt.showMenuPanel.call(n,t,!0);else 32!==i.which&&(40===i.which||a&&39===i.which?(r=e.nextElementSibling,$e.element(r)||(r=e.parentNode.firstElementChild)):(r=e.previousElementSibling,$e.element(r)||(r=e.parentNode.lastElementChild)),vt.call(n,r,!0))}},!1),Ze(e,"keyup",function(e){13===e.which&&Wt.focusFirstMenuItem.call(n,null,!0)})},createMenuItem:function(e){var t=this,n=e.value,i=e.list,r=e.type,a=e.title,s=e.badge,o=void 0===s?null:s,l=e.checked,c=void 0!==l&&l,u=ut(this.config.selectors.inputs[r]),d=at("button",Ot(u,{type:"button",role:"menuitemradio",class:"".concat(this.config.classNames.control," ").concat(u.class?u.class:"").trim(),"aria-checked":c,value:n})),h=at("span");h.innerHTML=a,$e.element(o)&&h.appendChild(o),d.appendChild(h),Object.defineProperty(d,"checked",{enumerable:!0,get:function(){return"true"===d.getAttribute("aria-checked")},set:function(e){e&&Array.from(d.parentNode.children).filter(function(e){return mt(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),d.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(d,"click keyup",function(e){if(!$e.keyboardEvent(e)||32===e.which){switch(e.preventDefault(),e.stopPropagation(),d.checked=!0,r){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}Wt.showMenuPanel.call(t,"home",$e.keyboardEvent(e))}},r,!1),Wt.bindMenuItemShortcuts.call(this,d,r),i.appendChild(d)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return $e.number(e)?zt(e,qt(this.duration)>0,t):e},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];$e.element(e)&&$e.number(t)&&(e.innerText=Wt.formatTime(t,n))},updateVolume:function(){this.supported.ui&&($e.element(this.elements.inputs.volume)&&Wt.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),$e.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;$e.element(e)&&(e.value=t,Wt.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&$e.event(e)){var n,i,r=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,r=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&Wt.setRange.call(this,this.elements.inputs.seek,r);break;case"playing":case"progress":!function(e,n){var i=$e.number(n)?n:0,r=$e.element(e)?e:t.elements.display.buffer;if($e.element(r)){r.value=i;var a=r.getElementsByTagName("span")[0];$e.element(a)&&(a.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=$e.event(e)?e.target:e;if($e.element(t)&&"range"===t.getAttribute("type")){if(mt(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=Wt.formatTime(this.currentTime),i=Wt.formatTime(this.duration),r=Dt("seekLabel",this.config);t.setAttribute("aria-valuetext",r.replace("{currentTime}",n).replace("{duration}",i))}else if(mt(t,this.config.selectors.inputs.volume)){var a=100*t.value;t.setAttribute("aria-valuenow",a),t.setAttribute("aria-valuetext","".concat(a.toFixed(1),"%"))}else t.setAttribute("aria-valuenow",t.value);Et.isWebkit&&t.style.setProperty("--value","".concat(t.value/t.max*100,"%"))}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&$e.element(this.elements.inputs.seek)&&$e.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r="".concat(this.config.classNames.tooltip,"--visible"),a=function(e){ht(t.elements.display.seekTooltip,r,e)};if(this.touch)a(!1);else{if($e.event(e))n=100/i.width*(e.pageX-i.left);else{if(!pt(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),Wt.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left="".concat(n,"%"),$e.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!$e.element(this.elements.display.duration)&&this.config.invertTime;Wt.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Wt.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return dt(this.elements.display.currentTime,!0),void dt(this.elements.progress,!0);$e.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=$e.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Wt.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Wt.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),Wt.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){dt(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],r=null,a=t;if("captions"===e)r=this.currentTrack;else{if(r=$e.empty(n)?this[e]:n,$e.empty(r)&&(r=this.config[e].default),!$e.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '".concat(r,"' for ").concat(e));if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '".concat(r,"' for ").concat(e))}if($e.element(a)||(a=i&&i.querySelector('[role="menu"]')),$e.element(a)){this.elements.settings.buttons[e].querySelector(".".concat(this.config.classNames.menu.value)).innerHTML=Wt.getLabel.call(this,e,r);var s=a&&a.querySelector('[value="'.concat(r,'"]'));$e.element(s)&&(s.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?Dt("normal",this.config):"".concat(t,"×");case"quality":if($e.number(t)){var n=Dt("qualityLabel.".concat(t),this.config);return n.length?n:"".concat(t,"p")}return Lt(t);case"captions":return Yt.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if($e.element(this.elements.settings.panels.quality)){var n=this.elements.settings.panels.quality.querySelector('[role="menu"]');$e.array(e)&&(this.options.quality=At(e).filter(function(e){return t.config.quality.options.includes(e)}));var i=!$e.empty(this.options.quality)&&this.options.quality.length>1;if(Wt.toggleMenuButton.call(this,"quality",i),lt(n),Wt.checkMenu.call(this),i){var r=function(e){var n=Dt("qualityBadge.".concat(e),t.config);return n.length?Wt.createBadge.call(t,n):null};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){Wt.createMenuItem.call(t,{value:e,list:n,type:"quality",title:Wt.getLabel.call(t,"quality",e),badge:r(e)})}),Wt.updateSetting.call(this,"quality",n)}}},setCaptionsMenu:function(){var e=this;if($e.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),n=Yt.getTracks.call(this),i=Boolean(n.length);if(Wt.toggleMenuButton.call(this,"captions",i),lt(t),Wt.checkMenu.call(this),i){var r=n.map(function(n,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:Yt.getLabel.call(e,n),badge:n.language&&Wt.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});r.unshift({value:-1,checked:!this.captions.toggled,title:Dt("disabled",this.config),list:t,type:"language"}),r.forEach(Wt.createMenuItem.bind(this)),Wt.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if($e.element(this.elements.settings.panels.speed)){var n=this.elements.settings.panels.speed.querySelector('[role="menu"]');$e.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=!$e.empty(this.options.speed)&&this.options.speed.length>1;Wt.toggleMenuButton.call(this,"speed",i),lt(n),Wt.checkMenu.call(this),i&&(this.options.speed.forEach(function(e){Wt.createMenuItem.call(t,{value:e,list:n,type:"speed",title:Wt.getLabel.call(t,"speed",e)})}),Wt.updateSetting.call(this,"speed",n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!$e.empty(e)&&Object.values(e).some(function(e){return!e.hidden});dt(this.elements.settings.menu,!t)},focusFirstMenuItem:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.elements.settings.popup.hidden){var n=e;$e.element(n)||(n=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}));var i=n.querySelector('[role^="menuitem"]');vt.call(this,i,t)}},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if($e.element(t)&&$e.element(n)){var i=t.hidden,r=i;if($e.boolean(e))r=e;else if($e.keyboardEvent(e)&&27===e.which)r=!1;else if($e.event(e)){var a=t.contains(e.target);if(a||!a&&e.target!==n&&r)return}n.setAttribute("aria-expanded",r),dt(t,!r),ht(this.elements.container,this.config.classNames.menu.open,r),r&&$e.keyboardEvent(e)?Wt.focusFirstMenuItem.call(this,null,!0):r||i||vt.call(this,n,$e.keyboardEvent(e))}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return ot(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=document.getElementById("plyr-settings-".concat(this.id,"-").concat(t));if($e.element(i)){var r=i.parentNode,a=Array.from(r.children).find(function(e){return!e.hidden});if(St.transitions&&!St.reducedMotion){r.style.width="".concat(a.scrollWidth,"px"),r.style.height="".concat(a.scrollHeight,"px");var s=Wt.getMenuSize.call(this,i);Ze.call(this,r,wt,function t(n){n.target===r&&["width","height"].includes(n.propertyName)&&(r.style.width="",r.style.height="",et.call(e,r,wt,t))}),r.style.width="".concat(s.width,"px"),r.style.height="".concat(s.height,"px")}dt(a,!0),dt(i,!1),Wt.focusFirstMenuItem.call(this,i,n)}},setDownloadLink:function(){var e=this.elements.buttons.download;$e.element(e)&&e.setAttribute("href",this.download)},create:function(e){var t=this,n=at("div",ut(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(Wt.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(Wt.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(Wt.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(Wt.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=at("div",ut(this.config.selectors.progress));if(i.appendChild(Wt.createRange.call(this,"seek",{id:"plyr-seek-".concat(e.id)})),i.appendChild(Wt.createProgress.call(this,"buffer")),this.config.tooltips.seek){var r=at("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(r),this.elements.display.seekTooltip=r}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(Wt.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(Wt.createTime.call(this,"duration")),this.config.controls.includes("mute")||this.config.controls.includes("volume")){var a=at("div",{class:"plyr__volume"});if(this.config.controls.includes("mute")&&a.appendChild(Wt.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s={max:1,step:.05,value:this.config.volume};a.appendChild(Wt.createRange.call(this,"volume",Ot(s,{id:"plyr-volume-".concat(e.id)}))),this.elements.volume=a}n.appendChild(a)}if(this.config.controls.includes("captions")&&n.appendChild(Wt.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!$e.empty(this.config.settings)){var o=at("div",{class:"plyr__menu",hidden:""});o.appendChild(Wt.createButton.call(this,"settings",{"aria-haspopup":!0,"aria-controls":"plyr-settings-".concat(e.id),"aria-expanded":!1}));var l=at("div",{class:"plyr__menu__container",id:"plyr-settings-".concat(e.id),hidden:""}),c=at("div"),u=at("div",{id:"plyr-settings-".concat(e.id,"-home")}),d=at("div",{role:"menu"});u.appendChild(d),c.appendChild(u),this.elements.settings.panels.home=u,this.config.settings.forEach(function(n){var i=at("button",Ot(ut(t.config.selectors.buttons.settings),{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--forward"),role:"menuitem","aria-haspopup":!0,hidden:""}));Wt.bindMenuItemShortcuts.call(t,i,n),Ze(i,"click",function(){Wt.showMenuPanel.call(t,n,!1)});var r=at("span",null,Dt(n,t.config)),a=at("span",{class:t.config.classNames.menu.value});a.innerHTML=e[n],r.appendChild(a),i.appendChild(r),d.appendChild(i);var s=at("div",{id:"plyr-settings-".concat(e.id,"-").concat(n),hidden:""}),o=at("button",{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--back")});o.appendChild(at("span",{"aria-hidden":!0},Dt(n,t.config))),o.appendChild(at("span",{class:t.config.classNames.hidden},Dt("menuBack",t.config))),Ze(s,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),Wt.showMenuPanel.call(t,"home",!0))},!1),Ze(o,"click",function(){Wt.showMenuPanel.call(t,"home",!1)}),s.appendChild(o),s.appendChild(at("div",{role:"menu"})),c.appendChild(s),t.elements.settings.buttons[n]=i,t.elements.settings.panels[n]=s}),l.appendChild(c),o.appendChild(l),n.appendChild(o),this.elements.settings.popup=l,this.elements.settings.menu=o}if(this.config.controls.includes("pip")&&St.pip&&n.appendChild(Wt.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&St.airplay&&n.appendChild(Wt.createButton.call(this,"airplay")),this.config.controls.includes("download")){var h={element:"a",href:this.download,target:"_blank"},p=this.config.urls.download;!$e.url(p)&&this.isEmbed&&Ot(h,{icon:"logo-".concat(this.provider),label:this.provider}),n.appendChild(Wt.createButton.call(this,"download",h))}return this.config.controls.includes("fullscreen")&&n.appendChild(Wt.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(Wt.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&Wt.setQualityMenu.call(this,xt.getQualityOptions.call(this)),Wt.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=Wt.getIconUrl.call(this);t.cors&&Bt(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;$e.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this,i)),this.config.controls||(this.config.controls=[]),$e.element(this.config.controls)||$e.string(this.config.controls)?n=this.config.controls:(n=Wt.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:Yt.getLabel.call(this)}),r=!1);var a,s=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Be(e,2),i=n[0],r=n[1];t=Nt(t,"{".concat(i,"}"),r)}),t};if(r&&($e.string(this.config.controls)?n=s(n):$e.element(n)&&(n.innerHTML=s(n.innerHTML))),$e.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),$e.element(a)||(a=this.elements.container),a[$e.element(n)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",n),$e.element(this.elements.controls)||Wt.findElements.call(this),!$e.empty(this.elements.buttons)){var o=function(t){var n=e.config.classNames.controlPressed;Object.defineProperty(t,"pressed",{enumerable:!0,get:function(){return pt(t,n)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];ht(t,n,e)}})};Object.values(this.elements.buttons).filter(Boolean).forEach(function(e){$e.array(e)||$e.nodeList(e)?Array.from(e).filter(Boolean).forEach(o):o(e)})}if(Et.isEdge&&_t(a),this.config.tooltips.controls){var l=this.config,c=l.classNames,u=l.selectors,d="".concat(u.controls.wrapper," ").concat(u.labels," .").concat(c.hidden),h=ft.call(this,d);Array.from(h).forEach(function(t){ht(t,e.config.classNames.hidden,!1),ht(t,e.config.classNames.tooltip,!0)})}}};function Kt(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=document.createElement("a");n.href=t,t=n.href}try{return new URL(t)}catch(e){return null}}function Xt(e){var t=new URLSearchParams;return $e.object(e)&&Object.entries(e).forEach(function(e){var n=Be(e,2),i=n[0],r=n[1];t.set(i,r)}),t}var Yt={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!St.textTracks)$e.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Wt.setCaptionsMenu.call(this);else{var e,t;if($e.element(this.elements.captions)||(this.elements.captions=at("div",ut(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,$e.element(e)&&$e.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),Et.isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),n=Kt(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Ht(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){ot(e)})})}var i=At((navigator.languages||[navigator.language||navigator.userLanguage||"en"]).map(function(e){return e.split("-")[0]})),r=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===r)r=Be(i,1)[0];var a=this.storage.get("captions");if($e.boolean(a)||(a=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:a,language:r,languages:i}),this.isHTML5){var s=this.config.captions.update?"addtrack removetrack":"removetrack";Ze.call(this,this.media.textTracks,s,Yt.update.bind(this))}setTimeout(Yt.update.bind(this),0)}},update:function(){var e=this,t=Yt.getTracks.call(this,!0),n=this.captions,i=n.active,r=n.language,a=n.meta,s=n.currentTrackNode,o=Boolean(t.find(function(e){return e.language===r}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!a.get(e)}).forEach(function(t){e.debug.log("Track added",t),a.set(t,{default:"showing"===t.mode}),t.mode="hidden",Ze.call(e,t,"cuechange",function(){return Yt.updateCues.call(e)})}),(o&&this.language!==r||!t.includes(s))&&(Yt.setLanguage.call(this,r),Yt.toggle.call(this,i&&o)),ht(this.elements.container,this.config.classNames.captions.enabled,!$e.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&Wt.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var n=this.captions.toggled,i=this.config.classNames.captions.active,r=$e.nullOrUndefined(e)?!n:e;if(r!==n){if(t||(this.captions.active=r,this.storage.set({captions:r})),!this.language&&r&&!t){var a=Yt.getTracks.call(this),s=Yt.findTrack.call(this,[this.captions.language].concat(qe(this.captions.languages)),!0);return this.captions.language=s.language,void Yt.set.call(this,a.indexOf(s))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=r),ht(this.elements.container,i,r),this.captions.toggled=r,Wt.updateSetting.call(this,"captions"),nt.call(this,this.media,r?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=Yt.getTracks.call(this);if(-1!==e)if($e.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],r=(i||{}).language;this.captions.currentTrackNode=i,Wt.updateSetting.call(this,"captions"),t||(this.captions.language=r,this.storage.set({language:r})),this.isVimeo&&this.embed.enableTextTrack(r),nt.call(this,this.media,"languagechange")}Yt.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&Yt.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else Yt.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if($e.string(e)){var n=e.toLowerCase();this.captions.language=n;var i=Yt.getTracks.call(this),r=Yt.findTrack.call(this,[n]);Yt.set.call(this,i.indexOf(r),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t,n=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=Yt.getTracks.call(this),a=function(e){return Number((n.captions.meta.get(e)||{}).default)},s=Array.from(r).sort(function(e,t){return a(t)-a(e)});return e.every(function(e){return!(t=s.find(function(t){return t.language===e}))}),t||(i?s[0]:void 0)},getCurrentTrack:function(){return Yt.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!$e.track(t)&&St.textTracks&&this.captions.toggled&&(t=Yt.getCurrentTrack.call(this)),$e.track(t)?$e.empty(t.label)?$e.empty(t.language)?Dt("enabled",this.config):e.language.toUpperCase():t.label:Dt("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if($e.element(this.elements.captions))if($e.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=Yt.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(jt)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){lt(this.elements.captions);var r=at("span",ut(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),nt.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},Jt={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!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.5.0-beta.3/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240]},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:"auto",update:!1},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}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",download:"Download",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{download:null,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"},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,download: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","download","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","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"]',download:'[data-plyr="download"]',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",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",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",display:{time:"plyr__time"},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",previewThumbnails:{thumbContainer:"plyr__preview-thumb",thumbContainerShown:"plyr__preview-thumb--is-shown",imageContainer:"plyr__preview-thumb__image-container",timeContainer:"plyr__preview-thumb__time-container",scrubbingContainer:"plyr__preview-scrubbing",scrubbingContainerShown:"plyr__preview-scrubbing--is-shown"}},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:"",tagUrl:""},previewThumbnails:{enabled:!1,src:""},vimeo:{byline:!1,portrait:!1,title:!1,speed:!0,transparent:!1},youtube:{noCookie:!1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1}},$t="picture-in-picture",Gt="inline",Qt={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Zt={audio:"audio",video:"video"};var en=function(){},tn=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Re(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Fe(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):en}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):en}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):en}}]),e}();function nn(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;$e.element(e)&&(e.pressed=this.active),nt.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Et.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if($e.element(e)){var n=ft.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1];Qe.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function rn(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=t?"hidden":"",ht(this.target,this.player.config.classNames.fullscreen.fallback,t),Et.isIos){var n=document.head.querySelector('meta[name="viewport"]'),i="viewport-fit=cover";n||(n=document.createElement("meta")).setAttribute("name","viewport");var r=$e.string(n.content)&&n.content.includes(i);t?(this.cleanupViewport=!r,r||(n.content+=",".concat(i))):this.cleanupViewport&&(n.content=n.content.split(",").filter(function(e){return e.trim()!==i}).join(",")),setTimeout(function(){return _t(e.target)},100)}nn.call(this)}var an=function(){function e(t){var n=this;Re(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},this.forceFallback="force"===t.config.fullscreen.fallback,Ze.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":"".concat(this.prefix,"fullscreenchange"),function(){nn.call(n)}),Ze.call(this.player,this.player.elements.container,"dblclick",function(e){$e.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Fe(e,[{key:"update",value:function(){var t;this.enabled?(t=this.forceFallback?"Fallback (forced)":e.native?"Native":"Fallback",this.player.debug.log("".concat(t," fullscreen enabled"))):this.player.debug.log("Fullscreen not supported and fallback disabled");ht(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Et.isIos&&this.player.config.fullscreen.iosNative?this.target.webkitEnterFullscreen():!e.native||this.forceFallback?rn.call(this,!0):this.prefix?$e.empty(this.prefix)||this.target["".concat(this.prefix,"Request").concat(this.property)]():this.target.requestFullscreen())}},{key:"exit",value:function(){if(this.enabled)if(Et.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(!e.native||this.forceFallback)rn.call(this,!1);else if(this.prefix){if(!$e.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document["".concat(this.prefix).concat(t).concat(this.property)]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"usingNative",get:function(){return e.native&&!this.forceFallback}},{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.forceFallback?pt(this.target,this.player.config.classNames.fullscreen.fallback):(this.prefix?document["".concat(this.prefix).concat(this.property,"Element")]:document.fullscreenElement)===this.target)}},{key:"target",get:function(){return Et.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($e.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!$e.function(document["".concat(t,"ExitFullscreen")])&&!$e.function(document["".concat(t,"CancelFullScreen")]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}();function sn(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,a=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:a,onerror:a,src:e})})}var on={addStyleHook:function(){ht(this.elements.container,this.config.selectors.container.replace(".",""),!0),ht(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 ".concat(this.provider," ").concat(this.type)),void on.toggleNativeControls.call(this,!0);$e.element(this.elements.controls)||(Wt.inject.call(this),this.listeners.controls()),on.toggleNativeControls.call(this),this.isHTML5&&Yt.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,Wt.updateVolume.call(this),Wt.timeUpdate.call(this),on.checkPlaying.call(this),ht(this.elements.container,this.config.classNames.pip.supported,St.pip&&this.isHTML5&&this.isVideo),ht(this.elements.container,this.config.classNames.airplay.supported,St.airplay&&this.isHTML5),ht(this.elements.container,this.config.classNames.isIos,Et.isIos),ht(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){nt.call(e,e.media,"ready")},0),on.setTitle.call(this),this.poster&&on.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&Wt.durationUpdate.call(this)},setTitle:function(){var e=Dt("play",this.config);if($e.string(this.config.title)&&!$e.empty(this.config.title)&&(e+=", ".concat(this.config.title)),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=gt.call(this,"iframe");if(!$e.element(t))return;var n=$e.empty(this.config.title)?"video":this.config.title,i=Dt("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){ht(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):Ze.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return sn(e)}).catch(function(n){throw e===t.poster&&on.togglePoster.call(t,!1),n}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('".concat(e,"')"),backgroundSize:""}),on.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;ht(this.elements.container,this.config.classNames.playing,this.playing),ht(this.elements.container,this.config.classNames.paused,this.paused),ht(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),$e.event(e)&&"timeupdate"===e.type||on.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){ht(t.elements.container,t.config.classNames.loading,t.loading),on.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;if(t&&this.config.hideControls){var n=this.touch&&this.lastSeekTime+2e3>Date.now();this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover||n))}}};function ln(e){var t=e;$e.string(t)||$e.nullOrUndefined(this.embed)||(t=this.embed.ratio),$e.string(t)||(t=this.config.ratio);var n=Be(t.split(":").map(Number),2),i=100/n[0]*n[1];if(this.elements.wrapper.style.paddingBottom="".concat(i,"%"),this.isVimeo&&this.supported.ui){var r=(240-i)/4.8;this.media.style.transform="translateY(-".concat(r,"%)")}return{padding:i,ratio:t}}var cn=function(){function e(t){Re(this,e),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Fe(e,[{key:"handleKey",value:function(e){var t=this.player,n=t.elements,i=e.keyCode?e.keyCode:e.which,r="keydown"===e.type,a=r&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&$e.number(i)){if(r){var s=document.activeElement;if($e.element(s)){var o=t.config.selectors.editable;if(s!==n.inputs.seek&&mt(s,o))return;if(32===e.which&&mt(s,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,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:a||(t.currentTime=t.duration/10*(i-48));break;case 32:case 75:a||t.togglePlay();break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:a||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:a||t.toggleCaptions();break;case 76:t.loop=!t.loop}27===i&&!t.fullscreen.usingNative&&t.fullscreen.active&&t.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){Wt.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player,t=e.elements;e.touch=!0,ht(t.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player,n=t.elements;if(clearTimeout(this.focusTimer),"keydown"!==e.type||9===e.which){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,r=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||r)i=t.config.classNames.tabFocus,ht(ft.call(t,".".concat(i)),i,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;n.container.contains(e)&&ht(document.activeElement,t.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&Qe.call(t,window,"keydown keyup",this.handleKey,e,!1),Qe.call(t,document.body,"click",this.toggleMenu,e),tt.call(t,document.body,"touchstart",this.firstTouch),Qe.call(t,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player,t=e.config,n=e.elements,i=e.timers;!t.keyboard.global&&t.keyboard.focused&&Ze.call(e,n.container,"keydown keyup",this.handleKey,!1),Ze.call(e,n.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var r=n.controls;r&&"enterfullscreen"===t.type&&(r.pressed=!1,r.hover=!1);var a=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(on.toggleControls.call(e,!0),a=e.touch?3e3:2e3),clearTimeout(i.controls),i.controls=setTimeout(function(){return on.toggleControls.call(e,!1)},a)});var r=function(t){if(!t)return ln.call(e);var i=n.container.getBoundingClientRect(),r=i.width,a=i.height;return ln.call(e,"".concat(r,":").concat(a))},a=function(){window.clearTimeout(i.resized),i.resized=window.setTimeout(r,50)};Ze.call(e,n.container,"enterfullscreen exitfullscreen",function(t){var i=e.fullscreen,s=i.target,o=i.usingNative;if(e.isEmbed&&s===n.container){var l="enterfullscreen"===t.type,c=r(l);c.padding;!function(t,n,i){if(e.isVimeo){var r=e.elements.wrapper.firstChild,a=Be(t.split(":").map(Number),2)[1],s=Be(e.embed.ratio.split(":").map(Number),2),o=s[0],l=s[1];r.style.maxWidth=i?"".concat(a/l*o,"px"):null,r.style.margin=i?"0 auto":null}}(c.ratio,0,l),o||(l?Ze.call(e,window,"resize",a):et.call(e,window,"resize",a))}})}},{key:"media",value:function(){var e=this,t=this.player,n=t.elements;if(Ze.call(t,t.media,"timeupdate seeking seeked",function(e){return Wt.timeUpdate.call(t,e)}),Ze.call(t,t.media,"durationchange loadeddata loadedmetadata",function(e){return Wt.durationUpdate.call(t,e)}),Ze.call(t,t.media,"canplay loadeddata",function(){dt(n.volume,!t.hasAudio),dt(n.buttons.mute,!t.hasAudio)}),Ze.call(t,t.media,"ended",function(){t.isHTML5&&t.isVideo&&t.config.resetOnEnd&&t.restart()}),Ze.call(t,t.media,"progress playing seeking seeked",function(e){return Wt.updateProgress.call(t,e)}),Ze.call(t,t.media,"volumechange",function(e){return Wt.updateVolume.call(t,e)}),Ze.call(t,t.media,"playing play pause ended emptied timeupdate",function(e){return on.checkPlaying.call(t,e)}),Ze.call(t,t.media,"waiting canplay seeked playing",function(e){return on.checkLoading.call(t,e)}),t.supported.ui&&t.config.clickToPlay&&!t.isAudio){var i=gt.call(t,".".concat(t.config.classNames.video));if(!$e.element(i))return;Ze.call(t,n.container,"click",function(r){([n.container,i].includes(r.target)||i.contains(r.target))&&(t.touch&&t.config.hideControls||(t.ended?(e.proxy(r,t.restart,"restart"),e.proxy(r,t.play,"play")):e.proxy(r,t.togglePlay,"play")))})}t.supported.ui&&t.config.disableContextMenu&&Ze.call(t,n.wrapper,"contextmenu",function(e){e.preventDefault()},!1),Ze.call(t,t.media,"volumechange",function(){t.storage.set({volume:t.volume,muted:t.muted})}),Ze.call(t,t.media,"ratechange",function(){Wt.updateSetting.call(t,"speed"),t.storage.set({speed:t.speed})}),Ze.call(t,t.media,"qualitychange",function(e){Wt.updateSetting.call(t,"quality",null,e.detail.quality)}),Ze.call(t,t.media,"ready qualitychange",function(){Wt.setDownloadLink.call(t)});var r=t.config.events.concat(["keyup","keydown"]).join(" ");Ze.call(t,t.media,r,function(e){var i=e.detail,r=void 0===i?{}:i;"error"===e.type&&(r=t.media.error),nt.call(t,n.container,e.type,!0,r)})}},{key:"proxy",value:function(e,t,n){var i=this.player,r=i.config.listeners[n],a=!0;$e.function(r)&&(a=r.call(i,e)),a&&$e.function(t)&&t.call(i,e)}},{key:"bind",value:function(e,t,n,i){var r=this,a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=this.player,o=s.config.listeners[i],l=$e.function(o);Ze.call(s,e,t,function(e){return r.proxy(e,n,i)},a&&!l)}},{key:"controls",value:function(){var e=this,t=this.player,n=t.elements,i=Et.isIE?"change":"input";if(n.buttons.play&&Array.from(n.buttons.play).forEach(function(n){e.bind(n,"click",t.togglePlay,"play")}),this.bind(n.buttons.restart,"click",t.restart,"restart"),this.bind(n.buttons.rewind,"click",t.rewind,"rewind"),this.bind(n.buttons.fastForward,"click",t.forward,"fastForward"),this.bind(n.buttons.mute,"click",function(){t.muted=!t.muted},"mute"),this.bind(n.buttons.captions,"click",function(){return t.toggleCaptions()}),this.bind(n.buttons.download,"click",function(){nt.call(t,t.media,"download")},"download"),this.bind(n.buttons.fullscreen,"click",function(){t.fullscreen.toggle()},"fullscreen"),this.bind(n.buttons.pip,"click",function(){t.pip="toggle"},"pip"),this.bind(n.buttons.airplay,"click",t.airplay,"airplay"),this.bind(n.buttons.settings,"click",function(e){e.stopPropagation(),Wt.toggleMenu.call(t,e)}),this.bind(n.buttons.settings,"keyup",function(e){var n=e.which;[13,32].includes(n)&&(13!==n?(e.preventDefault(),e.stopPropagation(),Wt.toggleMenu.call(t,e)):Wt.focusFirstMenuItem.call(t,null,!0))},null,!1),this.bind(n.settings.menu,"keydown",function(e){27===e.which&&Wt.toggleMenu.call(t,e)}),this.bind(n.inputs.seek,"mousedown mousemove",function(e){var t=n.progress.getBoundingClientRect(),i=100/t.width*(e.pageX-t.left);e.currentTarget.setAttribute("seek-value",i)}),this.bind(n.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(e){var n=e.currentTarget,i=e.keyCode?e.keyCode:e.which;if(!$e.keyboardEvent(e)||39===i||37===i){t.lastSeekTime=Date.now();var r=n.hasAttribute("play-on-seeked"),a=["mouseup","touchend","keyup"].includes(e.type);r&&a?(n.removeAttribute("play-on-seeked"),t.play()):!a&&t.playing&&(n.setAttribute("play-on-seeked",""),t.pause())}}),Et.isIos){var r=ft.call(t,'input[type="range"]');Array.from(r).forEach(function(t){return e.bind(t,i,function(e){return _t(e.target)})})}this.bind(n.inputs.seek,i,function(e){var n=e.currentTarget,i=n.getAttribute("seek-value");$e.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),t.currentTime=i/n.max*t.duration},"seek"),this.bind(n.progress,"mouseenter mouseleave mousemove",function(e){return Wt.updateSeekTooltip.call(t,e)}),this.bind(n.progress,"mousemove touchmove",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.startMove(e)}),this.bind(n.progress,"mouseleave click",function(){var e=t.previewThumbnails;e&&e.loaded&&e.endMove(!1,!0)}),this.bind(n.progress,"mousedown touchstart",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.startScrubbing(e)}),this.bind(n.progress,"mouseup touchend",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.endScrubbing(e)}),Et.isWebkit&&Array.from(ft.call(t,'input[type="range"]')).forEach(function(n){e.bind(n,"input",function(e){return Wt.updateRangeFill.call(t,e.target)})}),t.config.toggleInvert&&!$e.element(n.display.duration)&&this.bind(n.display.currentTime,"click",function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,Wt.timeUpdate.call(t))}),this.bind(n.inputs.volume,i,function(e){t.volume=e.target.value},"volume"),this.bind(n.controls,"mouseenter mouseleave",function(e){n.controls.hover=!t.touch&&"mouseenter"===e.type}),this.bind(n.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){n.controls.pressed=["mousedown","touchstart"].includes(e.type)}),this.bind(n.controls,"focusin",function(){var n=t.config,i=t.elements,r=t.timers;ht(i.controls,n.classNames.noTransition,!0),on.toggleControls.call(t,!0),setTimeout(function(){ht(i.controls,n.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(r.controls),r.controls=setTimeout(function(){return on.toggleControls.call(t,!1)},a)}),this.bind(n.inputs.volume,"wheel",function(e){var n=e.webkitDirectionInvertedFromDevice,i=Be([e.deltaX,-e.deltaY].map(function(e){return n?-e:e}),2),r=i[0],a=i[1],s=Math.sign(Math.abs(r)>Math.abs(a)?r:a);t.increaseVolume(s/50);var o=t.media.volume;(1===s&&o<1||-1===s&&o>0)&&e.preventDefault()},"volume",!1)}}]),e}(),un=t(function(e,t){e.exports=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 a(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function s(t,n,i,r){var a,o,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(a=!0,(o=l.createElement("link")).rel="stylesheet",o.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(o=l.createElement("img")).src=h:((o=l.createElement("script")).src=t,o.async=void 0===c||c),o.onload=o.onerror=o.onbeforeload=function(e){var l=e.type[0];if(a&&"hideFocus"in o)try{o.sheet.cssText.length||(l="e")}catch(e){18!=e.code&&(l="e")}if("e"==l&&(r+=1)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=zt(Math.max(e.manager.getRemainingTime(),0)),n="".concat(Dt("advertisement",e.player.config)," - ").concat(t);e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this;if(this.enabled){var n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),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:"addCuePoints",value:function(){var e=this;$e.empty(this.cuePoints)||this.cuePoints.forEach(function(t){if(0!==t&&-1!==t&&t1?n-1:0),r=1;r ?)([0-9]{2}):([0-9]{2}):([0-9]{2}).([0-9]{2,3})/);a&&(t.startTime=60*Number(a[1])*60+60*Number(a[2])+Number(a[3])+Number("0.".concat(a[4])),t.endTime=60*Number(a[6])*60+60*Number(a[7])+Number(a[8])+Number("0.".concat(a[9])))}}),t.text&&a.push(t)}),a),height:null,urlPrefix:""};s.frames[0].text.startsWith("/")||(s.urlPrefix=e.substring(0,e.lastIndexOf("/")+1));var o=new Image;o.onload=function(){s.height=o.naturalHeight,s.width=o.naturalWidth,t.thumbnails.push(s),n()},o.src=s.urlPrefix+s.frames[0].text})})}},{key:"startMove",value:function(e){if(this.loaded&&$e.event(e)&&["touchmove","mousemove"].includes(e.type)&&this.player.media.duration){if("touchmove"===e.type)this.seekTime=this.player.media.duration*(this.player.elements.inputs.seek.value/100);else{var t=this.player.elements.progress.getBoundingClientRect(),n=100/t.width*(e.pageX-t.left);this.seekTime=this.player.media.duration*(n/100),this.seekTime<0&&(this.seekTime=0),this.seekTime>this.player.media.duration-1&&(this.seekTime=this.player.media.duration-1),this.mousePosX=e.pageX,this.elements.thumb.time.innerText=zt(this.seekTime)}this.showImageAtCurrentTime()}}},{key:"endMove",value:function(){this.toggleThumbContainer(!1,!0)}},{key:"startScrubbing",value:function(e){!1!==e.button&&0!==e.button||(this.mouseDown=!0,this.player.media.duration&&(this.toggleScrubbingContainer(!0),this.toggleThumbContainer(!1,!0),this.showImageAtCurrentTime()))}},{key:"endScrubbing",value:function(){var e=this;this.mouseDown=!1,Math.ceil(this.lastTime)===Math.ceil(this.player.media.currentTime)?this.toggleScrubbingContainer(!1):tt.call(this.player,this.player.media,"timeupdate",function(){e.mouseDown||e.toggleScrubbingContainer(!1)})}},{key:"listeners",value:function(){var e=this;this.player.on("play",function(){e.toggleThumbContainer(!1,!0)}),this.player.on("seeked",function(){e.toggleThumbContainer(!1)}),this.player.on("timeupdate",function(){e.lastTime=e.player.media.currentTime})}},{key:"render",value:function(){this.elements.thumb.container=at("div",{class:this.player.config.classNames.previewThumbnails.thumbContainer}),this.elements.thumb.imageContainer=at("div",{class:this.player.config.classNames.previewThumbnails.imageContainer}),this.elements.thumb.container.appendChild(this.elements.thumb.imageContainer);var e=at("div",{class:this.player.config.classNames.previewThumbnails.timeContainer});this.elements.thumb.time=at("span",{},"00:00"),e.appendChild(this.elements.thumb.time),this.elements.thumb.container.appendChild(e),this.player.elements.progress.appendChild(this.elements.thumb.container),this.elements.scrubbing.container=at("div",{class:this.player.config.classNames.previewThumbnails.scrubbingContainer}),this.player.elements.wrapper.appendChild(this.elements.scrubbing.container)}},{key:"showImageAtCurrentTime",value:function(){var e=this;this.mouseDown?this.setScrubbingContainerSize():(this.toggleThumbContainer(!0),this.setThumbContainerSizeAndPos());var t=this.thumbnails[0].frames.findIndex(function(t){return e.seekTime>=t.startTime&&e.seekTime<=t.endTime}),n=t>=0,i=0;this.toggleThumbContainer(n),n&&(this.thumbnails.forEach(function(n,r){e.loadedImages.includes(n.frames[t].text)&&(i=r)}),t!==this.showingThumb&&(this.showingThumb=t,this.loadImage(i)))}},{key:"loadImage",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=this.showingThumb,i=this.thumbnails[t],r=i.urlPrefix,a=i.frames[n],s=i.frames[n].text,o=r+s;if(this.currentImageElement&&this.currentImageElement.dataset.filename===s)this.showImage(this.currentImageElement,a,t,n,s,!1),this.currentImageElement.dataset.index=n,this.removeOldImages(this.currentImageElement);else{this.loadingImage&&this.usingSprites&&(this.loadingImage.onload=null);var l=new Image;l.src=o,l.dataset.index=n,l.dataset.filename=s,this.showingThumbFilename=s,this.player.debug.log("Loading image: ".concat(o)),l.onload=function(){return e.showImage(l,a,t,n,s,!0)},this.loadingImage=l,this.removeOldImages(l)}}},{key:"showImage",value:function(e,t,n,i,r){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];this.player.debug.log("Showing thumb: ".concat(r,". num: ").concat(i,". qual: ").concat(n,". newimg: ").concat(a)),this.setImageSizeAndOffset(e,t),a&&(this.currentImageContainer.appendChild(e),this.currentImageElement=e,this.loadedImages.includes(r)||this.loadedImages.push(r)),this.preloadNearby(i,!0).then(this.preloadNearby(i,!1)).then(this.getHigherQuality(n,e,t,r))}},{key:"removeOldImages",value:function(e){var t=this;Array.from(this.currentImageContainer.children).forEach(function(n){if("img"===n.tagName.toLowerCase()){var i=t.usingSprites?500:1e3;if(n.dataset.index!==e.dataset.index&&!n.dataset.deleting){n.dataset.deleting=!0;var r=t.currentImageContainer;setTimeout(function(){r.removeChild(n),t.player.debug.log("Removing thumb: ".concat(n.dataset.filename))},i)}}})}},{key:"preloadNearby",value:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return new Promise(function(i){setTimeout(function(){var r=t.thumbnails[0].frames[e].text;if(t.showingThumbFilename===r){var a;a=n?t.thumbnails[0].frames.slice(e):t.thumbnails[0].frames.slice(0,e).reverse();var s=!1;a.forEach(function(e){var n=e.text;if(n!==r&&!t.loadedImages.includes(n)){s=!0,t.player.debug.log("Preloading thumb filename: ".concat(n));var a=t.thumbnails[0].urlPrefix+n,o=new Image;o.src=a,o.onload=function(){t.player.debug.log("Preloaded thumb filename: ".concat(n)),t.loadedImages.includes(n)||t.loadedImages.push(n),i()}}}),s||i()}},300)})}},{key:"getHigherQuality",value:function(e,t,n,i){var r=this;if(e0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.player.config.classNames.previewThumbnails.thumbContainerShown;this.elements.thumb.container.classList.toggle(n,e),!e&&t&&(this.showingThumb=null,this.showingThumbFilename=null)}},{key:"toggleScrubbingContainer",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.player.config.classNames.previewThumbnails.scrubbingContainerShown;this.elements.scrubbing.container.classList.toggle(t,e),e||(this.showingThumb=null,this.showingThumbFilename=null)}},{key:"determineContainerAutoSizing",value:function(){this.elements.thumb.imageContainer.clientHeight>20&&(this.sizeSpecifiedInCSS=!0)}},{key:"setThumbContainerSizeAndPos",value:function(){if(!this.sizeSpecifiedInCSS){var e=Math.floor(this.thumbContainerHeight*this.thumbAspectRatio);this.elements.thumb.imageContainer.style.height="".concat(this.thumbContainerHeight,"px"),this.elements.thumb.imageContainer.style.width="".concat(e,"px")}this.setThumbContainerPos()}},{key:"setThumbContainerPos",value:function(){var e=this.player.elements.progress.getBoundingClientRect(),t=this.player.elements.container.getBoundingClientRect(),n=this.elements.thumb.container,i=t.left-e.left+10,r=t.right-e.left-n.clientWidth-10,a=this.mousePosX-e.left-n.clientWidth/2;ar&&(a=r),n.style.left="".concat(a,"px")}},{key:"setScrubbingContainerSize",value:function(){this.elements.scrubbing.container.style.width="".concat(this.player.media.clientWidth,"px"),this.elements.scrubbing.container.style.height="".concat(this.player.media.clientWidth/this.thumbAspectRatio,"px")}},{key:"setImageSizeAndOffset",value:function(e,t){if(this.usingSprites){var n=this.thumbContainerHeight/t.h;e.style.height="".concat(Math.floor(e.naturalHeight*n),"px"),e.style.width="".concat(Math.floor(e.naturalWidth*n),"px"),e.style.left="-".concat(t.x*n,"px"),e.style.top="-".concat(t.y*n,"px")}}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.previewThumbnails.enabled}},{key:"currentImageContainer",get:function(){return this.mouseDown?this.elements.scrubbing.container:this.elements.thumb.imageContainer}},{key:"usingSprites",get:function(){return Object.keys(this.thumbnails[0].frames[0]).includes("w")}},{key:"thumbAspectRatio",get:function(){return this.usingSprites?this.thumbnails[0].frames[0].w/this.thumbnails[0].frames[0].h:this.thumbnails[0].width/this.thumbnails[0].height}},{key:"thumbContainerHeight",get:function(){return this.mouseDown?Math.floor(this.player.media.clientWidth/this.thumbAspectRatio):Math.floor(this.player.media.clientWidth/this.thumbAspectRatio/4)}},{key:"currentImageElement",get:function(){return this.mouseDown?this.currentScrubbingImageElement:this.currentThumbnailImageElement},set:function(e){this.mouseDown?this.currentScrubbingImageElement=e:this.currentThumbnailImageElement=e}}]),e}(),_n={insertElements:function(e,t){var n=this;$e.string(t)?st(e,this.media,{src:t}):$e.array(t)&&t.forEach(function(t){st(e,n.media,t)})},change:function(e){var t=this;Pt(e,"sources.length")?(xt.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],ot(t.media),t.media=null,$e.element(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,r=Be(n,1)[0],a=r.provider,s=void 0===a?Qt.html5:a,o=r.src,l="html5"===s?i:"div",c="html5"===s?{}:{src:o};Object.assign(t,{provider:s,type:i,supported:St.check(i,s,t.config.playsinline),media:at(l,c)}),t.elements.container.appendChild(t.media),$e.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),$e.empty(e.poster)||(t.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","")),on.addStyleHook.call(t),t.isHTML5&&_n.insertElements.call(t,"source",n),t.config.title=e.title,bn.setup.call(t),t.isHTML5&&Object.keys(e).includes("tracks")&&_n.insertElements.call(t,"track",e.tracks),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&on.build.call(t),t.isHTML5&&t.media.load(),t.previewThumbnails&&t.previewThumbnails.load(),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},Tn=function(){function e(t,n){var i=this;if(Re(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=St.touch,this.media=t,$e.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||$e.nodeList(this.media)||$e.array(this.media))&&(this.media=this.media[0]),this.config=Ot({},Jt,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new tn(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",St),!$e.nullOrUndefined(this.media)&&$e.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(St.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var a=this.media.tagName.toLowerCase(),s=null,o=null;switch(a){case"div":if(s=this.media.querySelector("iframe"),$e.element(s)){if(o=Kt(s.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtube-nocookie\.com|youtu\.?be)\/.+$/.test(e)?Qt.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?Qt.vimeo:null}(o.toString()),this.elements.container=this.media,this.media=s,this.elements.container.className="",o.search.length){var l=["1","true"];l.includes(o.searchParams.get("autoplay"))&&(this.config.autoplay=!0),l.includes(o.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?(this.config.playsinline=l.includes(o.searchParams.get("playsinline")),this.config.youtube.hl=o.searchParams.get("hl")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if($e.empty(this.provider)||!Object.keys(Qt).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Zt.video;break;case"video":case"audio":this.type=a,this.provider=Qt.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-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=St.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new cn(this),this.storage=new Ft(this),this.media.plyr=this,$e.element(this.elements.container)||(this.elements.container=at("div",{tabindex:0}),it(this.media,this.elements.container)),on.addStyleHook.call(this),bn.setup.call(this),this.config.debug&&Ze.call(this,this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: ".concat(e.type))}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&on.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new an(this),this.config.ads.enabled&&(this.ads=new kn(this)),this.config.autoplay&&this.play(),this.lastSeekTime=0,this.config.previewThumbnails.enabled&&(this.previewThumbnails=new wn(this))):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 Fe(e,[{key:"play",value:function(){var e=this;return $e.function(this.media.play)?(this.ads&&this.ads.enabled&&this.ads.managerPromise.then(function(){return e.ads.play()}).catch(function(){return e.media.play()}),this.media.play()):null}},{key:"pause",value:function(){this.playing&&$e.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){($e.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):$e.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-($e.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+($e.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+($e.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){Yt.toggle.call(this,e,!1)}},{key:"airplay",value:function(){St.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=pt(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=ht(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!$e.empty(this.config.settings)&&Wt.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";nt.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){Ze.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){tt.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){et(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&&(ot(t.elements.buttons.play),ot(t.elements.captions),ot(t.elements.controls),ot(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),$e.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,n=e.type,i=e.callback,r=e.options;t.removeEventListener(n,i,r)}),this.eventListeners=[])}.call(t),ct(t.elements.original,t.elements.container),nt.call(t,t.elements.original,"destroyed",!0),$e.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),on.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&$e.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return St.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===Qt.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===Qt.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===Qt.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===Zt.video)}},{key:"isAudio",get:function(){return Boolean(this.type===Zt.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){if(this.duration){var t=$e.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to ".concat(this.currentTime," seconds"))}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return $e.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||{}).duration,n=$e.number(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;$e.string(t)&&(t=Number(t)),$e.number(t)||(t=this.storage.get("volume")),$e.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!$e.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;$e.boolean(t)||(t=this.storage.get("muted")),$e.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;$e.number(e)&&(t=e),$e.number(t)||(t=this.storage.get("speed")),$e.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 (".concat(t,")"))},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!$e.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find($e.number),r=!0;if(!n.includes(i)){var a=function(e,t){return $e.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)1&&void 0!==arguments[1]?arguments[1]:{},i=null;return $e.string(t)?i=Array.from(document.querySelectorAll(t)):$e.nodeList(t)?i=Array.from(t):$e.array(t)&&(i=t.filter($e.element)),$e.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();Tn.defaults=(fn=Jt,JSON.parse(JSON.stringify(fn))),gn=window.location.host,vn="plyr.io"===gn,document.addEventListener("DOMContentLoaded",function(){Ie.context(function(){var e=document.getElementById("container");window.shr&&window.shr.setup({count:{classname:"button__count"}}),document.addEventListener("focusout",function(t){t.target.classList&&!e.contains(t.target)&&t.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(t){9===t.keyCode&&setTimeout(function(){var t=document.activeElement;t&&t.classList&&!e.contains(t)&&t.classList.add("tab-focus")},10)});var t="https://pubads.g.doubleclick.net/gampad/live/ads?sz=640x360&iu=/21736521837/ovo/web&impl=s&gdfp_req=1&env=vp&output=vast&cust_params=usergroup%3D".concat("annon","%26content-type%3D").concat("on-demand","&cmsid=").concat(2490180,"&vid=").concat(3788),n=new Tn("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0,tagUrl:t},previewThumbnails:{enabled:!0,src:["https://cdn.plyr.io/static/demo/thumbs/100p.vtt","https://cdn.plyr.io/static/demo/thumbs/240p.vtt"]}});window.player=n;var i=document.querySelectorAll("[data-source]"),r={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},a=window.location.hash.replace("#",""),s=window.history&&window.history.pushState;function o(e,t,n){e&&e.classList[n?"add":"remove"](t)}function l(e,t){if(e in r&&(t||e!==a)&&(a.length||e!==r.video)){switch(e){case r.video:n.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",type:"video/mp4",size:576},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4",type:"video/mp4",size:720},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4",type:"video/mp4",size:1080},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4",type:"video/mp4",size:1440}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case r.audio:n.source={type:"audio",title:"Kishi Bashi – “It All Began With A Burst”",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case r.youtube:n.source={type:"video",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case r.vimeo:n.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}a=e,Array.from(i).forEach(function(e){return o(e.parentElement,"active",!1)}),o(document.querySelector('[data-source="'.concat(e,'"]')),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--".concat(e)).removeAttribute("hidden")}}if(Array.from(i).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");l(t),s&&window.history.pushState({type:t},"","#".concat(t))})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&l(e.state.type)}),s){var c=!a.length;c&&(a=r.video),a in r&&window.history.replaceState({type:a},"",c?"":"#".concat(a)),a!==r.video&&l(a,!0)}})}),vn&&Ie.config("https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555").install()}(); //# sourceMappingURL=demo.min.js.map diff --git a/demo/dist/demo.min.js.map b/demo/dist/demo.min.js.map index c611eceb..f9b9e67a 100644 --- a/demo/dist/demo.min.js.map +++ b/demo/dist/demo.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/raven-js/vendor/json-stringify-safe/stringify.js","node_modules/raven-js/src/utils.js","node_modules/raven-js/vendor/TraceKit/tracekit.js","node_modules/raven-js/vendor/md5/md5.js","node_modules/raven-js/src/configError.js","node_modules/raven-js/src/console.js","node_modules/raven-js/src/raven.js","node_modules/raven-js/src/singleton.js","src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/utils/style.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","demo/src/js/demo.js","src/js/media.js","src/js/plugins/ads.js","src/js/plugins/previewThumbnails.js","src/js/source.js","src/js/plyr.js"],"names":["indexOf","haystack","needle","i","length","serializer","replacer","cycleReplacer","stack","keys","key","value","slice","join","thisPos","this","splice","push","Infinity","call","Error","err","message","name","Object","prototype","hasOwnProperty","stringifyError","module","exports","obj","spaces","JSON","stringify","getSerialize","_window","window","global","self","isUndefined","what","isPlainObject","toString","isString","isArray","supportsFetch","Headers","Request","Response","e","each","callback","j","hasKey","truncate","str","max","substr","object","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","undefined","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","type","utils","isObject","isError","isErrorEvent","isDOMError","isDOMException","isFunction","isEmptyObject","_","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","objectFrozen","isFrozen","urlencode","o","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","input","delimiter","output","String","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","Array","map","val","serializeKeysForMessage","maxLength","filter","usedKeys","sanitize","sanitizeKeys","safeInput","sanitizeRegExp","sanitizeMask","parse","o_O","sanitizeWorker","workerInput","k","test","TraceKit","collectWindowErrors","debug","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","document","location","href","report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastException","lastExceptionStack","notifyHandlers","isWindowError","exception","apply","concat","arguments","inner","traceKitWindowOnError","msg","lineNo","colNo","error","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","groups","line","column","func","_lastExceptionStack","_lastArgs","rethrow","args","setTimeout","incomplete","subscribe","handler","onerror","unsubscribe","uninstall","computeStackTraceFromStackProp","submatch","parts","element","chrome","winjs","gecko","geckoEval","chromeEval","lines","exec","isNative","columnNumber","xhr","XMLHttpRequest","open","send","status","responseText","sourceMaps","sourceMapAddress","charAt","origin","hostname","port","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","result","sourceURL","fileName","lineNumber","description","tracekit","safeAdd","x","y","lsw","md5cmn","q","s","t","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","hash","bkey","ipad","opad","rstrHMACMD5","md5_1","string","raw","RavenConfigError","constructor","configError","console$1","console","level","originalConsoleLevel","originalConsole","sentryLevel","logger","extra","Function","wrapConsoleMethod","require$$0","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","Raven","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","property","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","mechanism","handled","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodedOptions","email","globalServer","script","createElement","async","src","head","body","appendChild","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","function","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","props","onreadystatechange","origFetch","fetchInput","fetchData","then","response","attachEvent","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","builtin","installer","m","allowSecretKey","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","prefixedMessage","transaction","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","XDomainRequest","onload","setRequestHeader","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","singleton","Client","getConstructor","instanceOf","Boolean","isNullOrUndefined","isNodeList","NodeList","isEmpty","is","nullOrUndefined","number","Number","isNaN","boolean","array","weakMap","WeakMap","nodeList","Element","textNode","Text","Event","keyboardEvent","KeyboardEvent","cue","TextTrackCue","VTTCue","TextTrack","kind","promise","Promise","URL","startsWith","empty","supportsPassiveListeners","supported","defineProperty","toggleListener","_this","toggle","passive","events","eventListeners","on","off","once","_this2","onceCallback","_len","_key","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","elements","wrapper","targets","index","child","cloneNode","parent","sibling","nextSibling","insertBefore","setAttributes","attributes","entries","_ref","_slicedToArray","_ref3","_ref4","setAttribute","text","innerText","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","trim","class","toggleHidden","hidden","hide","removeAttribute","toggleClass","force","classList","contains","hasClass","matches","querySelectorAll","includes","getElements","container","getElement","querySelector","setFocus","tabFocus","focus","preventScroll","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","repaint","offsetHeight","range","browser","isIE","documentMode","isEdge","isWebkit","documentElement","isIPhone","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","mediaType","isHTML5","media","canPlayType","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","getQualityOptions","extend","player","set","_player$media","currentTime","paused","preload","play","load","quality","cancelRequests","blankVideo","dedupe","getDeep","_defineProperty","format","replaceAll","toTitleCase","toCamelCase","toPascalCase","getHTML","innerHTML","resources","vimeo","youtube","i18n","{seektime}","seekTime","{title}","title","_ref2","Storage","_classCallCheck","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","responseType","resolve","reject","loadSprite","hasId","exists","getElementById","update","insertAdjacentElement","useStorage","cached","content","catch","getHours","trunc","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","createBadge","badge","menu","createButton","buttonType","label","labelPressed","iconPressed","control","button","createRange","step","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","preventDefault","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","_ref$badge","_ref$checked","checked","aria-checked","flex","enumerable","children","node","listeners","currentTrack","speed","parseFloat","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","_this3","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this4","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","pow","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","getBadge","sorting","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","setSpeedMenu","_this7","isVimeo","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","scrollHeight","_this8","size","restore","propertyName","setDownloadLink","download","create","_this9","aria-haspopup","aria-controls","aria-expanded","home","backButton","urls","isEmbed","inject","_this10","floor","seektime","addProperty","controlPressed","_this$config","labels","parser","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","blob","createObjectURL","languages","userLanguage","active","trackEvents","_this$captions","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","_toConsumableArray","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","previewThumbnails","thumbContainer","thumbContainerShown","imageContainer","timeContainer","scrubbingContainer","scrubbingContainerShown","google","publisherId","tagUrl","byline","portrait","transparent","noCookie","rel","showinfo","iv_load_policy","modestbranding","providers","types","noop","Console","onChange","first","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","viewport","hasProperty","cleanupViewport","part","Fullscreen","prefix","forceFallback","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","timers","recentTouchSeek","lastSeekTime","setAspectRatio","_ratio$split$map2","padding","paddingBottom","offset","transform","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","usingNative","timeStamp","wasKeyDown","delay","setPlayerSize","measure","rect","resized","_player$fullscreen","isEnter","_setPlayerSize","firstChild","_player$embed$ratio$s2","videoWidth","videoHeight","maxWidth","margin","setGutter","hasAudio","isAudio","ended","proxy","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","inputEvent","currentTarget","hasAttribute","done","seekTo","loaded","startMove","endMove","startScrubbing","endScrubbing","webkitDirectionInvertedFromDevice","_map2","deltaX","deltaY","direction","sign","abs","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","doc","maxTries","numRetries","beforeCallbackFn","pathStripped","onbeforeload","ev","sheet","cssText","defaultPrevented","loadjs","paths","arg1","arg2","numWaiting","loadFiles","deps","bundleIds","isDefined","factory","loadScript","assurePlaybackState","hasPlayed","Vimeo","gesture","$2","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","currentSrc","setLoop","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","_dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","createDocumentFragment","getPaused","seconds","env","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","disablekb","cc_load_policy","cc_lang_pref","widget_referrer","2","5","100","101","150","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","unMute","Ads","initialized","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","setDisableCustomPlaybackForIOS10Plus","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","adData","getAdData","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","LOG","adError","getMessage","cancel","contentComplete","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","init","zIndex","destroy","_this11","_this12","AV_PUBLISHERID","AV_CHANNELID","AV_URL","AV_WIDTH","AV_HEIGHT","AV_CDIM2","PreviewThumbnails","thumbnails","lastMouseMoveTime","mouseDown","loadedImages","thumb","scrubbing","getThumbnails","render","determineContainerAutoSizing","promises","u","getThumbnail","vttDataString","processedList","thumbnail","startTime","lineSplit","_lineSplit","_lineSplit$1$split2","w","h","matchTimes","endTime","urlPrefix","tempImage","naturalHeight","percentage","mousePosX","showImageAtCurrentTime","toggleThumbContainer","toggleScrubbingContainer","ceil","lastTime","setScrubbingContainerSize","setThumbContainerSizeAndPos","thumbNum","findIndex","hasThumb","qualityIndex","showingThumb","thumbFilename","thumbUrl","currentImageElement","dataset","showImage","removeOldImages","loadingImage","usingSprites","previewImage","showingThumbFilename","newImage","setImageSizeAndOffset","currentImageContainer","preloadNearby","getHigherQuality","currentImage","removeDelay","deleting","oldThumbFilename","thumbnailsClone","foundOne","newThumbFilename","thumbURL","currentQualityIndex","previewImageHeight","thumbContainerHeight","clearShowing","clientHeight","sizeSpecifiedInCSS","thumbWidth","thumbAspectRatio","setThumbContainerPos","seekbarRect","plyrRect","minVal","maxVal","right","clientWidth","previewPos","multiplier","top","currentScrubbingImageElement","currentThumbnailImageElement","insertElements","attribute","change","_sources$","_sources$$provider","crossorigin","Plyr","failed","jQuery","getProviderByUrl","search","truthy","searchParams","tabindex","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","prev","closest","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","shr","count","classname","remove","add","currentType","historySupport","newSource","srclang","parentElement","cite"],"mappings":"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","file":"demo.min.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : typeof self !== 'undefined'\n ? self\n : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if stacktrace is malformed\n if (frames1 === undefined || frames2 === undefined) return false;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n return (\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '')\n );\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.27.0',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = {};\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} _before A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n // Always attempt to get stacktrace if message is empty.\n // It's the only way to provide any helpful information to the user.\n if (this._globalOptions.stacktrace || options.stacktrace || data.message === '') {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = objectMerge(\n {\n eventId: this.lastEventId(),\n dsn: this._dsn,\n user: this._globalContext.user || {}\n },\n options\n );\n\n if (!options.eventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n if (!options.dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var encodedOptions = [];\n\n for (var key in options) {\n if (key === 'user') {\n var user = options.user;\n if (user.name) encodedOptions.push('name=' + encode(user.name));\n if (user.email) encodedOptions.push('email=' + encode(user.email));\n } else {\n encodedOptions.push(encode(key) + '=' + encode(options[key]));\n }\n }\n var globalServer = this._getGlobalServer(this._parseDSN(options.dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/?' + encodedOptions.join('&');\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: orig.name || ''}\n }\n },\n originalCallback\n );\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'handleEvent',\n handler: (fn && fn.name) || ''\n }\n }\n },\n fn.handleEvent\n );\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'addEventListener',\n handler: (fn && fn.name) || ''\n }\n }\n },\n fn,\n before\n ),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'requestAnimationFrame',\n handler: (orig && orig.name) || ''\n }\n }\n },\n cb\n )\n );\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: prop, handler: (orig && orig.name) || ''}\n }\n },\n orig\n );\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'onreadystatechange',\n handler: (orig && orig.name) || ''\n }\n }\n },\n orig,\n onreadystatechangeHandler\n );\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function(stackInfo, options) {\n options = options || {};\n options.mechanism = options.mechanism || {\n type: 'onerror',\n handled: false\n };\n\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo(stackInfo, options);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n var ex = data.exception.values[0];\n if (ex.type == null && ex.value === '') {\n ex.value = 'Unrecoverable error caught';\n }\n\n // Move mechanism from options to exception interface\n // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n // too much\n if (!data.exception.mechanism && data.mechanism) {\n data.exception.mechanism = data.mechanism;\n delete data.mechanism;\n }\n\n data.exception.mechanism = objectMerge(\n {\n type: 'generic',\n handled: true\n },\n data.exception.mechanism || {}\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\nconst isPromise = input => instanceOf(input, Promise);\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n promise: isPromise,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\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\nconst supportsPassiveListeners = (() => {\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 window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\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 (supportsPassiveListeners) {\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 if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n const onceCallback = (...args) => {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n };\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || 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: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(resolve =>\n this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function 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// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new \n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function 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 (!is.string(sel) || 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 (is.object(existing) && 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\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function 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 =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = 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 = document.activeElement;\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 toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus({ preventScroll: true });\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const 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 is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isEdge: window.navigator.userAgent.includes('Edge'),\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\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\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 const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Detect support for autoplay\n /* autoplay: (() => {\n const video = document.createElement('video');\n video.src = 'https://cdn.plyr.io/static/blank.mp4';\n const promise = video.play();\n\n if (is.promise(promise)) {\n console.warn('PROMISE', promise);\n\n promise\n .then(() => {\n console.warn('supported');\n return true;\n })\n .catch(() => {\n console.warn('not supported');\n return false;\n });\n } else {\n console.warn('supported - no promise');\n return true;\n }\n })(), */\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: 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(input) {\n if (is.empty(input)) {\n return false;\n }\n\n const [mediaType] = input.split('/');\n let type = input;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[input]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (e) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // 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: 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 { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources (if type is specified)\n return sources.filter(source => {\n const type = source.getAttribute('type');\n\n if (is.empty(type)) {\n return true;\n }\n\n return support.mime.call(this, type);\n });\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('size')))\n .filter(Boolean);\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 const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.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 removeElement(html5.getSources.call(this));\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// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!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\nexport function closest(array, value) {\n if (!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// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function 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// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function 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\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function 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// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\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 || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return 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 (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function 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.status);\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// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => Math.trunc((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => Math.trunc((value / 60) % 60, 10);\nexport const getSeconds = value => Math.trunc(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return 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 = getHours(time);\n const mins = getMinutes(time);\n const secs = 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 && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n setFocus,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\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\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\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 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 \n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the 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 }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add to \n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n 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
to hide the standard controls and UI\n if (this.isVimeo && this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n\n return { padding, ratio };\n}\n\nexport default { setAspectRatio };\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport { setAspectRatio } from './utils/style';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\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 (!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 player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\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 player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !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 (code === 27 && !player.fullscreen.usingNative && player.fullscreen.active) {\n 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 const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { config, elements, timers } = player;\n\n // Keyboard shortcuts\n if (!config.keyboard.global && config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Set new timer to prevent flicker when seeking\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n\n // Force edge to repaint on exit fullscreen\n // TODO: Fix weird bug where Edge doesn't re-draw when exiting fullscreen\n /* if (browser.isEdge) {\n on.call(player, elements.container, 'exitfullscreen', () => {\n setTimeout(() => repaint(elements.container), 100);\n });\n } */\n\n // Set a gutter for Vimeo\n const setGutter = (ratio, padding, toggle) => {\n if (!player.isVimeo) {\n return;\n }\n\n const target = player.elements.wrapper.firstChild;\n const [, height] = ratio.split(':').map(Number);\n const [videoWidth, videoHeight] = player.embed.ratio.split(':').map(Number);\n\n target.style.maxWidth = toggle ? `${(height / videoHeight) * videoWidth}px` : null;\n target.style.margin = toggle ? '0 auto' : null;\n };\n\n // Resize on fullscreen change\n const setPlayerSize = measure => {\n // If we don't need to measure the viewport\n if (!measure) {\n return setAspectRatio.call(player);\n }\n\n const rect = elements.container.getBoundingClientRect();\n const { width, height } = rect;\n\n return setAspectRatio.call(player, `${width}:${height}`);\n };\n\n const resized = () => {\n window.clearTimeout(timers.resized);\n timers.resized = window.setTimeout(setPlayerSize, 50);\n };\n\n on.call(player, elements.container, 'enterfullscreen exitfullscreen', event => {\n const { target, usingNative } = player.fullscreen;\n\n // Ignore for iOS native\n if (!player.isEmbed || target !== elements.container) {\n return;\n }\n\n const isEnter = event.type === 'enterfullscreen';\n\n // Set the player size when entering fullscreen to viewport size\n const { padding, ratio } = setPlayerSize(isEnter);\n\n // Set Vimeo gutter\n setGutter(ratio, padding, isEnter);\n\n // If not using native fullscreen, we need to check for resizes of viewport\n if (!usingNative) {\n if (isEnter) {\n on.call(player, window, 'resize', resized);\n } else {\n off.call(player, window, 'resize', resized);\n }\n }\n });\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\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 on.call(player, player.media, 'canplay loadeddata', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n this.proxy(event, player.restart, 'restart');\n this.proxy(event, player.play, 'play');\n } else {\n this.proxy(event, player.togglePlay, 'play');\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an ,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Preview thumbnails plugin\n // TODO: Really need to work on some sort of plug-in wide event bus or pub-sub for this\n this.bind(elements.progress, 'mousemove touchmove', event => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startMove(event);\n }\n });\n\n // Hide thumbnail preview - on mouse click, mouse leave, and video play/seek. All four are required, e.g., for buffering\n this.bind(elements.progress, 'mouseleave click', () => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endMove(false, true);\n }\n });\n\n // Show scrubbing preview\n this.bind(elements.progress, 'mousedown touchstart', event => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startScrubbing(event);\n }\n });\n\n this.bind(elements.progress, 'mouseup touchend', event => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endScrubbing(event);\n }\n });\n\n // Polyfill for lower fill in for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n 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\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\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` (unless error is Code:18 SecurityError)\n if (x.code != 18) 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// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { extend } from '../utils/objects';\nimport { format, stripHTML } from '../utils/strings';\nimport { setAspectRatio } from '../utils/style';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\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 // API Ready\n ready() {\n const player = this;\n const config = player.config.vimeo;\n\n // Get Vimeo params for the iframe\n const params = buildUrlParams(\n extend(\n {},\n {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n muted: player.muted,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n },\n config,\n ),\n );\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = 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 // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (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 and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\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 assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\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 // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\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 triggerEvent.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 triggerEvent.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 = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.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 = 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 controls.setDownloadLink.call(player);\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([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n const [width, height] = dimensions;\n player.embed.ratio = `${width}:${height}`;\n setAspectRatio.call(this, player.embed.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 triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.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', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (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 assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.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 triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.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 ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { extend } from '../utils/objects';\nimport { format, generateId } from '../utils/strings';\nimport { setAspectRatio } from '../utils/style';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (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// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n setAspectRatio.call(this);\n\n // Setup API\n if (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n 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 (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (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 (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (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 // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!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
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the